Proste przekierowanie portów

21

Mam trochę kłopotów, gdy próbuję skonfigurować odwrotne proxy z drugim serwerem. Moim pomysłem było przekonanie zapory do przekazywania https do zwrotnego serwera proxy i portu 29418 (gerrit ssh) na drugi serwer. Teraz mój współpracownik IT mówi: NIE MOŻNA! Oba porty idą na serwer 1 lub oba porty idą na serwer 2.

Ok, aby obejść ten problem, próbowałem skonfigurować przekierowanie portów na zwrotnym serwerze proxy portu 29418 -> server2: 29418

Detale:

  • Serwer1 IP: 10.0.0.132 i 192.168.10.2 na Ubuntu 12.04.2 LTS
  • Server2 IP: 10.0.0.133 i 192.168.10.3 na Ubuntu 12.04.2 LTS

Teraz zarówno https, jak i port 29418 przechodzą z zapory do wersji 10.0.0.132, IT mówi, że to jedyny sposób. :(

Więc powiedz mi, jak przekazywać dalej od 10.0.0.132:29418 -> 192.168.10.3:29418 lub 10.0.0.133:29418

Kiedy pracuję nad 10.0.0.132, mogę połączyć się zarówno z 10.0.0.133:29418, jak i 192.168.10.3:29418, aby porty były otwarte.

-- Aktualizacja --

Moje iptables -t nat -L wygląda następująco:

root @ dev: / root # iptables -t nat -L
PREROUTING łańcucha (AKCEPTACJA zasad)
docelowy źródło docelowy prot opt ​​opt
DNAT tcp - gdziekolwiek dev.example.com tcp dpt: 29418 do: 10.0.0.133

Łańcuch WEJŚCIE (AKCEPTACJA zasad)
docelowy źródło docelowy prot opt ​​opt

WYJŚCIE łańcucha (AKCEPTACJA zasad)
docelowy źródło docelowy prot opt ​​opt

POSTROUTOWANIE łańcucha (AKCEPTACJA zasad)
docelowy źródło docelowy prot opt ​​opt
root @ dev: / root # cat / proc / sys / net / ipv4 / ip_forward
1
niezupełnie
źródło

Odpowiedzi:

34

W przypadku, gdy ktoś inny szuka sposobu, który faktycznie działa. Chociaż @HorsePunchKid ma rację w swojej sugestii, znalazłem ten przewodnik, który wypełnia brakujące kroki:

http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

Zasadniczo:

Włącz przekazywanie adresów IP:

sysctl net.ipv4.ip_forward=1

Dodaj regułę przekazywania (użyj nnnn: port):

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.132 --dport 29418 -j DNAT --to-destination 10.0.0.133:29418

Poproś IPtables o maskaradę:

iptables -t nat -A POSTROUTING -j MASQUERADE

I to wszystko! W każdym razie zadziałało dla mnie :)

Brendon Muir
źródło
1
To najlepsza odpowiedź na ten temat.
Victor Piousbox,
Utracono połączenie z mojego kontenera Docker po użyciu tego rozwiązania. Musiałem usunąć regułę. Reguła działała, ale straciła cały pozostały ruch. Nie polecam tego.
Dyin,
iptables -t nat -A POSTROUTING -j MASQUERADEOH WOW ... to wszystko, dziękuję! Spędziłem godziny na wyszukiwaniu w sieci i analizowaniu. To takie proste i działa.
kombi
Działa idealnie, a teraz, jak uczynić te zasady trwałymi?
vmalep
Zauważyłem problem polegający na tym, że po aktywowaniu przekierowania portów router nie ma już dostępu do serwerów apt ... Masz jakieś wskazówki?
vmalep
7

Jeśli masz iptables zainstalowane na 10.0.0.132, myślę, że będzie to dość proste:

iptables -t nat -A PREROUTING -j DNAT -d 10.0.0.132 -p tcp --dport 29418 --to 10.0.0.133

Oznacza to wysyłanie ruchu przychodzącego do 10.0.0.132 na porcie 29418 zamiast do 10.0.0.133 na tym samym porcie, przed jakimkolwiek innym routingiem, który 10.0.0.132 może próbować wykonać. Jeśli uruchomisz to polecenie i masz z nim problemy, zamień flagę -A na -D, aby je usunąć.

Jeśli chcesz, aby ta reguła była uruchamiana automatycznie podczas uruchamiania 10.0.0.132, rozważ dodanie powyższej komendy jako reguły „post-up” w / etc / network / interfaces.

HorsePunchKid
źródło
Właśnie to zrobiłem, ale to nie zadziałało. Odkomentowałem net.ipv4.ip_forward = 1 w /etc/sysctl.conf, ale wciąż
pojawiają
7

Jeśli ktoś szuka tymczasowej metody, wypróbuj poniższe rozwiązanie.

    ssh -L 192.168.0.10:8080:10.0.0.10:80 [email protected]

Powyższe polecenie przekierowuje wszystkie połączenia do portu 8080 na komputerze podstawowym do portu 80 maszyny wirtualnej. Możesz przetestować działanie, wchodząc na stronę http://192.168.0.10:8080 , a wyświetli się strona internetowa na maszynie gościa.

Dotyczy to wszystkich portów :)

pospolity
źródło
0

W końcu musiałem zainstalować pfSense jako router na moim serwerze ESXi, aby kierować ruch do różnych maszyn wirtualnych, ponieważ nie mogłem go uruchomić w Ubuntu.

niezupełnie
źródło