Hogyan kell NAT-ot lyukasztani TCP-n?
Amikor a kliens csatlakozik egy publikus portal rendelkező szerverre megpróbálok létrehozni egy szervert a kliensen ami azon a porton figyel amivel csatlakozott a publikus szerverre.
Viszont az a gond, hogy amikor megpróbálom létrehozni ezt a szervert mindig olyan hibát kapok, hogy a port már használatban van.
Ez a módszer csakis MacOS operációs rendszeren működik ott nem ad ilyen hibát, Android/iOS/Windows/Linux-on viszont igen.
Mit kellene másképp csinálnom?
Adatkapcsolati szinten (layer 2) tudod figyelni az adatforgalmat, csak akkor neked kell kihámozni a keretből az IP címet és port számot. (Ld. network sniffing)
(Windows alatt kicsit macerásabb a raw socket-ek használata, Linux ebben megengedőbb.)
"NAT-ot lyukasztani"
?? :o
Lehet nem NAT lyukasztásnak nevezik, egy régebbi prog.hu-s cikkben olvastam így róla.
A lényeg, hogy szeretnék peer-to-peer kapcsolatot létrehozni két kliens között, viszont nem hozható létre közvetlen PTP kapcsolat ha mindkét kliens NAT mögött van.
Találtam egy "hole punching" nevezetű megoldást amikor a két kliens csatlakozik egy szerverre ott adatot cserélnek, hogy ki milyen ipvel és portal csatlakozott a szerverre és utána a csomagokat már arra az ipre és portra küldik tovább amit megkaptak egymástól.
De ahhoz, hogy valamelyik kliens tudja fogadni a csomagokat kell indítania egy szervert közvetlen a publikus szerverre kapcsolódás után ugyanazzal a belső ipvel és portal amivel elindította a kommunikációt a publikus szerver felé, és itt a gond.
Nem lehet létrehozni szervert ugyanazzal az ipvel és portal amíg aktív a socket amivel kapcsolódott a publikus szerverre mert visszadob 'EADDRINUSE' hibával.
Találtam egy példát: [link]
A clientA.js-ben található a gond amikor a szervert megpróbálja létrehozni a c.localPort, c.localAddress változókkal.
Neked tűzfal lyukasztás vagy IP forward kell.
IPv4-nek van NAT hálózata, ami kintről nézve 1 IP-t takar. Így ezt az IP-t "meglőve" adott porton a Router nem tudja, mely NAT alatti gépnek küldje tovább. Ezt külön be kell állítani, hogy egy [külsőIP:10000]-res portra érkező mely [melsőIP:PORT]-ra továbbítsa. Nyilván a külső IP adott. Tehát a külső portot és a belső IP+portot kell megadni.
Ofc, a külső portnak nem kell feltétlen a szerveren figyelt portnak megfelelnie. Azaz simán lehet egy kulso-ip:5000 -> belso-ip:443 is.
A belső-ip:port-ot, hogy adom meg a csomagnak?
És ezt nem a NAT-oló gép fogja eldönteni, hogy külső-ip:port-ra érkező csomagokat irányítsa belső-ip:port-ra?
Közben az 'EADDRINUSE' problémára találtam megoldást, viszont a csomagok sehogy nem jutnak be a NAT-olt eszközhöz.
2db telenor mobilinternetes telefont szeretnék összekötnni.
Lehetséges, hogy a telenor NAT-oló gépe ezt teljesen letiltja, hogy más ip és portról fogadjon csomagokat?
???
Mind 2 telenoros mobilnet oszt hálózatot egy mögötte lévő gép-nek? (ezt eddig miért nem mondtad?)
Telefonon NAT konfiguráció nem hiszem, hogy fogsz csinálni. Akkor csinálnék egy a két gép között egy pont-pont kapcsolatú VPN-t.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!