iptables端口转发 回首页 Alice想向Bob建立TCP连接,但是因为种种原因不能直接建立连接。 如果有一台机器Carol和两边都没有连接障碍,那么就有可能通过Carol帮助从Alice向Bob建立连接。 在Carol上开一个 daemon 监听一个特定端口,然后把Alice发过来的数据都原封不动的转发给Bob, -A PREROUTING -p tcp -m tcp --dport 1001 -j DNAT --to-destination Bob:2002 -A POSTROUTING -d Bob -p tcp -m tcp --dport 2002 -j SNAT --to-source Carol (如果Carol是Bob的网关,那么第二条iptables规则是不需要的) 这样就把发给 Carol:1001 的数据转发给 Bob:2002 了。 ## Web Server 端口映射一定要在 Iptables NAT透明代理指令前面,否则内网用户将无法通过公网IP或域名访问内网的Web服务器!## # 假设: # Bob的情况: # 网段: 192.168.10.0/24 # IP: 192.168.10.16 # Carol的情况: # Carol.eth0: 192.168.0.53 # Carol.eth1: 192.168.10.53 # Alice能连接Carol.eth0 # Carol.eth1能连接Bob ################################################################################### ### squid 透明代理 #iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to a.b.c.d ### 3389 ### 将发到Carol.eth0的端口3389的包,转发到Bob:3389 # iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -j ACCEPT # iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination Bob:3389 iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp --dport 3389 -j DNAT --to Bob ### Bob:3389的包,经Carol.eth1返回 ## iptables -A INPUT -d Bob -p tcp -m tcp --dport 3389 -i eth0 -j ACCEPT iptables -t nat -A POSTROUTING -d Bob -p tcp --dport 3389 -j SNAT --to Carol.eth1 # 一些人经常忘了打开FORWARD链的相关端口,特此增加: iptables -A FORWARD -o eth1 -d Bob -p tcp --dport 3389 -j ACCEPT iptables -A FORWARD -i eth1 -s Bob -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT ## 10022 ### 将发到Carol.eth0的端口10022的包,转发到Bob:10022 # iptables -A INPUT -p tcp --dport 10022 -m state --state NEW -j ACCEPT iptables -A INPUT -d Bob -p tcp -m tcp --dport 10022 -i eth0 -j ACCEPT ### 进: ### iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 10022 -j DNAT --to-destination Bob:10022 iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp --dport 10022 -j DNAT --to Bob ### 出: ### Bob:10022的包,经Carol.eth1返回 # ### iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -p tcp --dport 10022 -j SNAT --to Carol.eth1 iptables -t nat -A POSTROUTING -d Bob -p tcp --dport 10022 -j SNAT --to Carol.eth1 # 一些人经常忘了打开FORWARD链的相关端口,特此增加: iptables -A FORWARD -o eth1 -d Bob -p tcp --dport 10022 -j ACCEPT iptables -A FORWARD -i eth1 -s Bob -m state --state ESTABLISHED -p tcp --sport 10022 -j ACCEPT # 为80和443端口做tcp代理 # # iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination Bob # iptables -t nat -A PREROUTING -d Carol.eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination Bob ### 如果内网也想通过Carol访问内部的网站,还需要一条规则. #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d Bob -p tcp -m tcp --dport 80 -j SNAT --to-source Bob #网关IP:端口 #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d Bob -p tcp -m tcp --dport 443 -j SNAT --to-source Bob #网关IP:端口 ###################################################################################