如题:
现在运营商 PPPOE 桥接下发的是内网 IP ( 100.X.X.X),NAT1 ,路由类原生 openwrt ;
尝试开了 UPNP ,并且成功映射,外网测试公网 IP ( 117.X.X.X)端口不通;
手动在防火墙建立映射,外网测试公网 IP ( 117.X.X.X)端口不通;
基于以上
我是否可以理解,在获得内网 IP 的情况下,如果想要成功的做端口映射
需要做两层端口映射?
即 Ppoe 桥接后,Openwrt ( 100.X.X.X)上的端口映射只对 100.X.X.X 以下生效
还需要对 Openwrt 以上( 117.X.X.X)做一层端口映射?
那内网 NAT1 的意义在于什么?
1
lululau 2022-09-08 18:36:28 +08:00
这个需要黑进电信机房才行
|
2
ochatokori 2022-09-08 18:38:44 +08:00 via Android
是要两层映射,nat1 意义在于你可以内部向外面打洞,之后就可以让外面任意主机访问了。
nat4 的话就不行了 |
4
Wenpo OP |
5
SenLief 2022-09-08 19:01:40 +08:00
内网 IP 没啥希望吧?
|
6
ochatokori 2022-09-08 19:10:32 +08:00 via Android
@Wenpo #4 如果你的路由器( 100.x )和运营商( 117.x )都是 NAT1 ,那就是有映射的,但是需要内部先往外访问一次(打洞),只用 upnp 或者直接监听是不行的
|
7
dddxm 2022-09-08 19:12:31 +08:00 via iPhone
这个 nat 测试 GitHub 有新版的。用那个新版的测试看看
|
8
Wenpo OP @dddxm
![Snipaste_2022-09-08_19-44-18.jpg]( https://img1.imgtp.com/2022/09/08/mVX1TRNL.jpg) ![Snipaste_2022-09-08_19-45-45.jpg]( https://img1.imgtp.com/2022/09/08/0546lZZB.jpg) 试了,也是 NAT1 |
9
Wenpo OP @ochatokori 那意思还是有机会的嘛,应该写个 IPK 或者脚本之类的可以实现?
|
10
lsylsy2 2022-09-08 20:56:19 +08:00
以原版 openwrt21.03 为例,在 upnp 设置里可以启用 stun server ,这样流程就是:
假设公网 IP ( 117.x.x.x )为 A ,openwrt ( 100.x.x.x )为 B ,终端( 192.168.x.x )为 C: 1 、C 向 B 发送 UPNP 请求,“给我映射个公网端口到 192.168.x.x:54321” 2 、B 在自己的防火墙上设置 100.x.x.x:54321 转发到 192.168.x.x:54321 ,然后通过 A 连接公网的 stun 服务查到这是个 NAT1 ,他的公网对应端口是 117.x.x.x:12345 3 、B 告诉 C:我帮你映射好了,外网访问 117.x.x.x:12345 就可以转发到你的 54321 |
11
Wenpo OP @lsylsy2 确实有 stun server 这个选项,不过是不是需要双方认定的 stun 服务器,共同到这个服务器查询端口才行?
|
12
mikewang 2022-09-08 22:39:14 +08:00 2
首先,STUN 测试一般使用的是 UDP ,而 Port Forwarding Tester 网站上端口检查是 TCP ,不是同一种协议。
其次,NAT1 (Full cone NAT) 是可以通过类似打洞的方式,在公网上开放自己 TCP 端口的,并且运行 http/https 服务。 我正在做这个实验,在中国移动的家宽上已经成功实现。 有空会把方案开源出来。 |
15
mikewang 2022-09-08 23:36:34 +08:00 1
@Wenpo
@jackzhou0 简单介绍一下原理吧。 假设运营商给了我 NAT IP:100.64.12.34 利用 Socket 端口重用的特性,监听 TCP 端口 100.64.12.34:1234 的同时,由这个端口,向我的腾讯云服务器建立一条 TCP 连接。 服务器告诉本地,你的公网地址是 203.0.113.10:14500 ,并且服务器保持这个连接不关闭。(这很重要) 只要这条连接维持下去,任意地址访问 203.0.113.10:14500 ,最终都会转发到 100.64.12.34:1234 去。 一旦这条连接断开,那么转发规则就会失效。 方案可行前提是:NAT1 ,并且没有 TCP 防火墙(一般改桥接即可)。 |
19
natsji 2022-09-09 08:02:48 +08:00 via Android
直接用 ipv6
|
20
knightdf 2022-09-09 09:36:03 +08:00
只能用 frp 之类的可以吧
|
21
MikuM97 2022-09-09 10:46:56 +08:00
taliscale 之类的软件 SDN 解决方案也可以尝试,NAT1 的情况下软件会自动帮你完成 P2P 的打洞,如果有兴趣折腾,还可以自建 headscale 来提升国内的访问速度
|
22
mikewang 2022-09-09 18:29:49 +08:00 via iPhone
@hanguofu 因为一般情况下光猫防火墙会阻止外部的传入 TCP (即使是 NAT1 )。桥接一劳永逸。
手动关闭光猫防火墙,并设置 DMZ 也可以达到同样的效果。 |
23
wolfmei 2022-09-10 15:06:00 +08:00
可以试下部署 headscale
|
25
mikewang 2022-09-11 09:22:41 +08:00
@Tink 不是 frp 。
frp 的流量是要全部经过服务器的。 这个方案,保持连接只是为了维持 NAT 的端口映射关系,流量不会过服务器。 服务器并非必要选择,只要知道外部端口并维持连接即可。 目前在考虑支持 tcp 的 public stun 服务器借助打洞,不过自己服务器的行为更可控一些。 |
27
mikewang 2022-09-13 00:03:09 +08:00
|