我想将内部 IP 地址转发到外部 IP 地址。
所以我的做法是这样的:
echo 1 > /proc/sys/net/ipv4/ip_forward
然后我使用 iptables:
iptables -t nat -A PREROUTING -s 192.168.1.x -j DNAT --to-destination 95.211.y.z
iptables -t nat -A POSTROUTING -j MASQUERADE
在此之后,当我 ping 192.168.1.x 时,我希望能够到达 95.211.yz 的服务器。换句话说,我希望所有指向内部 IP 的流量都能转换为该外部 IP,但这并没有发生。
我哪里错了?
答案1
在这种情况下,不一定,例如,您在 ICMP 客户端中看到的内容就是实际发生的情况。DNAT 连接将按预期工作,但 ICMP 客户端将继续向您显示私有 IP 地址。
确保允许目标服务器向您的客户端/网络做出响应。
http://www.mad-hacking.net/documentation/linux/security/iptables/nat.xml
答案2
我假设您的意思是您希望能够使用私有 IP 空间中的地址从 LAN 上的主机访问 WAN 上的主机。如果这不正确,那么这个答案可能没有帮助。
您需要将到达 LAN 接口的流量与设置为要重新映射的私有地址的目标进行匹配 ( 192.168.1.5
)。您还需要MASQUERADE
将离开 WAN 接口的流量也匹配。
iptables -t nat -A PREROUTING -i ethLAN -d 192.168.1.5 -j DNAT --to-destination 95.211.1.1
iptables -t nat -A POSTROUTING -o ethWAN -j MASQUERADE
您的主要错误是 应该-s
是-d
,但您还应该指定接口。您还需要确保您选择的私有空间地址不与您 LAN 上的任何网络位于同一子网中。这是必要的,因为如果您使用同一子网上的地址,则原始主机将发出 ARP 请求,而不是沿默认路由发送数据包。没有人会回答 ARP 请求,您尝试创建的路径将不起作用。