保持NAT后的源IP

直到今天,我用一个便宜的路由器,所以我可以分享我的互联网连接,并保持一个networking服务器,同时使用NAT。 用户IP($ _SERVER ['REMOTE_ADDR'])很好,我看到用户的A类IP。

但是随着stream量每天都在增长,我不得不安装Linux服务器(Debian)来共享我的Internet连接,因为我的旧路由器无法保持stream量。 我通过使用NAT的IPTABLES共享互联网,但是现在,在将端口80转发到我的networking服务器之后,现在我看不到我的网关IP(Linux内部IP)作为任何用户的IP地址。

如何解决这个问题?


我编辑了我的post,所以我可以粘贴我目前使用的规则。

#!/bin/sh #I made a script to set the rules #I flush everything here. iptables --flush iptables --table nat --flush iptables --delete-chain iptables --table nat --delete-chain iptables -F iptables -X # I drop everything as a general rule, but this is disabled under testing # iptables -P INPUT DROP # iptables -P OUTPUT DROP # these are the loopback rules iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # here I set the SSH port rules, so I can connect to my server iptables -A INPUT -p tcp --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT # These are the forwards for 80 port iptables -t nat -A PREROUTING -p tcp -s 0/0 -d xx.xx.xx.xx --dport 80 -j DNAT --to 192.168.42.3:80 iptables -t nat -A POSTROUTING -o eth0 -d xx.xx.xx.xx -j SNAT --to-source 192.168.42.3 iptables -A FORWARD -p tcp -s 192.168.42.3 --sport 80 -j ACCEPT # These are the forwards for bind/dns iptables -t nat -A PREROUTING -p udp -s 0/0 -d xx.xx.xx.xx --dport 53 -j DNAT --to 192.168.42.3:53 iptables -t nat -A POSTROUTING -o eth0 -d xx.xx.xx.xx -j SNAT --to-source 192.168.42.3 iptables -A FORWARD -p udp -s 192.168.42.3 --sport 53 -j ACCEPT # And these are the rules so I can share my internet connection iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth0:1 -j ACCEPT 

如果我删除MASQUERADE部分,我会看到我真实的IP,同时用PHP回显,但我没有互联网。 如何做,有互联网,并看到我的真实IP端口转发?

** xx.xx.xx.xx – 是我的公开IP。 为了安全起见,我把它藏了起来。

解决了我自己的神秘,但感谢那些帮助到现在。 研究了更多的iptables手册页,并来到一个解决scheme,似乎按我的意愿工作:

将包含MASQUERADE (iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE)的行replace为以下行:

 iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j SNAT --to-source XX.XX.XX.XX 

现在我可以看到我的真实IP地址,也有互联网。

* XX.XX.XX.XX =公共IP

如果你使用了伪装规则( -j MASQUERADE ),这是正常的行为。 我认为你使用的是“目标networking地址转换”( -j DNAT ),例如:

 /sbin/iptables -t nat -A PREROUTING -p tcp -d {$PUBLICADDRESS} --dport 80 -j DNAT --to {$WEBSERVER}:80 

当然,以上规则可能会或可能不会运行,这取决于您的其他规则。 您应该至less用您当前拥有的与Web服务器相关的规则更新您的问题。