使用 iptables 将外部 IP NAT 到本地服务器

使用 iptables 将外部 IP NAT 到本地服务器

我有一个带有静态 IP 的 adsl 连接(比方说 1.1.1.1)。我的debian防火墙通过ppp连接互联网,IP直接分配给防火墙; ppp0 Link encap:Point-to-Point Protocol inet addr:1.1.1.1 P-t-P:<IP-DOES-NOT-MATTER> Mask:255.255.255.255

我使用 debian 作为防火墙/路由器,并使用基本的 iptables 脚本将我的本地客户端连接到 Internet; iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE iptables --append FORWARD --in-interface eth1 -j ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward

我为外部托管域创建了子域记录: sub.example.com IN A 1.1.1.1

我可以使用 iptables 将 http 连接从互联网 DNAT 到我的本地服务器: iptables --table nat --append PREROUTING -i ppp0 --dest 1.1.1.1 -p tcp --dport 80 -j DNAT --to 192.168.1.101:80

我也希望我的本地客户能够到达sub.example.com无需任何额外配置。

我在防火墙中尝试过的 iptables 命令(没有起作用) iptables --table nat --append PREROUTING --in-interface eth1 --dest 1.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.101:80 iptables -t nat --append OUTPUT --dest 1.1.1.1 -p tcp --dport 80 -j DNAT --to-dest 192.168.1.101

第一个命令将数据包路由到服务器,但我没有收到回复(服务器上未配置 1.1.1.1)。第二个什么也没做。

有没有办法用 iptables 来实现这一点?

答案1

在 @wurtel 的回答之后,我一起使用 DNAT 和 SNAT 并且它起作用了。谢谢你:)

命令是: iptables --table nat --append PREROUTING --in-interface eth1 --dest 1.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.101:80 iptables --table nat --append POSTROUTING --out-interface eth1 -source 192.168.1.0/24 --dest 192.168.1.101 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1

相关内容