Jak trasować określone adresy przez tunel?


14

Istnieją pewne strony internetowe / usługi, do których mogę uzyskać dostęp tylko z podsieci, w której znajduje się mój serwer (pomyśl o typowym scenariuszu intranetowym). Czy istnieje sposób, aby transparentnie kierować ruch do tych adresów przez tunel SSH?

Rozważ następującą konfigurację:

Mój laptop jest podłączony do sieci domowej. Nie ma bezpośredniego dostępu do usług na ips X i Y. Mam tunel SSH do serwera znajdującego się w podsieci, który faktycznie może uzyskać dostęp do tych usług.

Czy mogę w jakiś sposób automatycznie obudować cały ruch do podsieci X i Y, aby przejść przez ten tunel, bez konieczności uruchamiania całego rozwiązania VPN, które wysyłałoby cały mój ruch przez serwer? Innymi słowy: cały ruch, który trafia do dowolnej innej podsieci, powinien nadal wychodzić bezpośrednio z laptopa, bez przechodzenia przez serwer (za pomocą tunelu).

Odpowiedzi:


6

W tabeli routingu możesz określić interfejs, przez który ma być kierowany ruch:

sudo route add <host.com> -interface <ppp0>

Gdzie host.com to nazwa hosta lub adres IP, do którego chcesz uzyskać dostęp przez interfejs, a ppp0 to identyfikator linku do twojej sieci VPN pokazany z ifconfigpoleceniem.


2
Uwaga: przynajmniej na Ubuntu -interfacenie ma takiej opcji, routewięc powyższa sugestia podaje błąd użytkowania. Również w jaki sposób spowoduje to routing przez tunel ssh, jak prosi OP?
arielf

3

Najnowsze wersje OpenSSH obsługują urządzenia sieciowe tun / tap dla prawdziwej obsługi VPN. Zobacz https://help.ubuntu.com/community/SSH_VPN w celu uzyskania podstawowej dokumentacji (oczywiście przeznaczonej dla Ubuntu, ale podstawowa zasada obowiązuje gdzie indziej.)


Pamiętaj, że wymaga to uprawnień roota zarówno na laptopie, jak i na hoście bramy.
Riccardo Murri,

1

Zastrzeżenie: Właściwie to nie testowałem tego, co zamierzam opisać, i może to być całkowicie błędne, ale twoje pytanie jest tak intrygujące, że nie mogę oprzeć się pokusie przygotowania odpowiedzi. :-) Także konfiguracja tutaj zależy od niektórych iptablesfunkcji, które mogą istnieć tylko w systemie Linux.

