Kliens forrásport kontra szerverfigyelő egy VPN-folyamban
Hasonlítsa össze a két portszámot egy alagútban: a szerver rögzített figyelőjét és a kliens rövid életű forrásportját, valamint az útválasztó fordítását közöttük.
Ugyanabban a beszélgetésben két szám jelenik meg, és egyik sem hibás. A szervernapló mutatja a szolgáltatást kínáló figyelőt, a laptop mutatja a datagramot küldő socketet, és egy köztes útválasztó kifelé menet átírhatja a másodikat. A beszélgetés két végpontjának összehasonlítása hasznosabb, mint a számjegyeké. Az alábbi összehasonlítás külön tartja a figyelőt, a kliens socketjét és a lefordított forrást, mert más-más kérdésre válaszolnak.
Két szám, amelyek ellentétes végpontokat írnak le
A szerver beállított portja az a cél, amelyre a kliens tárcsáz. Szabályzat rögzíti, megjelenik a profilban, és a szerver oldalán nyitva kell lennie. A kliens forrásportját helyben választják, általában az efemer tartományból, és azért létezik, hogy a válasznak legyen hova leszállnia. Minden újracsatlakozáskor változhat, és a tervezésben semmi nem függ attól, hogy stabil maradjon.
Egy köztes útválasztó átírhatja ezt a forrást a saját 'NAT'-leképezésébe. Ezért a szerveren megfigyelt számnak gyakran semmi köze ahhoz, amelyet a laptop választott.
Hol változik a forrásszám kifelé menet
Vegyünk egy kitalált IPv4-példát: egy kliens egy fordító útválasztó mögött, egy szerver egyetlen 'UDP'-figyelővel, és egyetlen datagram, amely mindkettőn átmegy. A táblázat megnevezi az egyes végpontokat és azt, ami velük történik, ahelyett hogy három megfigyelési ponton újrajátszaná a csomagot.
| Endpoint | What stays fixed | What changes on reconnect | Who owns it |
|---|---|---|---|
| Server listener | The service port and the address the profile names | Nothing; the listener does not follow the client | The server operator |
| Client socket | The destination it dials | The local source port, chosen per socket | The client, or its operating system |
| Translated source | Usually the public address of the router | The port, and sometimes the address after a network switch | The NAT device or the upstream carrier |
A cél minden sorban állandó, és csak a forrás azonossága változik. UDP NAT követelmények különböztetik meg a belső címet és portot a külső leképezéstől, ami pontosan a második és a harmadik sor közötti különbség. Az útválasztó megtarthatja a kliens forrásportját, vagy választhat másikat; a megtartás nem valami, amit egy alkalmazásnak feltételeznie kellene.
Olvassa ki a három végpontot magukból a gazdagépekből
Az alábbi listák három különböző gépről származnak, és együtt a teljes beszélgetést mutatják. Az elsőt a szerveren, a másodikat a kliensen, a harmadikat pedig ott futtassa, ahol a leképezés létezik. Egyetlen naplósor soha nem mutatja mindhármat.
ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194
Az első lista bizonyítja, hogy a szerver a szolgáltatáshoz kapcsolódó porton van, és megmutatja, melyik folyamat birtokolja. A második a kliens helyi socketjét és a tárcsázott célt mutatja. A harmadik az útválasztó által létrehozott leképezést mutatja, és ez az egyetlen hely, ahol a lefordított forrás megjelenik. Ebben a sorrendben olvassa őket, és a két szám többé nem tűnik ellentmondásosnak.
Mit változtat meg az újracsatlakozás, és mit nem
Egyes útválasztók megtartják a kliens forrásportját, ha szabad, mások minden alkalommal másikat osztanak ki. Mindkét viselkedés normális, és az elsőt megkövetelő alkalmazás a másodikon elromlik. A leképezés változása újracsatlakozás vagy hálózatváltás után nem szerverhiba: a kliens új socketet nyit, az útválasztó azt osztja ki, amije van, és a szerver új forrást lát ugyanazon a figyelőn. Hiba az lenne, ha elvárnánk, hogy a szerver egy tetszőleges kliensportra címzett forgalmat elfogadjon.
A közösség OpenVPN kliensei ezt a viselkedést a nobind révén kapják meg, amely az operációs rendszerre bízza a helyi port kiválasztását; a távoli port továbbra is a profilból jön. Az explicit kötés tudatos döntés, nem protokollkövetelmény. A szerver továbbra is egy végpontot kínál, míg a kliensek a saját helyi identitásukat választják.
Címkézze fel a rétegeket külön a rekordban
Az alagúton belül egy második beszélgetés folyik saját portokkal. Az alagút által szállított HTTPS-kérés célja TCP 443, míg a külső titkosított kapcsolat UDP 1194-et használ, ezért a külső forrásport megváltoztatása semmit nem változtat a belső szolgáltatáson.
Még a külső rétegen is számít a protokoll. Az UDP 1194 és a TCP 1194 különböző végpontok, és egy 'TCP'-figyelő soha nem kap UDP-datagramot csak azért, mert a szám egyezik. Amikor egy telepítést dokumentál, címkézze fel a szerverfigyelőt, a kliens socketjét és a lefordított forrást három különböző dologként, és mindegyikhez adja hozzá a szállítást.
Aztán hagyja, hogy a szabályzat kövesse a szerepeket. A szerver megnyitja a szándékolt szállítást a figyelőjén, és továbbra is hitelesíti a partnert; a kliens tűzfala engedi a saját kimenő cseréjére érkező válaszokat anélkül, hogy bejövő szolgáltatást tenne közzé. Az állapot nélküli szűrőnek ki kell írnia a visszirányt, és ez a gyakorlati oka annak, hogy a megkülönböztetés a rendezett ábrákon túl is számít.