Ubuntu Linux - wiele kart sieciowych, ta sama sieć LAN… Odpowiedzi ARP zawsze wychodzą z jednej karty sieciowej

16

Posiadamy serwis internetowy AT&T U-Verse, który ma wyjątkowo kościstą bramę DSL.

Mamy 5 adresów IP (maska ​​sieci 248), ale brama nie jest w stanie nic zrobić poza pojedynczym mapowaniem adresu IP -> pojedynczego adresu MAC.

Mamy pojedynczą zaporę ogniową i przekierowujemy różne kombinacje adresów IP / portów do różnych miejsc w strefie DMZ.

Naszym dotychczasowym rozwiązaniem jest posiadanie maszyny wirtualnej VMWare na zaporze ogniowej z 4 dodatkowymi kartami sieciowymi, aby uzyskać pozostałe 4 adresy IP ... jednak mamy problem.

Brama zasadniczo wykonuje polecenie ping ARP, aby sprawdzić, czy adres IP odpowiada na oczekiwany adres MAC. Z 4 kartami sieciowymi w tej samej sieci LAN, Linux odpowiada na żądania ARP dla WSZYSTKICH adresów IP za pomocą jednego interfejsu. Nie tego oczekuje brama, która psuje 3 inne karty sieciowe. Brama odmawia kierowania ruchu przychodzącego dla adresów IP, w których wyniki ping ARP nie są oczekiwanym MAC.

Jak możemy uzyskać odpowiedzi ARP na adres IP eth0 wychodzący na eth0, adres IP eth1 wychodzący na eth1 itp.?

EDYTOWAĆ

Odpowiedź Christophera Cashell'a nie działa w tej sytuacji. Miałem wielkie nadzieje, że ją przeczytam, ale ... nie.

EDYCJA 2

Rozwiązany! Zobacz moją odpowiedź poniżej.

darron
źródło
PS - brak komentarzy „upuść odwrotnie” ... U-Verse ma 18 Mb / s, a wszystko inne 3 Mb / s lub bardzo niewiarygodne 10 Mb / s za pomocą kabla
darron
@dblack: Zapomniałeś dodać swoją odpowiedź :)
Mihai Limbăşan
Witryna api.recaptcha.net nie działała przez chwilę. Odpowiedź jest teraz.
darron

Odpowiedzi:

13

Wybrane przez Ciebie rozwiązanie działa, ale istnieją alternatywy, które nie wymagają użycia składników. (Christopher Cashell początkowo był na dobrej drodze, ale nie był zadowolony.)

Krótko mówiąc, chcesz ustawić te parametry:

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

Powinny być one dostępne podczas uruchamiania nowoczesnego jądra Linux z serii 2.6. Sprawdź i upewnij się, że '/ proc / sys / net / ipv4 / conf / / arp_announce' i / proc / sys / net / ipv4 / conf / / arp_ignore 'istnieją w twoim systemie.

Parametr „arp_filter” działa tylko wtedy, gdy różne adresy IP współużytkują segment LAN, ale używają innej podsieci IP. Jeśli współużytkują one również podsieć IP, musisz użyć „arp_ignore” i „arp_announce”, jak wyżej.

(Wydaje mi się, że być może trzeba też ustawić „arp_filter” z powrotem na „0”).

Ryan B. Lynch
źródło
Co się stało z arp_filter? Było to wczesne (2003?) Rozwiązanie problemu ARP, ale nie działa tak, jak opisano, przynajmniej na Centos 5. arp_ignore i arp_announce wydają się być dobre.
pcapademic
Takie rozwiązanie wydaje się działać tylko na poziomie ARP. Bez dodatkowych ustawień trasy zapora może nadal wybierać niewłaściwą kartę wychodzącą (i MAC) dla własnego wychodzącego ruchu IP, ale (nadal) zawsze odbierze przychodzący ruch IP na właściwej karcie, co prowadzi do asymetrycznej ścieżki i rozważań rp_filter.
AB
8

Dobra, oto rozwiązanie. Po pierwsze, podsumowanie:

