ProHoster > Blog > Pentadbiran > Terowong VPN terus antara komputer melalui NAT pembekal (tanpa VPS, menggunakan pelayan STUN dan Yandex.disk)
Terowong VPN terus antara komputer melalui NAT pembekal (tanpa VPS, menggunakan pelayan STUN dan Yandex.disk)
Tambahan Perkara tentang cara saya berjaya mengatur terowong VPN terus antara dua komputer yang terletak di belakang penyedia NAT. Artikel sebelumnya menerangkan proses mengatur sambungan dengan bantuan pihak ketiga - perantara (VPS yang disewa bertindak sebagai sesuatu seperti pelayan STUN dan pemancar data nod untuk sambungan). Dalam artikel ini saya akan memberitahu anda bagaimana saya berjaya tanpa VPS, tetapi perantara kekal dan mereka adalah pelayan STUN dan Yandex.Disk...
Pengenalan
Selepas membaca ulasan jawatan sebelumnya, saya menyedari bahawa kelemahan utama pelaksanaan adalah penggunaan perantara - pihak ketiga (VPS) yang menunjukkan parameter semasa nod, di mana dan bagaimana untuk menyambung. Mempertimbangkan cadangan untuk menggunakan STUN ini (yang terdapat banyak) untuk menentukan parameter sambungan semasa. Pertama sekali, saya memutuskan untuk menggunakan TCPDump untuk melihat kandungan paket apabila pelayan STUN bekerja dengan pelanggan dan menerima kandungan yang tidak boleh dibaca sepenuhnya. Googling protokol yang saya jumpa artikel yang menerangkan protokol. Saya menyedari bahawa saya tidak dapat melaksanakan permintaan kepada pelayan STUN sendiri dan meletakkan idea itu dalam "kotak jauh".
Teori
Baru-baru ini saya terpaksa memasang pelayan STUN pada Debian daripada pakej
# apt install stun-server
dan dalam kebergantungan saya melihat pakej pelanggan yang mengejutkan, tetapi entah bagaimana saya tidak memberi perhatian kepadanya. Tetapi kemudian saya teringat tentang pakej pelanggan yang mengejutkan dan memutuskan untuk mengetahui cara ia berfungsi, selepas googling dan mencari di Yandex saya mendapat:
Pelanggan STUN versi 0.97
Membuka port 21234 dengan fd 3
Membuka port 21235 dengan fd 4
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 0
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Mesej mengejutkan yang diterima: 92 bait
MappedAddress = <IP Saya>:2885
Alamat Sumber = 216.93.246.18:3478
ChangedAddress = 216.93.246.17:3479
Atribut tidak diketahui: 32800
Nama Pelayan = Vovida.org 0.98-CPC
Mesej jenis 257 id=1 yang diterima
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 0
Nak hantar msg len 28 ke 216.93.246.17:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 0
Akan menghantar msg len 28 ke <My IP>:2885
Mesej mengejutkan yang diterima: 28 bait
ChangeRequest = 0
Mesej jenis 1 id=11 yang diterima
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 0
Nak hantar msg len 28 ke 216.93.246.17:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Mesej mengejutkan yang diterima: 92 bait
MappedAddress = <IP Saya>:2885
Alamat Sumber = 216.93.246.17:3479
ChangedAddress = 216.93.246.18:3478
Atribut tidak diketahui: 32800
Nama Pelayan = Vovida.org 0.98-CPC
Mesej jenis 257 id=10 yang diterima
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 4
Nak hantar msg len 28 ke 216.93.246.18:3478
Pengekodan mesej mengejutkan:
Pengekodan ChangeRequest: 2
Nak hantar msg len 28 ke 216.93.246.18:3478
ujian I = 1
ujian II = 0
ujian III = 0
ujian I(2) = 1
ialah nat = 1
IP dipetakan sama = 1
jepit rambut = 1
port pemulihara = 0
Utama: Pemetaan Bebas, Penapis Bergantung Pelabuhan, port rawak, akan sepit rambut
Nilai pulangan ialah 0x000006
Rentetan dengan nilai
MappedAddress = <IP Saya>:2885
hanya apa yang anda perlukan! Ia memaparkan status semasa untuk sambungan pada port UDP tempatan 21234. Tetapi ini hanya separuh daripada pertempuran, persoalan timbul tentang cara memindahkan data ini ke hos jauh dan mengatur sambungan VPN. Menggunakan protokol mel, atau mungkin Telegram?! Terdapat banyak pilihan dan saya memutuskan untuk menggunakan Yandex.disk, sejak saya terjumpa artikel tentang bekerja Curl melalui WebDav dengan Yandex.disk. Selepas memikirkan pelaksanaannya, saya menghasilkan skema berikut:
Memberi isyarat bahawa nod sedia untuk mewujudkan sambungan dengan kehadiran fail tertentu dengan cap masa pada Yandex.disk;
Jika nod sudah sedia, kemudian terima parameter semasa daripada pelayan STUN;
Muat naik tetapan semasa ke Yandex.disk;
Semak kehadiran dan baca parameter nod jauh daripada fail pada Yandex.disk;
Mewujudkan sambungan dengan hos jauh menggunakan OpenVPN.
Amalan
Selepas berfikir sedikit, mengambil kira pengalaman artikel lepas, saya cepat-cepat menulis skrip. Kami akan memerlukan:
Salin ke papan keratan dan tampal ke editor, contohnya:
# nano vpn10.sh
nyatakan log masuk (baris ke-2) dan kata laluan untuk Yandex.disk (baris ke-3).
nyatakan alamat IP dalaman terowong (baris ke-4).
jadikan skrip boleh laku:
# chmod +x vpn10.sh
jalankan skrip:
# ./vpn10.sh nZbVGBuX5dtturD
di mana nZbVGBuX5dtturD ialah ID sambungan yang dijana di sini
Pada nod jauh, lakukan perkara yang sama, nyatakan alamat IP dalaman yang sepadan bagi terowong dan ID sambungan.
Untuk menjalankan skrip secara automatik apabila dihidupkan, saya menggunakan arahan βnohup //vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &β yang terkandung dalam fail /etc/ rc.local
Kesimpulan
Skrip berfungsi, diuji pada Ubuntu (18.04, 19.10, 20.04) dan Debian 9. Anda boleh menggunakan mana-mana perkhidmatan lain sebagai pemancar, tetapi untuk pengalaman saya menggunakan Yandex.disk.
Semasa percubaan, didapati bahawa beberapa jenis pembekal NAT tidak membenarkan sambungan dibuat. Terutamanya daripada pengendali mudah alih di mana torrents disekat.
Saya merancang untuk menambah baik dari segi:
Penjanaan automatik secret.key setiap kali anda memulakan, menyulitkan dan menyalin ke Yandex.disk untuk pemindahan ke nod jauh (Mengambil kira dalam versi yang dikemas kini)
Tugasan automatik alamat IP antara muka
Menyulitkan data sebelum memuat naik ke Yandex.disk
Pengoptimuman kod
Biarkan ada IPv6 di setiap rumah!
Dikemas kini! Fail terkini dan pakej DEB di sini - yandex.disk