【发布时间】:2015-06-04 21:49:51
【问题描述】:
当我清除 IPtables 并添加以下规则时,传入连接可以毫无问题地连接到我的 KVM 虚拟机的 1234 端口。
-A PREROUTING -i br0 -p tcp -m tcp --dport 1234 -j DNAT --to-destination 192.168.122.194:1234
-A FORWARD -d 192.168.122.194/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 1234 -j ACCEPT
-A FORWARD -s 192.168.122.194/32 -p tcp -m tcp --sport 1234 -j ACCEPT
-A FORWARD -d 192.168.122.194/32 -p tcp -m tcp --dport 1234 -j ACCEPT
但我也希望 NAT 在我的 KVM 虚拟机中工作。默认情况下,libvirt 设置了一些规则,为我的虚拟机提供 NAT。但是,当我尝试将 SIGHUP 发送到 libvirt(这就是您要求它将其规则添加到 iptables 的方式)时,它会向 iptables 添加以下规则,这会破坏我在上面指定的端口转发。
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
我尝试过手动运行这些命令。我可以运行所有 FORWARD 和 OUTPUT 命令,它们不会破坏我的端口转发。但是我不能手动运行任何 POSTROUTING 命令。我收到一条错误消息:“该名称没有链/目标/匹配。”
*上面最后一个灰色部分中的这些 libvirt iptables 规则是通过运行 iptables-save 并确认端口转发正常工作,然后向 libvirt 发送 SIGHUP,确认端口转发被破坏,然后再次运行 iptables-save 并运行 diff 获得的在两个输出上查找 libvirt 添加了哪些新的 iptables 规则。
【问题讨论】:
-
我也想知道。