Bruke NAT Traversal for å koble brukere i passiv modus

Denne artikkelen er en gratis oversettelse av en av oppføringene i DC++ utviklerblogg.

Med tillatelse fra forfatteren (så vel som for klarhet og interesse) farget jeg den med lenker og supplerte den med litt personlig forskning.

Innledning

Minst én bruker av det koblende paret må være i aktiv modus på dette tidspunktet. NAT-gjennomgangsmekanismen vil være nyttig når den aktive modusen ikke er konfigurert på noen av sidene. Dette skyldes vanligvis at en brannmur eller NAT-enhet blokkerer innkommende tilkoblinger.

Hvis begge klientene er i aktiv modus

Den initierende klienten sender en kommando som inneholder sin egen IP-adresse og port $ConnectToMe til en annen klient. Ved å bruke disse dataene oppretter klienten som mottok kommandoen en forbindelse med initiativtakeren.

Hvis en av klientene er i passiv modus

Gjennom navet, en passiv klient A sender en kommando $RevConnectToMe aktiv klient Bsom deretter svarer med kommandoen $ConnectToMe.

Bruke NAT Traversal for å koble brukere i passiv modus
Som en server S i tilfellet ovenfor er det en DC-hub

Hvis begge klientene er i passiv modus på ADC-hub

Klienter bak ulike NAT-er A и B ble med i navet S.

Bruke NAT Traversal for å koble brukere i passiv modus
Slik ser koblingen til huben ut fra klientsiden A

Huben aksepterer tilkoblinger på port 1511. Klient A oppretter utgående tilkoblinger fra sitt private nettverk via port 50758. Huben ser på sin side adressen til NAT-enheten, jobber med den og kringkaster den til klienter i henhold til deres identifikatorer.

kunde A sender til server S melding som ber om hjelp til å koble til en klient B.

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

Også i passiv modus, klienten B, etter å ha mottatt denne kommandoen, må rapportere sin private port som brukes til å koble til huben via NAT.

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

Etter å ha mottatt denne informasjonen klienten A prøver umiddelbart å etablere en forbindelse med klienten B og rapporterer sin egen private havn.

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

Hva er interessen? Interessen er å flytte endepunktet til samme forbindelse ved å opprette en ny forbindelse til en offentlig adresse gjennom en allerede brukt privat port.

Bruke NAT Traversal for å koble brukere i passiv modus
Bingo!

Selvfølgelig, i dette tilfellet klienten NAT B har all rett til å avvise den første tilkoblingsforespørselen fra en klient A, men hans egen forespørsel skynder seg inn i "hullet" skapt av denne forbindelsen, og forbindelsen er etablert.

Bruke NAT Traversal for å koble brukere i passiv modus
Illustrasjon passer for hele prosessen med forbehold om at protokoll bruker ikke offentlige porter åpnet av økten NATS, samt private adresser.

Epilog

På tidspunktet for skriving av den (originale) artikkelen, jobber omtrent halvparten av DC-klientene i passiv modus. Det betyr at en fjerdedel av alle mulige koblinger ikke kan gjøres.

Lengre DC++ vil kunne omgå NATved bruk av eksisterende tilkoblinger AS и BS å etablere en direkte klient-klient-forbindelse, selv om A и B er i passiv modus.

Kilde: www.habr.com

Legg til en kommentar