Mam system z dwoma interfejsami. Oba interfejsy są połączone z Internetem. Jeden z nich jest ustawiony jako domyślna trasa; efektem ubocznym jest to, że jeśli pakiet wejdzie na interfejs trasy innej niż domyślna, odpowiedź zostanie odesłana przez domyślny interfejs trasy. Czy istnieje sposób użycia iptables (lub czegoś innego) do śledzenia połączenia i wysłania odpowiedzi z powrotem przez interfejs, z którego pochodzi?
51
dev
ip rule
ip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
iup ip route add default via <gateway_IP> dev ppp0 table isp2
do / etc / network / interfaces w ramach odpowiedniego interfejsu.dev <interface>
zip rule
, aby działał na moim pudełku. Jeśli dobrze rozumiem,dev <interface>
odfiltrowywałem pakiety, które były w jakiś sposób ustawione na niewłaściwym interfejsie, które musiały zostać przejęte do właściwego interfejsu przez przesłoniętą trasę, ale reguła filtrowania według interfejsu zapobiegała temu.dev <interface>
zip rule
poleceniem, aby to zadziałało. Zaktualizuj odpowiedź! Poza tym szczegółem działało to jak urok. Wielkie dzięki, @Peter!Poniższe polecenia tworzą alternatywną tabelę routingu
eth1
dla pakietów, które mają znak 1 (z wyjątkiem pakietów do hosta lokalnego).ip
Komenda jest od iproute2 suite (Ubuntu: iproute Install iproute http://bit.ly/software-small , iproute-doc Install iproute-doc http://bit.ly/software-small ).Druga połowa zadania polega na rozpoznawaniu pakietów, które muszą uzyskać znak 1; następnie użyj
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
tych pakietów, aby zostały przekierowane przez tabelę routingu 1. Myślę, że następujące czynności powinny to zrobić (zastąp 1.2.3.4 adresem interfejsu trasy innej niż domyślna):Nie jestem pewien, czy to wystarczy, być może potrzebna jest kolejna reguła dla przychodzących pakietów, aby powiedzieć modułowi conntrack, aby je śledził.
źródło
Miałem problemy z lokalnie generowanymi pakietami z rozwiązaniem sugerowanym przez Petera, stwierdziłem, że następujące poprawia to:
UWAGA: Możesz napotkać problemy ze składnią czwartej linii powyżej. W takich przypadkach składnia czwartego polecenia może być następująca:
źródło
Zakładam, że używasz Linuksa, a ponadto korzystasz z dystrybucji opartej na RedHat / CentOS. Inne Uniksy i dystrybucje będą wymagały podobnych kroków - ale szczegóły będą inne.
Zacznij od przetestowania (zauważ, że jest to bardzo podobne do odpowiedzi @ Peter. Zakładam, że:
Polecenia są następujące:
Zapora ogniowa nie jest w żaden sposób zaangażowana. Pakiety odpowiedzi zawsze były wysyłane z właściwego adresu IP, ale wcześniej były wysyłane za pomocą niewłaściwego interfejsu. Teraz te pakiety z poprawnego adresu IP będą wysyłane za pośrednictwem odpowiedniego interfejsu.
Zakładając, że powyższe zadziałało, możesz teraz wprowadzić trwałe zmiany reguły i trasy. Zależy to od używanej wersji Uniksa. Tak jak poprzednio, zakładam dystrybucję Linuksa opartą na RH / CentOS.
Sprawdź, czy zmiana sieci jest trwała:
Jeśli to nie zadziała, w późniejszych wersjach RH / CentOS musisz także skorzystać z jednej z dwóch opcji:
Osobiście wolę instalować pakiet reguł, ponieważ jest to prostsze i bardziej obsługiwane podejście:
Innym silnym zaleceniem jest włączenie filtrowania arp, ponieważ zapobiega to innym powiązanym problemom z podwójnymi konfiguracjami sieci. Za pomocą RH / CentOS dodaj następującą zawartość do pliku /etc/sysctl.conf:
źródło