Mythologyli / qBittorrent-NAT-TCP-Hole-Punching

qBittorrent NAT Hole Punching/qBittorrent NAT 打洞
https://myth.cx/p/qbittorrent-nat-tcp-hole-punching/
MIT License
190 stars 24 forks source link

关于iptables的疑问 #7

Closed DravenTJU closed 1 year ago

DravenTJU commented 1 year ago

首先,非常感谢作者制作的此脚本。 关于update.sh中端口转发部分我有一些疑问,希望可以得到一些解答,谢谢。

背景情况: 电信 IPv4 NAT1,硬主路由192.168.68.1,Debian虚拟机192.168.68.11,NAS 192.168.68.244,希望通过此脚本使用内网端口45678进行局域网内端口转发实现NAT打洞。

我修改了脚本中的iptables命令:

iptables -t nat -I PREROUTING -d 192.168.68.11 -p tcp --dport 45678 -j DNAT --to-destination 192.168.68.244:21581

发现此时不管是tcping 192.168.68.11:45678,还是tcping 公网IP:45678,都不通。 然后我增加了下面一行:

iptables -t nat -I POSTROUTING -d 192.168.68.244 -p tcp --dport 21581 -j SNAT --to 192.168.68.11

这样tcping就通了。

我的问题是: 1、本机端口间转发不需要POSTROUTING,而不同机器之间端口转发需要POSTROUTING,是有这样的差别吗?(理论上PT不是只传入目标IP端口进来,然后直接连目标IP端口就ok吗,为什么还要走中转返回去呢 2、PT跑大流量的时候,这种局域网内端口转发对中转机器的性能要求高吗?

再次感谢~

Mythologyli commented 1 year ago

关于第一个问题,可以看看这两篇: https://unix.stackexchange.com/questions/322879/port-forward-why-is-iptables-with-postrouting-rule-required https://unix.stackexchange.com/questions/21967/difference-between-snat-and-masquerade

关于第二个问题,应该是有一定性能要求的