Zakładając, że chcesz połączyć się z laptopa do określonego portu P1 na serwerze X1, do portu P2 na serwerze X2 itp. - Zamierzam opisać sposób kierowania ruchu TCP do tych określonych serwerów + pary portów przez tunel SSH. Uwaga: adresy IP X1, X2 itd. Są adresami IP serwera widzianymi z hosta bramy (do którego logujesz się SSH).

  1. Wybierz niektóre nieużywane porty lokalne L1 (np. 10000), L2 (np. 10001) itp. Porty L1, L2, ... muszą być wszystkie odrębne, a ich liczba powinna być równa liczbie odrębnych (Xn, Pn) serwerów + pary portów.

  2. Służy iptablesdo przekierowywania pakietów kierowanych do Xn: Pn na localhost: Ln

    iptables -t nat -A WYJŚCIE -p tcp -d X1 --port P1 -j DNAT - do docelowego hosta lokalnego: L1 iptables -t nat -A WYJŚCIE -p tcp -d X2 --port P2 -j DNAT - do lokalnego hosta lokalnego: L2

  3. Teraz SSH do bramy, używając -Lopcji tunelowania ruchu z localhost: Ln do (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

Przykład:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Ostrzeżenia:

  • działa tylko dla TCP, jeśli w ogóle działa ...

  • jeśli chcesz uzyskać dostęp do więcej niż jednego serwera, prawdopodobnie skonfigurowanie VPN jest mniej pracochłonne

  • nadal może być łatwiej użyć -Dopcji SSH do symulacji proxy SOCKS i tunelowania całego ruchu przez to.


To naprawdę działa! (Niestety nie pasuje to do mojej konkretnej sytuacji, w której chcę kierować ruchem pochodzącym z maszyny wirtualnej, a nie z hosta lokalnego.)
pvgoran

1

podsieci X i Y, aby przejść przez ten tunel, bez konieczności uruchamiania całego rozwiązania VPN, które wysyłałoby cały mój ruch przez serwer?

To, czego chcesz, to definicja VPN.

VPN nie powinien

wysyłać cały [Twój] ruch przez serwer?

Jeśli tak, to nie jest poprawnie skonfigurowany.

Zakłada się, że każda maszyna, do której próbujesz uzyskać dostęp przez tunel lub VPN, z definicji nie jest dostępna przez Internet. W związku z tym w sieci VPN należy kierować tylko potrzebny adres, który nie może być routowany przez Internet.

Jeśli masz bardziej skomplikowaną sytuację, na przykład tylko maszynę X i Y i nic więcej. Twój personel IT może umieścić je w podsieci dla Ciebie. Następnie na komputerze klienckim kieruj tylko tę podsieć w dół sieci VPN.


0

Czy mogę w jakiś sposób automatycznie obudować cały ruch do podsieci X i Y, aby przejść przez ten tunel, bez konieczności uruchamiania całego rozwiązania VPN, które wysyłałoby cały mój ruch przez serwer?

Na pierwszy rzut oka jest to trochę dziwne, ponieważ to właśnie zrobi dla Ciebie VPN. SSH jest zwykle sprawą typu punkt-punkt, ponieważ chodzi o to, aby połączyć jeden port na komputerze lokalnym z portem komputera zdalnego w innym miejscu; tak naprawdę nie został zaprojektowany dla przewidywanego rodzaju ruchu.

Innymi słowy: cały ruch, który trafia do dowolnej innej podsieci, powinien nadal wychodzić bezpośrednio z laptopa, bez przechodzenia przez serwer (za pomocą tunelu).

Ponownie VPN to załatwi.

Jeśli obawiasz się „ciężkiego” rozwiązania w celu uzyskania bezpiecznego ruchu VPN (tj. Nie chcesz z nim małpować, ponieważ byłoby to zbyt skomplikowane), powinieneś naprawdę spojrzeć na OpenVPN , który zrobi dokładnie to, co opisujesz. Obejmuje on nie tylko cały ruch, ale można to zrobić w taki sposób, że tylko ruch przeznaczony dla tych podsieci przejedzie przez potok VPN. Ostrzegam cię, że nadal będziesz musiał edytować plik tekstowy na lokalnych i zdalnych maszynach, ale uruchomienie go jest dość łatwe.

Dla twoich celów, ponieważ nie chcesz, aby impreza na środku (serwer) widziała twój ruch, skonfiguruj VPN, aby łączył się bezpośrednio z twojego komputera do zdalnego komputera. Wszelkie przekierowane pakiety byłyby szyfrowane przed opuszczeniem laptopa, dzięki czemu miałbyś 100% zasięgu od końca do końca.


0

Jak powiedzieli inni, jeśli musisz „obudować cały ruch do podsieci”, prawdopodobnie prawdopodobnie chcesz użyć VPN.

Aby uzyskać dostęp do kilku usług, możesz skorzystać z funkcji przekierowania portów lokalnych SSH, która jest naprawdę prosta. Na przykład, jeśli wpiszesz (z laptopa):

ssh -N -L 3333:localhost:2222 jump_box

następnie połączenie z localhost:2222, będzie jak połączenie localhost:2222z jump_box. Możesz użyć wielu opcji -L jednocześnie i możesz połączyć się z usługami na innych hostach, jeśli jump_boxpozwala na to ssd_config on.

Możesz używać autosshz systemdlub podobnymi, aby utrzymać tunele w działaniu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.