Alat baris perintah untuk melakukan tunneling datagram UDP melalui TCP.
Ini sangat berguna untuk melakukan tunneling UDP melalui SSH
Alat ini dirancang terutama untuk kasus penggunaan di mana Anda memiliki dua aplikasi yang perlu berkomunikasi satu sama lain melalui UDP tanpa hubungan klien-server yang jelas. Artinya, salah satu aplikasi dapat menginisiasi sebuah paket, dan harus dikonfigurasi dengan alamat aplikasi lainnya saat start-up (yaitu, port tidak boleh acak).
Anda menjalankan udp-over-tcp
pada host kedua aplikasi. Setiap instance bertindak sebagai semacam replika lokal pada aplikasi yang berjalan di instance lainnya. Jika aplikasi pada satu host mendengarkan pada UDP port P, maka udp-over-tcp
akan mendengarkan pada UDP port P pada host lainnya , dan memastikan bahwa lalu lintas ke replika P menuju ke port P aplikasi sebenarnya. Yang terpenting, udp-over-tcp
akan melakukan ini untuk kedua port aplikasi secara bersamaan dan menyatukan port tersebut. Ini secara efektif akan "berpura-pura" bahwa setiap aplikasi berjalan secara lokal satu sama lain.
Konkritnya, jika aplikasi pada satu host mengirimkan datagram dari port P ke port (replika lokal) Q, datagram tersebut akan tiba di port aplikasi sebenarnya (jarak jauh) Q dengan port sumber P . Artinya aplikasi selalu melihat satu alamat (localhost) dan port (port aplikasi lain) yang sama, dan pasangan alamat-host yang sama juga dapat digunakan dalam konfigurasi rekan untuk aplikasi tersebut.
Semoga diagram berikut dapat membantu dalam memahami konfigurasi konfigurasi udp-over-tcp
:
Program ini telah dikompilasi sebelumnya untuk sejumlah platform (terima kasih cargo-dist!), dan harus dapat dieksekusi langsung tanpa ketergantungan.
Alternatifnya, Anda dapat menginstalnya melalui Cargo dengan
$ cargo install udp-over-tcp
Anda memiliki aplikasi UDP yang berjalan di host X pada port A. Anda ingin aplikasi tersebut berkomunikasi dengan aplikasi UDP yang berjalan di host Y di port B. Dan Anda juga ingin mengizinkan aplikasi di Y untuk berbicara dengan A di X. Bagus, lakukan sebagai berikut:
Di salah satu host (di sini X), pertama-tama buat terowongan TCP ke host lainnya:
ssh -L 7878:127.0.0.1:7878 $Y
Selanjutnya, jalankan udp-over-tcp di kedua host, satu dengan --tcp-listen
dan satu lagi dengan --tcp-connect
. --tcp-listen
harus digunakan pada host yang memungkinkan penerusan untuk terhubung (di sini Y). Anda dapat menjalankannya dalam urutan apa pun, namun praktik terbaiknya adalah mendengarkan terlebih dahulu:
Y $ udp-over-tcp --tcp-listen 7878 --udp-bind $A --udp-sendto $B
X $ udp-over-tcp --tcp-connect 7878 --udp-bind $B --udp-sendto $A
Di Y, ini akan mendengarkan pada port UDP $A, meneruskannya melalui TCP ke X, dan kemudian mengirimkannya ke port UDP $A di sana. Di X, ini akan mendengarkan pada port UDP $B, meneruskannya melalui TCP ke Y, dan kemudian mengirimkannya ke port UDP $B di sana.
Sekarang konfigurasikan aplikasi di X untuk mengirim ke 127.0.0.1:$B dan konfigurasikan aplikasi di Y untuk mengirim ke 127.0.0.1:$A. Dengan kata lain, port yang sama, alamat IP lokal.
Setiap argumen memerlukan nomor port (seperti di atas) atau addr:port untuk menentukan alamat. (alamat defaultnya adalah 0.0.0.0 untuk mendengarkan/mengikat dan 127.0.0.1 untuk menghubungkan/mengirim ke)
Terdapat alat lain yang dapat membantu mengatasi masalah ini, meskipun alat tersebut memiliki sifat yang berbeda dari alat ini.
Solusi yang mengandalkan nc
atau socat
tidak mempertahankan batasan datagram UDP, artinya dua sendmsg
UDP hanya dapat menyebabkan satu pesan (gabungan) masuk melalui recvfrom
. Banyak aplikasi UDP tidak tahan terhadap hal ini karena mereka mengandalkan UDP untuk menyediakan pembingkaian pesan.
udp-over-tcp mullvad hanya menyediakan penerusan satu arah. Seseorang dapat menjalankan contoh tambahan alat untuk meneruskan ke arah lain, meskipun hal ini berarti port sumber datagram masuk tidak akan cocok dengan port tujuan datagram keluar. Namun, ini mungkin baik untuk aplikasi gaya klien-server di mana port klien tidak penting.
Berlisensi di bawah salah satu dari
sesuai pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, setiap kontribusi yang dengan sengaja Anda kirimkan untuk dimasukkan ke dalam karya Anda, sebagaimana didefinisikan dalam lisensi Apache-2.0, akan memiliki lisensi ganda seperti di atas, tanpa syarat atau ketentuan tambahan apa pun.