Ubuntu Linux - nhiều NIC, cùng các phản hồi ARP LAN LAN luôn đi ra một NIC duy nhất


16

Chúng tôi đã có dịch vụ internet AT & T U-Verse, có một cổng DSL cực kỳ xương.

Chúng tôi có 5 IP (netmask 248), nhưng cổng không có khả năng làm bất cứ điều gì ngoài một IP -> ánh xạ địa chỉ MAC duy nhất.

Chúng tôi có một máy tường lửa duy nhất và chúng tôi chuyển hướng các combo IP / cổng khác nhau đến các địa điểm khác nhau trong DMZ.

Giải pháp của chúng tôi cho đến nay là có một máy ảo VMWare trên tường lửa với 4 NIC bổ sung trong đó, để có được 4 địa chỉ IP khác ... tuy nhiên chúng tôi có một vấn đề.

Cổng về cơ bản đang thực hiện ping ARP để xem IP có phản hồi trên MAC dự kiến ​​hay không. Với tất cả 4 NIC trên cùng một mạng LAN, linux đang đáp ứng các yêu cầu ARP cho TẤT CẢ IP bằng một giao diện duy nhất. Đó không phải là điều mà cổng thông tin đang mong đợi và nó làm rối tung 3 NIC khác. Cổng từ chối định tuyến lưu lượng đến cho các IP nơi kết quả ping ARP không phải là MAC mong đợi.

Làm thế nào chúng ta có thể nhận được các câu trả lời ARP cho IP của eth0 để đi ra eth0, IP của eth1 để đi ra eth1, v.v.?

BIÊN TẬP

Phản ứng của Christopher Cashell không hoạt động trong tình huống này. Tôi đã có hy vọng lớn khi đọc nó, nhưng ... không.

CHỈNH SỬA 2

Đã giải quyết! Xem câu trả lời của tôi dưới đây.


PS - không có ý kiến ​​'thả uverse' ... U-Verse là 18mbps, so với 3mbps của mọi thứ khác hoặc 10mbps rất không đáng tin cậy qua cáp
darron

@dblack: Bạn đã quên thêm câu trả lời của mình :)
Mihai Limbăşan

Trang web api.recaptcha.net đã ngừng hoạt động một chút. Câu trả lời là ngay bây giờ.
darron

Câu trả lời:


13

Giải pháp bạn đã chọn hoạt động, nhưng có những giải pháp thay thế không liên quan đến tài sản. (Christopher Cashell đã đi đúng hướng, ban đầu, nhưng anh ấy đã tắt bởi một nụ cười.)

Nói tóm lại, bạn muốn đặt các tham số này:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Chúng nên có sẵn khi chạy kernel Linux, 2.6 series hiện đại. Kiểm tra và đảm bảo rằng bạn '/ Proc / sys / net / ipv4 / conf / / arp_announce' và / Proc / sys / net / ipv4 / conf / / arp_ignore 'trên hệ thống của bạn.

Tham số 'arp_filter' chỉ hoạt động khi các địa chỉ IP khác nhau của bạn chia sẻ một phân đoạn LAN nhưng sử dụng mạng con IP khác nhau. Nếu họ cũng chia sẻ mạng con IP, bạn cần sử dụng 'arp_ignore' và 'arp_announce', như trên.

(Tôi tin rằng bạn cũng có thể cần phải đặt 'arp_filter' trở lại '0'.)


Điều gì đã xảy ra với arp_filter? Đó là một giải pháp sớm (2003?) Cho vấn đề ARP, nhưng dường như nó không hoạt động như mô tả, ít nhất là trên Centos 5. arp_ignore và arp_announce có vẻ tốt.
pcapademia

Giải pháp này, dường như, chỉ hoạt động ở cấp độ ARP. Nếu không có cài đặt tuyến bổ sung, tường lửa vẫn có thể chọn thẻ gửi đi (và MAC) sai cho lưu lượng IP đi của chính nó, nhưng sẽ (vẫn) luôn nhận được lưu lượng IP đến trên thẻ bên phải, dẫn đến đường dẫn không đối xứng và xem xét rp_filter.
AB

8

Được rồi, đây là giải pháp. Đầu tiên, một bản tóm tắt:

