Izmantojot NAT Traversal, lai savienotu lietotājus pasīvā režīmā

Šis raksts ir bezmaksas tulkojums vienam no ierakstiem DC++ izstrādātāju emuārs.

Ar autora atļauju (kā arī skaidrības un intereses labad) to izkrāsoju ar saitēm un papildināju ar kādu personisku pētījumu.

Ievads

Vismaz vienam savienojoŔā pāra lietotājam Å”obrÄ«d ir jābÅ«t aktÄ«vajā režīmā. NAT ŔķērsoÅ”anas mehānisms bÅ«s noderÄ«gs, ja aktÄ«vais režīms nav konfigurēts nevienā pusē. Parasti tas notiek tāpēc, ka ugunsmÅ«ris vai NAT ierÄ«ce bloķē ienākoÅ”os savienojumus.

Ja abi klienti ir aktīvajā režīmā

IniciējoÅ”ais klients nosÅ«ta komandu, kas satur savu IP adresi un portu $ConnectToMe citam klientam. Izmantojot Å”os datus, klients, kurÅ” saņēma komandu, izveido savienojumu ar iniciatoru.

Ja kāds no klientiem ir pasīvā režīmā

Caur centrmezglu, pasīvs klients A nosūta komandu $RevConnectToMe aktīvs klients Bkas pēc tam atbild ar komandu $ConnectToMe.

Izmantojot NAT Traversal, lai savienotu lietotājus pasīvā režīmā
Kā serveris S iepriekÅ” minētajā gadÄ«jumā ir lÄ«dzstrāvas centrmezgls

Ja abi klienti ir ieslēgti pasīvajā režīmā ADC centrmezgls

Klienti aiz dažādiem NAT A и B pievienojās centrmezglam S.

Izmantojot NAT Traversal, lai savienotu lietotājus pasīvā režīmā
Šādi izskatās savienojums ar centrmezglu no klienta puses A

Centrmezgls pieņem savienojumus ar portu 1511. Klients A veic izejoÅ”os savienojumus no sava privātā tÄ«kla caur portu 50758. Hubs savukārt redz NAT ierÄ«ces adresi, strādā ar to un pārraida to klientiem atbilstoÅ”i to identifikatoriem.

Klients A nosūta uz serveri S ziņojums, kurā tiek lūgta palīdzība, lai izveidotu savienojumu ar klientu B.

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

ArÄ« pasÄ«vajā režīmā klients B, saņemot Å”o komandu, ir jāziņo par savu privāto portu, ko izmanto, lai izveidotu savienojumu ar centrmezglu, izmantojot NAT.

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

Pēc Ŕīs informācijas saņemÅ”anas klients A nekavējoties mēģina izveidot saikni ar klientu B un ziņo par savu privāto ostu.

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

Kāda ir interese? Interese ir novirzīt viena un tā paŔa savienojuma gala punktu, izveidojot jaunu savienojumu uz publisko adresi, izmantojot jau izmantotu privāto portu.

Izmantojot NAT Traversal, lai savienotu lietotājus pasīvā režīmā
Bingo!

Protams, Å”ajā gadÄ«jumā klienta NAT B ir visas tiesÄ«bas noraidÄ«t pirmo savienojuma pieprasÄ«jumu no klienta A, bet viņa paÅ”a lÅ«gums steidzas tieÅ”i Ŕī savienojuma radÄ«tajā ā€œbedrÄ“ā€, un savienojums tiek izveidots.

Izmantojot NAT Traversal, lai savienotu lietotājus pasīvā režīmā
Ilustrācija ir piemērota visam procesam ar brīdinājumu protokols neizmanto sesijas atvērtos publiskos portus NAT-S, kā arī privātās adreses.

Epilogs

Raksta (sākotnējā) rakstīŔanas laikā aptuveni puse DC klientu strādā pasÄ«vā režīmā. Tas nozÄ«mē, ka ceturto daļu no visiem iespējamiem savienojumiem nevar izveidot.

Nākotnē DC++ varēs apiet NATizmantojot esoÅ”os savienojumus A-S Šø B-S lai izveidotu tieÅ”u klienta-klienta savienojumu, pat ja A Šø B ir pasÄ«vā režīmā.

Avots: www.habr.com