Defnyddio NAT Traversal i gysylltu defnyddwyr yn y modd goddefol

Mae'r erthygl hon yn gyfieithiad rhydd o un o'r cofnodion yn Blog Datblygwyr DC++.

Gyda chaniatâd yr awdur (a hefyd er mwyn eglurder a diddordeb), rwyf wedi ychwanegu rhai dolenni a rhywfaint o ymchwil bersonol.

Cyflwyniad

Ar hyn o bryd, rhaid i o leiaf un defnyddiwr mewn pâr cysylltu fod mewn modd gweithredol. Mae croesi NAT yn ddefnyddiol pan nad oes gan y naill ochr na'r llall fodd gweithredol wedi'i ffurfweddu. Mae hyn fel arfer yn digwydd oherwydd bod cysylltiadau sy'n dod i mewn yn cael eu rhwystro gan wal dân neu ddyfais NAT.

Os yw'r ddau gleient mewn modd gweithredol

Mae'r cleient cychwynnol yn anfon gorchymyn sy'n cynnwys ei gyfeiriad IP a'i borthladd ei hun $CysylltuÂFi i gleient arall. Gan ddefnyddio'r data hwn, mae'r cleient sy'n derbyn y gorchymyn yn sefydlu cysylltiad â'r cychwynnydd.

Os yw un o'r cleientiaid mewn modd goddefol

Drwy'r canolbwynt, cleient goddefol A yn anfon gorchymyn $RevConnectToMe cleient gweithredol B, sydd wedyn yn ymateb gyda'r gorchymyn $ConnectToMe.

Defnyddio NAT Traversal i gysylltu defnyddwyr yn y modd goddefol
Fel gweinydd S yn yr achos uchod, mae'r canolbwynt DC yn bresennol

Os yw'r ddau gleient mewn modd goddefol ymlaen Canolbwynt ADC

Cleientiaid wedi'u lleoli y tu ôl i NATs gwahanol A и B ymunodd â'r canolbwynt S.

Defnyddio NAT Traversal i gysylltu defnyddwyr yn y modd goddefol
Dyma sut olwg sydd ar y cysylltiad â'r hwb o ochr y cleient. A

Mae'r canolbwynt yn derbyn cysylltiadau ar borthladd 1511. Cleient A yn gwneud cysylltiadau sy'n mynd allan o'i rwydwaith preifat trwy borthladd 50758. Mae'r canolbwynt, yn ei dro, yn gweld cyfeiriad y ddyfais NAT, yn gweithio gyda hi, ac yn darlledu i gleientiaid yn ôl eu dynodwyr.

Cwsmer A yn anfon at y gweinydd S neges yn gofyn am help i gysylltu â chleient B.

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

Gan fod y cleient hefyd mewn modd goddefol, B, ar ôl derbyn y gorchymyn hwn, rhaid iddo roi gwybod am ei borthladd preifat a ddefnyddir i gysylltu â'r hwb trwy NAT.

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

Ar ôl derbyn y wybodaeth hon, y cleient A yn ceisio sefydlu cysylltiad â'r cleient ar unwaith B ac yn adrodd ei borthladd preifat ei hun.

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

Beth yw'r pwynt? Y pwynt yw symud pwynt terfynol yr un cysylltiad trwy greu cysylltiad newydd â chyfeiriad cyhoeddus trwy borth preifat sydd eisoes yn cael ei ddefnyddio.

Defnyddio NAT Traversal i gysylltu defnyddwyr yn y modd goddefol
Bingo!

Wrth gwrs, yn yr achos hwn NAT y cleient B mae ganddo bob hawl i wrthod y cais cysylltiad cyntaf gan y cleient A, ond mae ei gais ei hun eisoes wedi'i gyfeirio i'r "twll" a grëwyd gan y cysylltiad hwn, ac mae'r cysylltiad wedi'i sefydlu o'r diwedd.

Defnyddio NAT Traversal i gysylltu defnyddwyr yn y modd goddefol
Darlun sy'n cyd-fynd â'r broses gyfan gyda'r rhybudd bod protocol nid yw'n defnyddio porthladdoedd cyhoeddus a agorwyd gan y sesiwn NATS, yn ogystal â chyfeiriadau preifat.

Epilogue

Ar adeg ysgrifennu, mae tua hanner cleientiaid DC yn gweithredu mewn modd goddefol. Mae hyn yn golygu na ellir sefydlu chwarter o'r holl gysylltiadau posibl.

Ymhellach Bydd DC++ yn gallu osgoi NAT, gan ddefnyddio cysylltiadau presennol AS и BS i sefydlu cysylltiad uniongyrchol rhwng cleient, hyd yn oed os A и B sydd mewn modd goddefol.

Ffynhonnell: hab.com