Đây là gói mạng cơ bản của tôi:

 eth0 10.10.10.2 netmask 255.255.255.248
 eth1 10.10.10.3 netmask 255.255.255.248
 eth2 10.10.10.4 netmask 255.255.255.248
 eth3 10.10.10.5 netmask 255.255.255.248

Tất cả các giao diện chồng chéo. Điều này là sai về mặt kỹ thuật, và nguồn gốc của tất cả các tai ương của tôi ... nhưng tôi phải làm điều đó vì cổng dân cư ngu ngốc này.

Đầu tiên, yêu cầu phát sóng ARP đi đến tất cả những điều này. Vì cả 4 IP là địa chỉ cục bộ hợp lệ, cả 4 giao diện sẽ cố gắng phản hồi.

1) cài đặt arptables . Thêm nơi này trong khi khởi động ( /etc/rc.local tại đây):

arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP

Điều này sẽ ngăn phát sóng đi vào giao diện sai. Vì vậy, giao diện chính xác bây giờ sẽ là phản hồi duy nhất.

Điều đó tự nó là không đủ. Bit tiếp theo là một vấn đề bảng ARP. PC yêu cầu có thể đã có mục nhập bảng ARP và do đó Linux sẽ sử dụng giao diện được liên kết với đó. Cho đến khi mục nhập bảng ARP hết hạn, nó sẽ cố gắng gửi phản hồi ARP bằng giao diện của mục đó, chứ không phải liên kết với yêu cầu ARP.

Tùy chọn sysctl rp_filter dường như đang từ chối các gói phản hồi ARP đi nếu chúng ở trên giao diện sai. Vì thế...

2) Vô hiệu hóa rp_filter .

Trên Debian / Ubuntu, điều này có nghĩa là nhận xét hai dòng rp_filter trong /etc/sysctl.d/10-network-security.conf .

Tùy chọn này được kích hoạt vì một lý do ... cụ thể là để giúp ngăn chặn các cuộc tấn công giả mạo giao diện chéo. Tôi đọc nó xác minh rằng gói tin là hợp pháp cho giao diện mà nó đang đến hoặc đi ra (bằng cách hoán đổi MAC và IP và xem liệu nó có còn định tuyến trên cùng một giao diện không). Vì vậy, thông thường sẽ là một ý tưởng tồi để tắt nó đi. Trong trường hợp của tôi, tất cả các giao diện đều nằm trên cùng một mạng ... vì vậy việc kiểm tra đó hoàn toàn không thành vấn đề.

Nếu tôi thêm một giao diện khác và cần sự bảo vệ giả mạo, có lẽ có thể tạo một số mục arptables / iptables để làm điều tương tự.


5

Điều này có liên quan đến cách Linux xử lý IP và NIC. Về cơ bản, nó xử lý một địa chỉ IP như thể nó thuộc về hộp chứ không chỉ là một NIC cụ thể. Kết quả là bạn có thể nhận được phản hồi ARP từ địa chỉ IP trên các giao diện mà bạn không mong đợi.

Giải pháp là một tùy chọn sysctl. Như tôi nhớ, những gì bạn đang tìm kiếm là:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

Điều đó sẽ khắc phục vấn đề cho bạn. Chỉ cần thêm chúng vào /etc/sysctl.conf và chạy ' sysctl -p' (hoặc chạy từng dòng làm đối số cho ' sysctl -w'.

Điều này sẽ khiến Linux chỉ đáp ứng các yêu cầu ARP trên giao diện mà địa chỉ IP thực sự được gán cho.


hmm ... thật không may, nó dường như không hoạt động. Tôi đã dán nó vào sysctl.conf, chạy sysctl, thậm chí khởi động lại, không thay đổi. Tôi có thể chọn các tùy chọn trong / Proc và xem chúng được đặt, nhưng nếu tôi lấy từ một hộp khác, tất cả các phản hồi đều đến từ cùng một MAC. Các giao diện đều nằm trên cùng một mạng (cùng phát sóng, v.v.) ...
darron

1
Đây là giải pháp chính xác nếu các giao diện nằm trên cùng một mạng, nhưng có địa chỉ trong các mạng con khác nhau. Khẳng định làm việc.
Alastair Irvine


0

Bạn có thể bắc cầu qua cổng và để tường lửa xử lý IP không?


theo như tôi hiểu thì không ... nhưng ai đó làm ơn sửa tôi nếu tôi sai.
darron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.