No, this, as I understand it, solves it. Imagine some udp-based game or another system with p2p communication. If it was ideal NAT-less internet:
- client A sends packet from a.a.a.a:aaa to remote server
- client B sends packet from b.b.b.b:bbb to remote server
- server tells these addresses with ports to other clients
- anyone else can connect to a.a.a.a:aaa and reach A
- anyone else can connect to b.b.b.b:bbb and reach B
But if there’s NAT, it’s not longer possible. But this would make it work again:
- both clients A and B are behind same NAT, to make it more challenging
- A sends packet from 192.168.88.101:12345 to server
- router can keep the port if it’s free, or choose different one, it doesn’t matter; let’s say it keeps it, so source will become p.p.p.p:12345 (p.p.p.p = its only public address)
- router adds (invisibly) what’s basically dstnat from p.p.p.p:12345 to 192.168.88.101:12345
- B sends packet from 192.168.88.102:12345 to server
- router changes source to p.p.p.p:23456 (it can’t keep 12345, because it’s already taken by A)
- router adds dstnat from p.p.p.p:23456 to 192.168.88.102:12345
- also, if B sends packet from same 192.168.88.102:12345 to different remote server, router will use same p.p.p.p:23456
- server tells these addresses and ports to other clients
- anyone else can connect to p.p.p.p:12345 and reach A
- anyone else can connect to p.p.p.p:23456 and reach B
It’s as if the NAT disappeared. Neat, isn’t it? Too bad I don’t have any use for it myself, I’m starting to like it. ![]()