神奇的事情, NAT 的公网端口跟内网端口号完全一致

2023-12-02 00:36:16 +08:00
 neurocomputing

坐标帝都

线路 联通家宽

最近在尝试用 WebRTC 写个小玩意儿

结果发现 我这个 NAT3 反射地址端口号完全跟内网端口号一致的

好奇联通是咋做到的

3480 次点击
所在节点    宽带症候群
18 条回复
neurocomputing
2023-12-02 00:38:47 +08:00
应该不是软件故障,wifi 连手机热点的话,端口就不一样了,换回家宽就又一样了
ysc3839
2023-12-02 01:27:54 +08:00
本来 NAT 就可以内外部端口分配成一样的,只不过大多数 NAT 实现不这么做而已
neurocomputing
2023-12-02 01:49:56 +08:00
@ysc3839 那必然会出现用户之间冲突啊,本地内网开端口的时候又没办法知道公网这个端口号是不是被占用了
flyqie
2023-12-02 01:50:44 +08:00
每个地区联通家宽差别真大。。

![Snipaste_2023-12-02_01-45-49.png]( https://s2.loli.net/2023/12/02/Y26OjzGpdxlPFem.png)

![Snipaste_2023-12-02_01-46-20.png]( https://s2.loli.net/2023/12/02/aXgRCELN2s6IkVl.png)
flyqie
2023-12-02 01:56:29 +08:00
@flyqie #4

不过我这边内外端口号确实也是一致的。
Mitt
2023-12-02 02:16:35 +08:00
@neurocomputing #3 它能给你分一样的端口就是说明这个端口的空闲的,1:1 NAT 也是 NAT ,这个 IP 整个都是你的,只是不直接给你公网 IP
ysc3839
2023-12-02 03:09:58 +08:00
@neurocomputing 那有冲突时当然是分配别的端口了
dangyuluo
2023-12-02 03:34:26 +08:00
我也觉得有点神奇,使用固定端口发包的程序难道就不会冲突么
dangyuluo
2023-12-02 03:35:17 +08:00
哦看到了回复,虽然独享这个 IP ,但就是不分配给你的主机
00oo00
2023-12-02 05:32:25 +08:00
我记得很多地方电信联通都是 nat1 啊。
测这玩意要把 win 的防火墙关闭或者单独添加白名单,路由器要支持全锥形,才能测准。
dode
2023-12-02 09:03:17 +08:00
默认不改变出端口,除非内网使用端口有冲突
amyw495062
2023-12-02 09:11:44 +08:00
坐标 0760 的移动,也是这样,电信联通就不是

![微信图片_20231202090922.png]( https://s2.loli.net/2023/12/02/D5YXom1GiHxFUeW.png)
lovelylain
2023-12-02 09:46:03 +08:00
有些 FullconeNAT 实现是优先保持原端口的,例如 https://github.com/Chion82/netfilter-full-cone-nat/blob/master/xt_FULLCONENAT.c#L432
```c
if ((range->flags & NF_NAT_RANGE_PROTO_RANDOM)
|| (range->flags & NF_NAT_RANGE_PROTO_RANDOM_FULLY)) {
/* for now we do the same thing for both --random and --random-fully */

/* select a random starting point */
start = (uint16_t)(prandom_u32() % (u32)range_size);
} else {
if ((original_port >= min && original_port <= min + range_size - 1)
|| !(range->flags & NF_NAT_RANGE_PROTO_SPECIFIED)) {
/* 1. try to preserve the port if it's available */
mapping = get_mapping_by_ext_port(original_port, ifindex);
if (mapping == NULL || !(check_mapping(mapping, net, zone))) {
return original_port;
}
}

/* otherwise, we start from zero */
start = 0;
}
```
gamexg
2023-12-02 11:50:26 +08:00
@neurocomputing tcp 还真能多个内网用户共享一个端口,只要目标地址不一样,就能靠目标地址识别应该转发给哪个内网 ip 。
julyclyde
2023-12-02 14:10:18 +08:00
@neurocomputing 冲突那是第二个客户的问题。你现在是幸运的第一个
TESTFLIGHT2021
2023-12-02 15:14:32 +08:00
@gamexg 一样也可以共享,BRAS 做好记录就行
Kowloon
2023-12-03 11:33:06 +08:00
因为北京联通 IP 多,搞不好部署的是 1:1 NAT 防止用户体验变差。
Gadmin
2023-12-04 22:07:57 +08:00
你是不是实际就是公网你没发现啊。一般路由器默认你要是没映射那个端口或者没 upnp 就是 nat3 。
https://i.postimg.cc/CK5v2Xfj/image.png
https://i.postimg.cc/4yPNmYNk/image.png

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/996998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX