2010-04-29 14 views
5

Tôi có một thẻ với 2 thẻ eth, được kết nối với dây vá (cáp trực tiếp từ 1 đến 2).linux: vô hiệu hóa sử dụng loopback và gửi dữ liệu qua dây giữa 2 thẻ eth của một comp

Linux được cài đặt, tôi muốn gửi dữ liệu từ thẻ mạng thứ nhất đến thứ 2. Và tôi muốn buộc gói tin truyền qua cáp. Tôi có thể thiết lập bất kỳ ip trên thẻ.

Với ping, tôi nhận được các bộ đếm trên thẻ liên tục.

Có thể sử dụng ổ cắm tcp/ip không?

PS. Tôi cần viết một chương trình. sẽ gửi các gói thông qua eth, do đó, câu hỏi liên quan đến stackoverflow. Có thể có một số cách phụ thuộc vào hệ điều hành, chúng cũng sẽ giúp tôi quá

+0

Bản sao có thể có của http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface – osgx

+0

Điều này đã bị đóng dưới dạng chủ đề hai năm sau khi câu hỏi được trả lời. Tuy nhiên, câu trả lời mô tả các chương trình, và người hỏi nói rằng họ đang viết một chương trình. Vâng, đây cũng là chủ đề cho trang web Stack Exchange khác. Tôi sẽ gắn cờ cái này để mở lại. – dcorking

+0

dcorking, nhiệm vụ có thể được giải quyết bằng cách chỉ sử dụng các công cụ liên quan đến hệ điều hành mà không cần tạo chương trình mới. Câu trả lời từ z22 trông giống như những gì cần thiết. Và tại serverfault http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface chúng ta có giải pháp đúng. – osgx

Trả lời

0

Bạn có thể viết chương trình thực hiện điều đó bằng cách sử dụng ổ cắm gói (gia đình giao thức PF_PACKET), nhưng bạn sẽ phải xử lý tiêu đề cho IP và các lớp cao hơn.

+1

Vì vậy, tôi không thể buộc các gói TCP hoặc IP không được lặp lại? – osgx

+0

Tôi không tin như vậy, nhưng bạn có thể thử thêm một tuyến máy chủ cho mỗi IP thông qua giao diện ngược lại. – caf

5

Hãy xem trong địa phương bảng định tuyến. Với công cụ iproute2 được cài đặt, hãy thực hiện bảng hiển thị tuyến đường ip tại địa phương. Như bạn có thể thấy, tất cả các gói được chuyển đến IP cục bộ của bạn sẽ không bao giờ chuyển qua NIC vì chúng được đánh dấu là local.

Để buộc các gói đi qua thẻ ethernet xóa tuyến đường thích hợp (ví dụ: tuyến IP xóa 192.168.122.1 dev eth0 table local). Để khôi phục lại tuyến đường này, chỉ cần đặt giao diện xuống và xuống: hạt nhân sẽ thực hiện công việc để chèn các tuyến này.

+0

Ý tưởng có vẻ tốt.Chắc chắn, không thể ping giao diện cục bộ được nữa, nhưng có vẻ như không thể ping bất cứ thứ gì trên mạng (có vẻ như hạt nhân không chấp nhận gói cho IP này nữa). – Jezz

4

Tôi đã thử tuyến đường IP ... bảng địa phương phương pháp ở trên. Hoặc là nó không hoạt động hoặc tôi đang làm điều gì sai.

Bí quyết là sử dụng một tập hợp các địa chỉ IP giả để buộc hạt nhân định tuyến thông qua dây và NAT để thay đổi nó trở lại địa chỉ IP thực.

Cho eth0 và eth1 là hai thẻ ethernet; IP0 và IP1 địa chỉ IP của nó; MAC0 và MAC1 tương ứng với địa chỉ MAC của nó. Chúng tôi sẽ sử dụng hai địa chỉ IP giả: IP00 và IP11.

arp -s IP00 MAC0 
arp -s IP11 MAC1 
ip route add IP00 dev eth1 
ip route add IP11 dev eth0 
iptables -t nat -A POSTROUTING -d IP11 -j SNAT --to-source IP00 
iptables -t nat -A POSTROUTING -d IP00 -j SNAT --to-source IP11 
iptables -t nat -A PREROUTING -d IP00 -j DNAT --to-destination IP0 
iptables -t nat -A PREROUTING -d IP11 -j DNAT --to-destination IP1 

Sử dụng địa chỉ IP giả IP00 và IP11 thay vì địa chỉ IP thực.

Các vấn đề liên quan