我有一个带有静态 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