Odpowiedzi:
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.
Przekażemy lokalny ruch UDP / 53 do TCP, następnie ruch TCP z mechanizmem przekierowania portów SSH na inny komputer, a następnie TCP do UDP / 53 na drugim końcu.
Zazwyczaj można to zrobić za pomocą openvpn.
Ale tutaj zrobimy to za pomocą prostszych narzędzi, tylko openssh i netcat.
Na końcu tej strony znajduje się kolejny komentarz z odniesieniem do „ socat
”,
Ten sam dostęp UDP / DNS jest uzyskiwany za pomocą,
Po stronie serwera: po
socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
stronie klienta:socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353
Więcej przykładów można znaleźć w socat .
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
lub Tunnel
w ssh
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że Tunnel
na stronie podręcznika ssh_config(5)
.) Należy pamiętać, że wymaga to OpenSSH (i prawdopodobnie uprawnień roota) na obu końcach.
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
Rozumiem Tunnel 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:
#>./ssfc -U 53:192.168.1.1:53 server.foo.com
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):
#>./ssfs
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/
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:
client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161
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:
client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000
To konfiguruje socat na kliencie. Że należy to zrobić.