Router UDP jelek untuk tahun 2020 dan seterusnya.
Jadi saya bermain dengan Roon dan saya memiliki jaringan rumah yang rumit yang membuat Roon berputar-putar. Saya mulai men-debug berbagai hal dan ternyata Roon mengirimkan pesan siaran ke UDP/9003. Firewall/router saya tentu saja tidak akan meneruskan pesan-pesan ini, karena itu adalah hal yang benar untuk dilakukan.
Sayangnya, saya sangat ingin pesan siaran ini diteruskan ke VLAN/subnet lain di jaringan lokal saya. Saya mulai menggunakan udp-proxy-relay-redux yang awalnya berfungsi dengan baik.
Namun saya juga sangat menyukai pesan-pesan ini yang diteruskan melalui koneksi OpenVPN saya yang memanfaatkan driver tun
yang merupakan antarmuka point-to-point dan secara eksplisit tidak mendukung siaran. Ini tidak berfungsi dengan baik dengan udp-proxy-relay-redux karena Roon berperilaku buruk dan masih mencoba mengirim "siaran" ke alamat .255 yang kemudian dijatuhkan karena server VPN saya tidak memiliki alamat xxx255. Pada dasarnya, pada antarmuka point-to-point, "siaran" ini diperlakukan sebagai paket yang ditujukan ke host lain dan diabaikan.
Daripada menggunakan soket UDP biasa untuk mendengarkan pesan siaran, udp-proxy-2020
menggunakan libpcap untuk "mengendus" pesan siaran UDP. Ini berarti ia bisa lebih fleksibel mengenai paket apa yang "dilihat" sehingga ia kemudian dapat mengirimkannya melalui libpcap/injeksi paket ke semua antarmuka lain yang dikonfigurasi. Jika ini membuat Anda menjadi "baru", selamat datang di tahun 2020.
Saya menulis ini di GoLang jadi setidaknya kompilasi silang ke router/firewall Linux/FreeBSD acak Anda cukup mudah. Tidak ada kompilasi silang yang jelek dari C atau mencoba menginstal Python/Ruby dan banyak perpustakaan.
Juga: HAHAHAHAHAHAHAHA! Semua itu tidak benar! Perlu menggunakan libpcap berarti saya harus melakukan kompilasi silang menggunakan CGO karena gopacket/pcapgo hanya mendukung Linux untuk membaca & menulis ke antarmuka jaringan (ethernet?).
Hampir semua sistem mirip Unix didukung karena daftar ketergantungannya hanya libpcap
dan golang
. Saya mengembangkan di MacOS dan secara khusus menargetkan pfSense/FreeBSD dan Ubiquiti USG, EdgeRouter dan DreamMachine/Pro karena keduanya cukup umum di kalangan komunitas pengguna Roon.
Jika Anda menggunakan distro berbasis Linux RedHat atau Debian, cara termudah untuk menginstal adalah mengambil file .rpm
atau .deb
yang sesuai dan menginstalnya dengan manajer paket Anda. Kemudian edit /etc/udp-proxy-2020.conf
dan mulai melalui: systemctl start udp-proxy-2020
.
Ada juga image buruh pelabuhan yang tersedia untuk Linux di AMD64 dan ARM64 (seperti Ubiquiti UDM).
Perhatikan bahwa untuk penerapan Docker, Anda harus menggunakan jaringan host.
Saya merilis binari untuk Linux, FreeBSD (pfSense) dan MacOS untuk perangkat keras Intel, ARM dan MIPS.
Sekarang ada instruksi dan skrip startup yang tersedia di direktori startup-scripts. Jika Anda mengetahui cara menambahkan dukungan untuk platform lain, kirimkan saya permintaan penarikan!
Jalankan udp-proxy-2020 --help
untuk daftar opsi baris perintah saat ini.
Selain itu, harap dicatat bahwa pada banyak sistem operasi Anda harus menjalankannya sebagai pengguna root
. Sistem Linux secara opsional dapat memberikan kemampuan CAP_NET_RAW
.
Saat ini hanya ada beberapa tanda yang mungkin perlu Anda khawatirkan:
--interface
-- Tentukan dua atau lebih antarmuka jaringan untuk didengarkan.--port
-- Tentukan satu atau lebih port UDP yang akan dipantau.--level
-- Tentukan level log: [trace|debug|warn|info|error]Opsi lanjutan:
--fixed-ip
-- Hardcode dan @ untuk selalu mengirimkan lalu lintas. Berguna untuk hal-hal seperti OpenVPN dalam mode situs-ke-situs.--timeout
-- Jumlah ms untuk nilai batas waktu pcap. (standarnya adalah 250 ms)--cache-ttl
-- Jumlah menit untuk menyimpan IP dalam cache. (standarnya adalah 180 menit / 3 jam) Nilai ini mungkin perlu ditingkatkan jika Anda mengalami masalah dalam meneruskan lalu lintas ke klien di terowongan OpenVPN jika Anda tidak dapat menggunakan --fixed-ip
karena klien tidak memiliki ip tetap.--no-listen
-- Jangan dengarkan pada port UDP yang ditentukan untuk menghindari konflik--deliver-local
-- Mengirimkan paket secara lokal pada antarmuka loopback Tentu saja ada tanda lain, jalankan ./udp-proxy-2020 --help
untuk daftar lengkap.
Contoh:
udp-proxy-2020 --port 9003 --interface eth0,eth0.100,eth1,tun0 --cache-ttl 300
Akan meneruskan paket udp/9003 pada empat antarmuka: eth0, eth1, VLAN100 pada eth0 dan tun0. IP klien di tun0 akan diingat selama 5 menit setelah dipelajari.
Catatan: "belajar" mengharuskan klien mengirim pesan udp/9003 terlebih dahulu! Jika aplikasi Anda memerlukan pesan untuk dikirim ke klien terlebih dahulu, maka Anda perlu menentukan --fixed-ip=1.2.3.4@tun0
dengan 1.2.3.4
adalah alamat IP klien di tun0.
Saya telah menguji konfigurasi VPN "pejuang jalanan" dengan klien Roon yang berjalan di laptop saya dan menghubungkan kembali ke firewall rumah saya melalui OpenVPN dan Wireguard. Saya pribadi menggunakan Wireguard daripada OpenVPN karena lebih aman dan kinerjanya lebih baik.
Saya juga telah menguji VPN Situs-ke-Situs menggunakan Wireguard + pfSense. Saya mengikuti petunjuk Wireguard VPN situs-ke-situs pfSense dan menginstal udp-proxy-2020
di kedua firewall. Anda harus mengonfigurasi opsi --interface
untuk menyertakan antarmuka jaringan LAN dan Wireguard.
Jika Anda membangun untuk platform yang sama dengan yang ingin Anda jalankan udp-proxy-2020
maka Anda hanya perlu memastikan Anda memiliki libpcap
dan header yang diperlukan (Anda mungkin memerlukan paket -dev
untuk itu) dan menjalankan make
atau gmake
sesuai kebutuhan ( kita membutuhkan GNU Make, bukan BSD Make).
Jika Anda perlu membangun lintas platform, salah satu target berikut dapat membantu Anda:
make linux-amd64
melalui Dockermake linux-mips64
(Linux/MIPS64 big-endian untuk Ubiquiti USG/EdgeRouter) melalui Dockermake linux-arm
melalui Docker:make freebsd
(pfSense 2.6) melalui Vagrant & VirtualBoxmake docker
Anda bisa mendapatkan daftar lengkap target make dan informasi dasar tentangnya dengan menjalankan: make help
.
Dimulai dengan v0.0.11, udp-proxy-2020
sekarang secara default membuat soket mendengarkan UDP pada --port
yang ditentukan. Hal ini mencegah OS yang mendasarinya mengeluarkan pesan ICMP Port Unreachable yang dapat merusak klien tertentu (terutama klien Roon iOS).
Satu-satunya saat Anda perlu menggunakan tanda --no-listen
adalah jika ada perangkat lunak lain yang berjalan di host yang sama dengan udp-proxy-2020
.
Pada v0.1.0, ya. Anda perlu menentukan opsi --deliver-local
dan --no-listen
agar dapat mengirimkan paket melalui antarmuka loopback.
Tanda ini ditujukan untuk men-debug masalah dengan udp-proxy-2020
. Anda harus menggunakan tanda ini ketika saya mengarahkan Anda untuk melakukannya sebagai bagian dari tiket yang telah Anda buka untuk udp-proxy-2020
.
Dari halaman rilis di Github.
Tidak, ini bukan proxy. Ini lebih seperti router. Anda tidak perlu melakukan perubahan apa pun selain menjalankannya di router/firewall rumah Anda.
Sejujurnya, saya tidak terlalu memikirkan nama itu dan ini adalah hal pertama yang terlintas di benak saya. Selain itu, memberi nama juga sulit.
tun
, seperti yang digunakan oleh OpenVPNraw
, seperti yang digunakan oleh Wireguardvti
untuk IPSec situs-ke-situsPerhatikan bahwa terowongan L2TP VPN di Linux tidak kompatibel dengan udp-proxy-2020 karena kernel Linux menampilkan antarmuka tersebut sebagai Linux SLL yang tidak memberikan dekode paket yang akurat.
Jadi saya belum melakukan ini sendiri, tapi Bart Verhoeven di forum Komunitas Roon menulis ini dengan sangat rinci bagaimana caranya.
udp-proxy-2020 dibuat untuk berbagai OS dan platform perangkat keras:
darwin-amd64
linux-amd64
linux-arm64
(RasPi 2 V1.2 dan yang lebih baru, Ubiquiti UniFi Dream Machine)linux-armv7
(RasPi 2 V1.1 dan yang lebih lama)linux-armv6
linux-armv5
linux-mips64
(Ubiquiti USG/EdgeRouter)freebsd-amd64
(berfungsi dengan pfSense di x86)freebsd-arm64
(Netgate SG-1100 & SG-2100)freebsd-armv7
(Netgate SG-3100)Sejujurnya, kirimkan saja saya email yang mengucapkan terima kasih atau "membintangi" proyek ini di GitHub sudah cukup, terima kasih.
Kadang-kadang, seseorang bertanya tentang memberi saya beberapa dolar, tetapi saya sebenarnya tidak membutuhkan uang. Jika Anda masih ingin memberikan sedikit uang kepada saya, saya lebih suka Anda menyumbang ke Second Harvest Food Bank yang merupakan lokal bagi saya dan dapat menggunakan uang Anda untuk pekerjaan yang lebih baik daripada saya.