iptables 不会从 WAN 转发到虚拟机

iptables 不会从 WAN 转发到虚拟机

我有一台像网关一样工作的机器,有两个网络接口:

  • eth0局域网:192.168.1.0/24
  • eth1WAN : XXX.XXX.XXX.XXX(我的公共IP)

这台机器在 virtualbox 上有 3 个 VM guest。所有这些都具有桥接网络并具有由我们的 DNS 提供的静态 IP。

我有以下 iptables

*filter
    -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -i eth0 -o eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# Rules a webserver VM
*nat
    -A POSTROUTING -o eth1 -j MASQUERADE
    -A PREROUTING -d XXX.XXX.XXX.XXX/32 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100
    -A POSTROUTING -s 192.168.1.100/32  -j SNAT --to-source XXX.XXX.XXX.XXX

我可以从 LAN 访问虚拟机,但是当我尝试从 WAN 访问它们时,它不起作用。怎么了?

答案1

假设过滤器表中 FORWARD 的默认策略是 DROP 是否正确? (如果不是,这两个过滤规则将毫无意义,因为无论如何你都会接受一切。)

如果这个假设是正确的,那么您的问题是缺少将新数据包转发到虚拟机的 ACCEPT 规则。添加此规则:

iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

顺便说一句,来自虚拟机的数据包的 SNAT 规则是多余的 - 您已经伪装了通过 eth1 发出的所有数据包。

相关内容