Тази статия представлява свободен превод на една от публикациите в .
С разрешение на автора (как и заради ясността и интереса) я обогатих с линкове и добавих лични наблюдения.
Въведение
В момента поне един потребител от двойката, която се свързва, трябва да бъде в активен режим. Механизмът за "обход" на NAT ще бъде полезен, когато активният режим не е настроен от никоя от страните. Обикновено това се случва поради блокировка на входящите връзки от защитна стена или устройство NAT.
Ако и двамата клиенти са в активен режим
Клиент-инициатор изпраща команда, съдържаща собственото му IP-адрес и порт на друг клиент. Използвайки тези данни, клиентът, получил командата, установява връзка с инициатора.
Ако един от клиентите е в пасивен режим
Чрез хаба пасивният клиент A изпраща команда на активния клиент Б, който след това отговаря с командата $ConnectToMe.

Като сървър S в случая по-горе е DC хаб
Ако и двамата клиенти са в пасивен режим на
Клиенти, намиращи се зад различен NAT, A и Б са се свързали с хаба S.

Така изглежда свързването с хаба от страната на клиента A
Хабът приема връзки на порт 1511. Клиентът A осъществява изходящи връзки от своята частна мрежа през порт 50758. Хабът, от своя страна, вижда адреса на устройството NAT, работи с него и предава на клиентите съответно техните идентификатори.
Клиент A изпраща на сървъра S съобщение с молба за помощ за свързване с клиента Б.
Хъб: [Изходящ][178.79.159.147:1511] DРЦМ AAAA BBBB ADCS/0.10 1649612991
Бъдещият клиент, който също е в пасивен режим, Б, получава тази команда и трябва да съобщи своя частен порт, използван за свързване с хаба чрез NAT.
Хъб: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991
След получаване на тази информация клиентът A сразу се опитва да установи връзка с клиента Б и съобщава своя собствен частен порт.
Хъб: [Изходящ][178.79.159.147:1511] Д<b>РНТ</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991Какво е интересното? Интересът е в изместването на крайната точка на същата връзка чрез създаването на ново свързване към публичен адрес през вече използван частен порт.

Бинго!
Безусловно, в този случай NAT на клиента Б има пълното право да откаже първото искане за свързване от клиента A, но вече неговото собствено искане се насочва към "дупката", създадена от това свързване, и връзката все пак се установява.

Илюстрация, приложима към целия процес с уговорката, че не използва публични портове, отворени сесия NAT‒S, както и частни адреси.
Епилог
Към момента на писане (оригиналната) статия, около половината от клиентите на DC работят в пасивен режим. Това означава, че четвърт от всички възможни връзки не могат да бъдат осъществени.
В по-нататъшно , използвайки съществуващи връзки A‒S и Б‒S за установяване на пряка връзка клиент-клиент, дори ако A и Б са в пасивен режим.
Източник: habr.com
