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.
Odpowiedzi:
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:
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”).
źródło
Dobra, oto rozwiązanie. Po pierwsze, podsumowanie:
Oto mój podstawowy plan sieci:
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):
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.
źródło
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:
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.
źródło
Akceptowana odpowiedź w połączeniu z tym: http://www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/
gdzie trasy statyczne są używane do komunikowania się tylko z pożądanymi adresami IP przez określone interfejsy, stworzyłem potężne i proste rozwiązanie podobnego problemu, jaki miałem.
źródło
Czy można zmostkować bramę i umożliwić zaporze obsługę adresów IP?
źródło