Mam bramę Linux wykonującą NAT dla mojej sieci domowej. Mam inną sieć, do której chciałbym transparentnie przekierowywać pakiety, ale tylko do / z określonych adresów IP / portów (tj. Nie VPN). Oto kilka przykładów adresów IP i portów do pracy:
Source Router Remote Gateway Remote Target
192.168.1.10 -> 192.168.1.1 -> 1.2.3.4 -> 192.168.50.50:5000
Chciałbym, aby maszyna źródłowa mogła komunikować się z określonymi portami w zdalnym celu, tak jakby była bezpośrednio routowalna z routera. Na routerze eth0 jest siecią prywatną, a eth1 jest połączony z Internetem. Remote Gateway to kolejna maszyna Linuksa, do której mogę ssh i może kierować bezpośrednio do Remote Target.
Moja próba prostego rozwiązania polega na skonfigurowaniu przekierowania portów ssh na routerze, takich jak:
ssh -L 5000:192.168.50.50:5000 1.2.3.4
Działa to dobrze dla routera, który może teraz łączyć się lokalnie z portem 5000. Tak więc „telnet localhost 5000” zostanie podłączony do 192.168.50.50:5000 zgodnie z oczekiwaniami.
Teraz chcę przekierować ruch ze źródła i ścieżkę przez ustanowiony tunel ssh. Próbowałem do tego reguły NAT:
iptables -t nat -D PREROUTING -i eth0 -p tcp -s 192.168.1.10 --dport 5000 -d 1.2.3.4 -j DNAT --to-destination 127.0.0.1:5000
a ponieważ router jest już moją bramą NAT, ma już wymaganą regułę przekierowania:
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Większość pytań i odpowiedzi na tej stronie lub w innym miejscu wydaje się dotyczyć portów przesyłania dalej lub NAT-spinki do włosów, z których oba działają dobrze gdzie indziej, ale żadne z nich nie dotyczy tej sytuacji. Z pewnością mógłbym przesłać DMZ porty Remote Target przez Remote Gateway, ale nie chcę, aby porty były dostępne w Internecie, chcę, aby były dostępne tylko przez bezpieczny tunel SSH.
Najlepsza odpowiedź, jaką mogę znaleźć, dotyczy odrzucenia pakietu marsjańskiego w jądrze Linux:
iptables, jak przekierować port z pętli zwrotnej?
Włączyłem rejestrowanie Marsjan i potwierdziłem, że jądro odrzuca te pakiety jako Marsjanie. Tyle że nie są: wiem dokładnie, po co są te pakiety, skąd pochodzą i dokąd idą (mój tunel ssh).
Przedstawione tam rozwiązanie „ronda” dotyczy tego pierwotnego pytania, ale nie dotyczy mojej sprawy.
Jednak pisząc / badając to pytanie, obejrzałem swój problem, używając powiązania źródłowego adresu IP SSH w następujący sposób:
ssh -L 192.168.1.1:5000:192.168.50.50:5000 1.2.3.4
iptables -t nat -D PREROUTING -i eth0 -p tcp -s 192.168.1.10 --dport 5000 -d 1.2.3.4 -j DNAT --to-destination 192.168.1.1:5000
Ponieważ nie używam sprzężenia zwrotnego, omija to odrzucenie Marsa.
Nadal zamieszczam pytanie tutaj z dwóch powodów:
- W nadziei, że ktoś, kto próbuje zrobić coś podobnego w przyszłości, znajdzie to w swoich wyszukiwaniach, a to obejście może im pomóc.
- Nadal wolę pomysł, aby mój port ssh przekazywał połączenie tylko do pętli zwrotnej i był w stanie kierować do nich przez iptables. Ponieważ wiem dokładnie, czym są te pakiety i dokąd zmierzają, czy nie powinno być sposobu, aby je oflagować jako takie, aby filtrowanie marsjańskie systemu Linux ich nie odrzucało? Całe moje wyszukiwanie na ten temat prowadzi do rp_filter, co wcale nie pomogło w moich testach. I nawet jeśli zadziałało, nie jest ono specyficzne dla pakietów, na które staram się zezwolić.
Jestem zainteresowany udziałem w moim pytaniu i obejściu dla ogólnego wyszukiwania, aby zaoszczędzić komuś godziny poszukiwań, które wymyśliłem tylko w celu znalezienia ślepych zaułków, a także mam nadzieję, że ktoś odpowie na część mojego pytania zwrotnego / marsjańskiego, która wciąż pozostaje otwarta Dla mnie.