NAT¶
关键词:
NAT type
NAT网络检测
P2P打洞
NAT type有:
1. Full Cone NAT(NAT1,开放, Open)
全锥形 NAT,这是最宽松的网络环境,IP 和端口通常都不会受限
2. Address Restricted Cone NAT(NAT2,中等, Moderate)
受限锥型 NAT,相比 NAT1 IP 会受限,而端口不受限
3. Port Restricted Cone NAT(NAT3,严格, Strict)
端口受限锥型 NAT,相比 NAT2,NAT3 又增加了端口限制,也就是说 IP、端口都会受限
4. Symmetric NAT(NAT4,不可用)
对称型 NAT
具有端口受限锥型的受限特性,内部地址每一次请求一个特定的外部地址,都可能会绑定到一个新的端口号
也就是从同一个内网 (IP, Port) 请求不同的外部地址会有不同的 NAT 映射表项
即映射的端口号是可能不同的。这种类型基本上就告别 P2P
相互打洞:
1. Moderate/Type 2 NATs can only connect with Moderate/Type 2 or Open/Type 1 NAT
IP限制可以和IP限制/开放类型打通
IP 打通 IP 步骤:
a. 两个 host: h1, h2, 一个 server
b. h1, h2 先请求 server, server 记录 h1, h2对应的 ip:port
c. h1请求 h2对应的 ip:port, 由于ip 限制, h2 Nat上没有 h1对应 ip 的数据,请求失败
d. h2再请求h1,由于刚 h1请求了h2, h1 Nat上有 h2对应的 ip,请求成功
2. Strict/Type 3 NATs can only connect with Open/Type 1 NAT
工具¶
pystun¶
命令:
安装:
$ pip install pystun
执行:
$ pystun
NAT Type: Full Cone
External IP: <your-ip-here>
External Port: 54320
注意:
python 要使用2.x 版本
小技巧:
1. conda创建虚拟环境
➜ conda create -n python2 python=2
2. docker 使用 host 网络模式
➜ docker run -it --net=host --rm python:2.7 bash