W tym małym przewodniku dowiesz się, jak wysyłać ruch UDP za pośrednictwem protokołu SSH przy użyciu standardowych narzędzi (ssh, nc, mkfifo) w większości systemów operacyjnych typu UNIX.
Wykonywanie tunelowania UDP przez połączenie SSH
Krok po kroku Otwórz port przekazywania TCP z połączeniem SSH
Na komputerze lokalnym (lokalnym) połącz się z odległym komputerem (serwerem) przez SSH, z dodatkową opcją -L, aby SSH z przekierowaniem portów TCP:
local# ssh -L 6667:localhost:6667 server.foo.com
Umożliwi to przekazywanie połączeń TCP na porcie 6667 komputera lokalnego do portu 6667 na server.foo.com za pośrednictwem bezpiecznego kanału. Skonfiguruj przekazywanie TCP do UDP na serwerze
Na serwerze otwieramy detektor na porcie TCP 6667, który przesyła dane do portu UDP 53 określonego adresu IP. Jeśli chcesz wykonywać przekazywanie DNS tak jak ja, możesz wziąć adres IP pierwszego serwera nazw, który znajdziesz w /etc/resolv.conf. Ale najpierw musimy stworzyć fifo. FIFO jest niezbędny do dwukierunkowej komunikacji między dwoma kanałami. Prosty potok powłoki komunikowałby tylko standardowe wyjście lewego procesu do standardowego wejścia prawego procesu.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Pozwoli to na przekierowanie ruchu TCP na porcie 6667 serwera do ruchu UDP na porcie 53.1.1.1.1.1.1.1 i odpowiedzi do powrotu. Skonfiguruj przekazywanie UDP do TCP na swoim komputerze
Teraz musimy zrobić coś przeciwnego do tego, co zostało zrobione na górnym komputerze lokalnym. Potrzebujesz dostępu uprzywilejowanego, aby powiązać port UDP 53.
local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Umożliwi to przekazywanie ruchu UDP na porcie 53 komputera lokalnego do ruchu TCP na porcie 6667 komputera lokalnego. Ciesz się lokalnym serwerem DNS :)
Jak się zapewne domyślacie, zapytanie DNS zostanie wykonane na komputerze lokalnym, np. Na lokalnym porcie UDP 53, zostanie przesłane do lokalnego portu TCP 6667, następnie do portu TCP 6667 serwera, a następnie do serwera DNS serwera , Port UDP 53 z 192.168.1.1. Aby korzystać z usług DNS na komputerze lokalnym, umieść następujący wiersz jako serwer nazw w pliku /etc/resolv.conf:
nameserver 127.0.0.1
Ten przykład (myślę, że odpowiedź Johna wskazuje to samo w innym miejscu), opisuje, jak uzyskać dostęp do usług UDP / DNS innego komputera przez połączenie TCP / SSH.
Na końcu tej strony znajduje się kolejny komentarz z odniesieniem do „
socat
”,Ten sam dostęp UDP / DNS jest uzyskiwany za pomocą,
Więcej przykładów można znaleźć w socat .
źródło
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (przynajmniej OpenSSH) obsługuje proste VPN. Korzystając z opcji
-w
lubTunnel
wssh
kliencie, możesz utworzyćtun
urządzenie na obu końcach, które może służyć do przekazywania dowolnego rodzaju ruchu IP. (Zobacz takżeTunnel
na stronie podręcznikassh_config(5)
.) Należy pamiętać, że wymaga to OpenSSH (i prawdopodobnie uprawnień roota) na obu końcach.źródło
ip tuntap add
.tun
urządzenie w następujący sposób:sudo ip tuntap add mode tun
ale kiedy kiedykolwiek korzystam z takiej-w
opcji:ssh $Server -w $port
RozumiemTunnel device open failed. Could not request tunnel forwarding.
Co robię źle?Lub możesz po prostu użyć ssf (który został zaprojektowany do obsługi tego przypadku użycia), za pomocą prostego polecenia:
Strona klienta:
To polecenie przekierowuje lokalny port 53 (dns) na port 192.168.1.1 przez bezpieczny tunel między localhost a server.foo.com.
Będziesz potrzebował serwera ssf (zamiast - lub obok - twojego serwera ssh):
Nawiasem mówiąc, zarówno klient, jak i serwer ssf działają w systemach Windows / Linux / Mac. Jest to aplikacja dla użytkowników, więc nie potrzebujesz tun / tap ani VPN.
Aby przekierować port 53, potrzebujesz uprawnień administracyjnych - niezależnie od używanego narzędzia.
Aby uzyskać więcej informacji, szczegółów, przypadku użycia lub pobrać: https://securesocketfunneling.github.io/ssf/
źródło
Nie mogłem
nc
pracować dla SNMP, ponieważ klienci SNMP wybierają nowy źródłowy port UDP, a kilka może być jednocześnie aktywnych.Zamiast tego napisałem post opisujący, jak to zrobić
socat
w tym poście na blogu , używając SNMP jako przykładu. Zasadniczo za pomocą dwóch terminali, zaczynając od przeglądu:Terminal pierwszy:
To powoduje przekierowanie SSH portu TCP 10000 i uruchamia socat na serwerze. Zwróć uwagę, jak adres IP przełącznika jest wymieniony w wierszu polecenia socat jako „przełącznik”.
Terminal drugi:
To konfiguruje socat na kliencie. Że należy to zrobić.
źródło
VPN jest lepszym rozwiązaniem, jeśli masz dostęp do portu UDP.
Jeśli masz dostęp tylko do portu TCP SSH, to tunel SSH jest tak dobry jak VPN, przynajmniej do pingowania i śledzenia pakietów.
źródło