Closed egg1234 closed 1 year ago
看上去应该是没有放行入站,参考OpenWrt的配置是: https://github.com/heiher/natmap/wiki/web#4-%E9%98%B2%E7%81%AB%E5%A2%99%E6%94%BE%E8%A1%8Ctcp%E5%8D%8F%E8%AE%AE%E7%9B%AE%E7%9A%84%E7%AB%AF%E5%8F%A36336%E7%9A%84%E5%85%A5%E7%AB%99
另外,有公网IP为何要用natmap?
@heiher 谢谢指点!实际上这个路由器防火墙都是关闭的,然后这台ubuntu 20根本没有安装防火墙ufw,所以上面也特别说明内网其他机器可以直接用浏览器访问http://10.0.0.59:80,所以不存在没有放行入站的问题,更进一步是即使把这台ubuntu 20放到路由器的DMZ区也是不能外网访问natmap输出的公网地址及端口,所以才不明白究竟出了什么问题
这个路由器有公网ip还要做这个测试是因为有另外一个广电的网络没有公网ip,所以想先在一个简单的环境测试通过,才到那个广电网络去试验
先检查路由器wan口的入站,比如先用nc测一下,然后再抓包排查一下。不清楚什么场景,上游设备有没有可能有防火墙?
有一个奇怪的现象,我换了另外一个运营商测试,也是wan出口有公网ip地址的,也是类似下面的命令 ./natmap -s stun.voip.blackberry.com -h qq.com -b 19999 -t 10.0.0.59 -p 80
natmap的输出 1.2.3.4 19999 2001::4e1f:d848:d8ba 19999 tcp 10.0.0.59
奇怪的地方是为什么natmap的输出永远都把我自己bind的19999端口写到输出里面,按我理解natmap的输出端口应该是对方stun服务器检测到我这边的源端口才是,为什么换了不同运营商都一样是输出自己bind的19999端口,根本没有输出对方反馈的我自己这边广域网的源端口
所以我从另外的地方用浏览器访问 http://1.2.3.4:19999 当然会出错,因为根本没有访问到广域网的打洞端口
因为wan口是公网ip呀,如果natmap是跑在路由器上,这就是必然的结果,而如果是跑在子网主机上,也有很大概率分配相同的端口(与NAT实现相关)。
尝试在10.0.0.59机器加了ip转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
然后在远端的ubuntu机器测试访问变成下面的反馈,实际上内网访问 http://10.0.0.59:80 没有任何问题,而外网访问过来就有问题 nc -vz 1.2.3.4 19999 Connection to 1.2.3.4 19999 port [tcp/*] succeeded!
curl http://1.2.3.4:19999 curl: (56) Recv failure: Connection reset by peer
好吧,这看上去端口是通的,很可能是运营商阻断了HTTP协议,相同外部端口试试转发SSH或其它协议。
换成下面的命令 ./natmap -s stun.voip.blackberry.com -h qq.com -b 19999 -t 10.0.0.59 -p 22
然后ssh尝试连接,出现下面反馈,这个username肯定是用密码登录的,不需要用证书 ssh username@1.2.3.4 -p 19999
kex_exchange_identification: read: Connection reset by peer Connection reset by 1.2.3.4 port 19999
这看上去还是端口不通呀,路由器上对wan口抓包看看双向流量情况。
由于出口路由器都是标准的家用路由器,所以抓不了包,
现在估计也没有什么头绪,先把issue关了,以后有机会或有其他头绪再reopen吧
出口路由器是家庭路由器netgear,路由器wan口有公网ip地址,经过NatTypeTester测试是fullcone状态
在内网ubuntu 20系统上使用root用户运行下面的命令
./natmap -s stun.voip.blackberry.com -h qq.com -b 19999 -t 10.0.0.59 -p 80 或 ./natmap -s stun.voip.blackberry.com -h qq.com -b 19999 -t 127.0.0.1 -p 80
输出下面信息,而且1.2.3.4的确也是路由器wan口现在的公网ip地址 1.2.3.4 19999 2001::4e1f:d848:d8ba 19999 tcp 10.0.0.59
并且这台ubuntu 20(10.0.0.59)已经安装nginx并监听80端口,内网其他机器可以直接用浏览器访问http://10.0.0.59:80,能够显示正常的web页面
然后使用外网其他机器的浏览器访问natmap输出的公网地址及端口,浏览器报告连接失败
然后在外网其他ubuntu 20机器使用nc测试natmap输出的公网地址及端口 ./nc -vz 1.2.3.4 19999
输出下面的结果 nc: connect to 1.2.3.4 port 19999 (tcp) failed: Connection refused
也试过把10.0.0.59机器放到路由器的DMZ区域,情况一样,都是不能访问
想请教一下这个问题出现在什么地方?
非常感谢!