Paggamit ng NAT Traversal upang ikonekta ang mga user sa passive mode

Ang artikulong ito ay isang libreng pagsasalin ng isa sa mga entry sa DC++ developer blog.

Sa pahintulot ng may-akda (pati na rin para sa kalinawan at interes), kinulayan ko ito ng mga link at dinagdagan ito ng ilang personal na pananaliksik.

Pagpapakilala

Hindi bababa sa isang user ng connecting pair ang dapat nasa active mode sa oras na ito. Ang mekanismo ng NAT traversal ay magiging kapaki-pakinabang kapag ang aktibong mode ay hindi na-configure sa magkabilang panig. Ito ay kadalasang dahil sa isang firewall o NAT device na humaharang sa mga papasok na koneksyon.

Kung ang parehong kliyente ay nasa active mode

Ang nagpasimulang kliyente ay nagpapadala ng utos na naglalaman ng sarili nitong IP address at port $ConnectToMe sa ibang kliyente. Gamit ang data na ito, ang kliyente na nakatanggap ng command ay nagtatatag ng isang koneksyon sa initiator.

Kung ang isa sa mga kliyente ay nasa passive mode

Sa pamamagitan ng hub, isang passive client A nagpapadala ng utos $RevConnectToMe aktibong kliyente Bna pagkatapos ay tumugon sa utos na $ConnectToMe.

Paggamit ng NAT Traversal upang ikonekta ang mga user sa passive mode
Bilang isang server S sa kaso sa itaas mayroong isang DC hub

Kung ang parehong mga kliyente ay nasa passive mode on ADC hub

Mga kliyente sa likod ng iba't ibang NAT A ΠΈ B sumali sa hub S.

Paggamit ng NAT Traversal upang ikonekta ang mga user sa passive mode
Ganito ang hitsura ng koneksyon sa hub mula sa panig ng kliyente A

Ang hub ay tumatanggap ng mga koneksyon sa port 1511. Client A gumagawa ng mga papalabas na koneksyon mula sa pribadong network nito sa pamamagitan ng port 50758. Ang hub, naman, ay nakikita ang address ng NAT device, gumagana dito at ibina-broadcast ito sa mga kliyente ayon sa kanilang mga identifier.

Customer A ipinapadala sa server S mensaheng humihingi ng tulong sa pagkonekta sa isang kliyente B.

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

Gayundin sa passive mode, ang kliyente B, nang matanggap ang utos na ito, dapat iulat ang pribadong port nito na ginamit upang kumonekta sa hub sa pamamagitan ng NAT.

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

Matapos matanggap ang impormasyong ito ang kliyente A agad na sumusubok na magtatag ng isang koneksyon sa kliyente B at nag-uulat ng sarili nitong pribadong daungan.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

Ano ang interes? Ang interes ay sa paglilipat ng endpoint ng parehong koneksyon sa pamamagitan ng paglikha ng isang bagong koneksyon sa isang pampublikong address sa pamamagitan ng isang nagamit nang pribadong port.

Paggamit ng NAT Traversal upang ikonekta ang mga user sa passive mode
Bingo!

Siyempre, sa kasong ito ang kliyente NAT B may lahat ng karapatan na tanggihan ang unang kahilingan sa koneksyon mula sa isang kliyente A, ngunit ang kanyang sariling kahilingan ay sumugod sa "butas" na nilikha ng mismong koneksyon na ito, at ang koneksyon ay naitatag.

Paggamit ng NAT Traversal upang ikonekta ang mga user sa passive mode
Ilustrasyon na angkop para sa buong proseso na may caveat na protokol ay hindi gumagamit ng mga pampublikong port na binuksan ng session Natβ€’S, pati na rin ang mga pribadong address.

Epilogo

Sa oras ng pagsulat ng (orihinal) na artikulo, humigit-kumulang kalahati ng mga kliyente ng DC ay nagtatrabaho sa passive mode. Nangangahulugan ito na ang isang-kapat ng lahat ng posibleng koneksyon ay hindi maaaring gawin.

Dagdag pa Magagawang i-bypass ng DC++ ang NATgamit ang mga kasalukuyang koneksyon Aβ€’S ΠΈ Bβ€’S upang magtatag ng direktang koneksyon ng kliyente-kliyente, kahit na A ΠΈ B ay nasa passive mode.

Pinagmulan: www.habr.com

Magdagdag ng komento