我正在开发一个简单的基于Flask的服务器,可以与互联网上的对等应用程序(其他类似的服务器)进行通信。应用程序可以位于NAT之后。因此,我尝试使用pystun通过stun服务器解析外部IP和端口。
import stun
nat_type,external_ip,external_port=stun.get_ip_info()返回的端口为54320。问题是,当我尝试http://external_ip:54320时,请求没有到达Flask应用程序。http://external_ip:5000也不能工作,5000是使用的内部端口(我知道这应该不能工作,但不管怎样还是试过了)。没有防火墙。我已经用host="0.0.0.0“运行了Flask。要添加..我不想在路由器中进行显式端口映射。是否有一种方法可以监听可从外部地址访问的端口,并通过stun找出外部端口?
发布于 2018-02-28 02:35:10
如果不进行显式端口映射,则很难在NAT之后托管服务器。NAT还充当防火墙。NAT后面的节点可以建立出站TCP连接,但NAT将阻止任何入站连接。
STUN在这里没有帮助,因为它只帮助NAT后面的节点发现自己的端口映射。要允许在STUN之后建立连接,通常必须执行打孔步骤,这涉及到两个端点同时尝试彼此连接。
您可以尝试使用UPNP,这是许多NAT支持的用于动态创建端口映射的协议。有一些开放源代码库可能会起作用。
但更简单的解决方案是将NAT配置为具有明确的端口映射。(例如,端口50000在特定端口映射到PC的内部IP地址)。
https://stackoverflow.com/questions/49000249
复制相似问题