Menggunakan NAT Traversal untuk Menghubungkan Pengguna Secara Pasif

Artikel ini adalah terjemahan gratis dari salah satu Entri Blog Pengembang DC ++ .

Dengan izin penulis (dan juga demi kejelasan dan minat, demi kepentingan) saya mengembangkannya dengan tautan dan menambahkannya dengan beberapa penelitian pribadi.


Pendahuluan

Saat ini, setidaknya satu pengguna dari sepasang pengguna yang terhubung harus dalam mode aktif. Mekanisme "bypass" NAT akan berguna jika mode aktif tidak dikonfigurasi di kedua sisi. Ini biasanya terjadi karena firewall yang masuk atau perangkat NAT memblokir koneksi yang masuk.

Jika kedua klien dalam mode aktif, Klien Inisiasi mengirimkan perintah $ ConnectToMe yang

berisi alamat IP dan port sendiri ke klien lain. Dengan menggunakan data ini, klien yang menerima perintah membangun koneksi dengan inisiator. Jika salah satu klien dalam mode pasif Melalui hub, klien pasif A mengirimkan perintah $ RevConnectToMe ke klien aktif B



yang kemudian merespons dengan perintah $ ConnectToMe.


Sebagai server S dalam kasus di atas bertindak DC hub

Jika kedua klien dalam mode pasif, hub ADC

terletak di belakang NAT klien yang berbeda A dan B bergabung ke hub S .


Jadi koneksi ke hub terlihat dari sisi klien A.

Hub menerima koneksi pada port 1511. Klien A membuat koneksi keluar dari jaringan pribadinya melalui port 50758. Hub, pada gilirannya, melihat alamat perangkat NAT, bekerja dengannya dan menyiarkan klien sesuai dengan pengidentifikasi mereka.

Klien A mengirim ke server Spesan meminta bantuan untuk terhubung dengan Bed dan klien . Menjadi juga dalam mode pasif, klien B , setelah menerima perintah ini, harus menginformasikan port privasinya yang digunakan untuk terhubung ke hub melalui NAT. Setelah menerima informasi ini, klien A segera mencoba membuat koneksi dengan klien B dan melaporkan port pribadinya sendiri.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991



Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991



Hub: [Outgoing][178.79.159.147:1511] DRNT AAAA BBBB ADCS/0.10 50758 1649612991

Apa bunganya? Minatnya adalah menggeser titik akhir dari koneksi yang sama dengan membuat koneksi baru ke alamat publik melalui port pribadi yang sudah digunakan.


Bingo!

Tentu saja, pada saat yang sama, NAT dari klien B memiliki hak penuh untuk menolak permintaan koneksi pertama dari klien A , tetapi permintaannya sendiri sudah masuk ke "lubang" yang dibuat oleh koneksi ini, dan koneksi dibuat.


Ilustrasi cocok untuk seluruh proses dengan peringatan bahwa protokol tidak menggunakan port publik yang dibuka oleh sesi NAT - S , serta alamat pribadi.

Epilog

Pada saat menulis artikel (asli), sekitar setengah dari klien DC pasif. Ini berarti bahwa seperempat dari semua koneksi yang mungkin tidak dapat dibuat.

Di masa depan, DC ++ akan dapat "memotong" NATmenggunakan koneksi A - S dan B - S yang ada untuk membuat koneksi klien - klien langsung, bahkan jika A dan B berada dalam mode pasif.

All Articles