Panduan kecil ini memberi tahu Anda cara mengirim lalu lintas UDP melalui SSH menggunakan alat yang standar (ssh, nc, mkfifo) dengan sebagian besar sistem operasi mirip UNIX.
Melakukan tunneling UDP melalui koneksi SSH
Langkah demi langkah Buka port forward TCP dengan koneksi SSH Anda
Pada mesin lokal Anda (lokal), sambungkan ke mesin yang jauh (server) oleh SSH, dengan opsi -L tambahan sehingga SSH dengan TCP port-forward:
local# ssh -L 6667:localhost:6667 server.foo.com
Ini akan memungkinkan koneksi TCP pada nomor port 6667 dari mesin lokal Anda untuk diteruskan ke nomor port 6667 di server.foo.com melalui saluran aman. Atur TCP ke UDP maju di server
Di server, kami membuka pendengar pada port TCP 6667 yang akan meneruskan data ke port UDP 53 dari IP yang ditentukan. Jika Anda ingin melakukan penerusan DNS seperti saya, Anda dapat mengambil IP server nama pertama yang akan Anda temukan di /etc/resolv.conf. Tapi pertama-tama, kita perlu membuat fifo. Fifo diperlukan untuk memiliki komunikasi dua arah antara dua saluran. Pipa shell sederhana hanya akan mengkomunikasikan input standar proses ke 'kiri untuk input kanan proses'.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Ini akan memungkinkan lalu lintas TCP pada port server 6667 untuk diteruskan ke lalu lintas UDP pada port 192.168.1.1 di port 53, dan tanggapan untuk kembali. Siapkan UDP ke TCP ke depan pada mesin Anda
Sekarang, kita perlu melakukan kebalikan dari apa yang dilakukan di atas pada mesin lokal. Anda memerlukan akses khusus untuk mengikat port UDP 53.
local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Ini akan memungkinkan lalu lintas UDP pada port mesin lokal 53 untuk diteruskan ke lalu lintas TCP pada port mesin lokal 6667. Nikmati server DNS lokal Anda :)
Seperti yang mungkin sudah Anda duga sekarang, ketika permintaan DNS akan dilakukan pada mesin lokal, misalnya pada port UDP lokal 53, itu akan diteruskan ke port TCP lokal 6667, kemudian ke port TCP server 6667, kemudian ke server DNS server , Port UDP 53 dari 192.168.1.1. Untuk menikmati layanan DNS di mesin lokal Anda, masukkan baris berikut sebagai server nama pertama di /etc/resolv.conf Anda:
nameserver 127.0.0.1
Contoh ini (saya pikir jawaban John menunjukkan hal yang sama di tempat yang berbeda), menjelaskan cara mengakses layanan UDP / DNS mesin lain melalui koneksi TCP / SSH.
Di akhir halaman itu, ada komentar lain dengan referensi ke '
socat
',Akses UDP / DNS yang sama dibuat dengan,
Lihat contoh socat untuk informasi lebih lanjut.
sumber
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (setidaknya OpenSSH) memiliki dukungan untuk VPN sederhana. Menggunakan opsi
-w
atauTunnel
dissh
klien, Anda dapat membuattun
perangkat di kedua ujungnya, yang dapat digunakan untuk meneruskan segala jenis lalu lintas IP. (Lihat jugaTunnel
di halaman manualssh_config(5)
.) Perhatikan bahwa ini membutuhkan OpenSSH (dan mungkin root privilege) di kedua ujungnya.sumber
ip tuntap add
.tun
perangkat sebagai berikut:sudo ip tuntap add mode tun
tetapi ketika pernah menggunakan-w
opsi seperti ini:ssh $Server -w $port
Saya mengertiTunnel device open failed. Could not request tunnel forwarding.
Apa yang saya lakukan salah?Atau Anda bisa menggunakan ssf (yang dirancang untuk menangani use case ini), dengan perintah sederhana:
Sisi klien:
Perintah ini mengalihkan port lokal 53 (dns) ke port 192.168.1.1 port 53, melalui terowongan aman antara localhost dan server.foo.com.
Anda memerlukan server ssf (bukan - atau di sebelah - server ssh Anda):
By the way, baik sisi klien dan server ssf bekerja pada Windows / Linux / Mac. Ini adalah aplikasi userland, jadi Anda tidak perlu tun / ketuk atau VPN.
Untuk mengarahkan ulang port 53, Anda akan memerlukan hak administratif - terlepas dari alat yang Anda gunakan.
Untuk info lebih lanjut, detail, gunakan case, atau unduh: https://securesocketfunneling.github.io/ssf/
sumber
Saya tidak dapat mulai
nc
bekerja untuk SNMP, karena klien SNMP terus memilih port UDP sumber baru, dan beberapa dapat aktif sekaligus.Sebagai gantinya, saya telah menulis sebuah posting yang menjelaskan bagaimana melakukannya dengan
socat
dalam posting blog ini , menggunakan SNMP sebagai contoh. Intinya, menggunakan dua terminal, dimulai dengan tinjauan umum:Terminal satu:
Ini menciptakan penerusan SSH port TCP 10000 dan menjalankan socat di server. Perhatikan bagaimana alamat IP switch disebutkan dalam baris perintah socat sebagai "switch".
Terminal dua:
Itu mengatur socat pada klien. Itu harus dilakukan.
sumber
VPN adalah solusi yang lebih baik jika Anda memiliki akses ke port UDP.
Jika Anda hanya memiliki akses ke port TCP SSH, maka terowongan SSH sama baiknya dengan VPN, setidaknya untuk ping dan backtracking paket.
sumber