iptables 简单转发设置问题

iptables 简单转发设置问题

我在 Linux 命名空间中的主机(充当防火墙)上运行 iptables,该主机只有一个网络接口:h2-eth1(具有 IP 和 MAC 地址)

我已经设置了交换机,将所有数据包转发到防火墙,并将从防火墙返回的数据包转发到内部网络。现在,我继续进行简单的健全性检查,看看一切是否正常。我在防火墙上运行以下命令:

$sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
$iptables -P INPUT ACCEPT
$iptables -P FORWARD DROP
$iptables -P OUTPUT ACCEPT

$iptables -F INPUT 
$iptables -F FORWARD 
$iptables -F OUTPUT 
$iptables -F -t nat

$iptables -A FORWARD -i h2-eth1 -o h2-eth1 -j ACCEPT

现在,我从外部 ping 一个内部主机。我看到 ICMP 数据包发往防火墙,但没有从防火墙返回。因此,我iptables -nvL在防火墙上运行,看到所有表(INPUT、OUTPUT 和 FORWARD)的数据包计数均为 0。那么,数据包没有到达 iptables 是因为它们与 NIC 的 IP 地址不匹配吗?我该如何纠正这个问题?

答案1

通过设置 DNAT。您目前所做的就是将所有内容传递到防火墙上的 INPUT 链。您不能只是“从外部 ping 内部主机”,因为外部对内部网络一无所知,因为内部地址不是公开的。

示例:在 LAN 中托管一个 Web 服务器,您希望 WAN(Internet)能够看到它

iptables -t nat -A PREROUTING -p tcp -d <FIREWALL EXTERNAL IP> --dport 80 -j DNAT --to-destination <INTERNAL HOST IP>:80

这样防火墙看起来好像在托管一个网络服务器,但实际上它会将所有内容转发到内部服务器。您必须对要转发到内部网络的每个服务和协议执行此操作。

相关内容