Oto mój podstawowy plan sieci:

 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

Wszystkie interfejsy nakładają się. To technicznie złe i źródło wszystkich moich nieszczęść ... ale muszę to zrobić z powodu tej głupiej bramy mieszkalnej.

Po pierwsze, nadawane żądania ARP trafiają do wszystkich z nich. Ponieważ wszystkie 4 adresy IP są prawidłowymi adresami lokalnymi, wszystkie 4 interfejsy spróbują odpowiedzieć.

1) zainstaluj arptables . Dodaj to miejsce podczas uruchamiania ( /etc/rc.local tutaj):

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

Zapobiegnie to przejściu transmisji w niewłaściwy interfejs. Tak więc poprawny interfejs będzie teraz jedyną odpowiedzią.

To samo w sobie nie wystarczy. Kolejny bit to problem z tablicą ARP. Komputer żądający prawdopodobnie ma już wpis w tablicy ARP, więc Linux użyje interfejsu z tym związanego. Do czasu wygaśnięcia wpisu tablicy ARP będzie próbował wysyłać odpowiedzi ARP za pomocą interfejsu tego wpisu, a nie tego związanego z żądaniem ARP.

Opcja sysctl rp_filter wydaje się odrzucać wychodzące pakiety odpowiedzi ARP, jeśli mają niewłaściwy interfejs. Więc...

2) Wyłącz filtr rp_filter .

W systemie Debian / Ubuntu oznacza to skomentowanie dwóch linii rp_filter w /etc/sysctl.d/10-network-security.conf .

Ta opcja została włączona z jakiegoś powodu ... a mianowicie w celu zapobiegania atakom fałszowania między interfejsami. Przeczytałem, że weryfikuje, czy pakiet jest legalny dla interfejsu, z którego wchodzi lub wychodzi (poprzez zamianę adresów MAC i adresów IP i sprawdzenie, czy nadal trasuje przez ten sam interfejs). Tak więc normalnym rozwiązaniem byłoby wyłączenie. W moim przypadku wszystkie interfejsy są w tej samej sieci ... więc sprawdzenie nie ma tak naprawdę znaczenia.

Jeśli dodam inny interfejs i potrzebuję ochrony przed fałszowaniem, być może uda mi się stworzyć kilka wpisów arptables / iptables, aby zrobić to samo.

darron
źródło
5

Ma to związek ze sposobem, w jaki Linux obsługuje adresy IP i karty sieciowe. Zasadniczo traktuje adres IP tak, jakby należał do skrzynki, a nie tylko do konkretnej karty sieciowej. W rezultacie możesz uzyskać odpowiedzi ARP z adresów IP na interfejsach, których nie spodziewałbyś się.

Rozwiązaniem jest opcja sysctl. O ile pamiętam, szukasz:

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

To rozwiąże problem. Po prostu dodaj je do pliku /etc/sysctl.conf i uruchom „ sysctl -p” (lub uruchom każdy wiersz jako argument do „ sysctl -w”.

Spowoduje to, że Linux będzie odpowiadał tylko na żądania ARP w interfejsie, do którego faktycznie przypisany jest adres IP.

Christopher Cashell
źródło
hmm ... niestety to nie działa. Wkleiłem to do sysctl.conf, uruchomiłem sysctl, nawet uruchomiłem ponownie, bez zmian. Mogę ustawić opcje w / proc i sprawdzić, czy są ustawione, ale jeśli wyskakuję z innego okna, wszystkie odpowiedzi pochodzą z tego samego MAC. Wszystkie interfejsy są w tej samej sieci (ta sama transmisja itp.) ...
darron,
1
To poprawne rozwiązanie, jeśli interfejsy są w tej samej sieci, ale mają adresy w różnych podsieciach. Potwierdzona praca.
Alastair Irvine,
0

Czy można zmostkować bramę i umożliwić zaporze obsługę adresów IP?


źródło
o ile rozumiem, nie ... ale proszę, popraw mnie, jeśli się mylę.
darron