【问题标题】:libvirt iptables rules disrupt port forwarding to my KVM VM'slibvirt iptables 规则中断到我的 KVM 虚拟机的端口转发
【发布时间】: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 规则。

【问题讨论】:

  • 我也想知道。

标签: iptables kvm libvirt


【解决方案1】:

我刚刚使用自己的规则启用了 NAT。我没有打扰任何默认的 libvirt 规则。

添加 NAT 就像 3 条 iptables 命令一样简单。 (其中 br0 是您的面向互联网的适配器(可以是 ppp0 或其他))

iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -A FORWARD -i br0 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i virbr0 -o br0 -j ACCEPT

【讨论】:

  • 我又一次学会了不要打扰使用 StackOverflow 或它的姐妹网站。如此多的不友善的人带着空虚的观点进行自我大旅行,以期虐待他人。我的问题被否决了 4 分,没有 cmets 或答案。再一次,像往常一样,我自己解决了我的问题。我从 StackOverflow 中得到的只是滥用。这是可悲的。为了他人的利益,我在此处发布此答案。我不会在这里发布更多问题。再见 StackOverflow。
  • 您的解决方案的问题是,libvirt/KVM/qemu 经常(如果不是总是)在执行某些操作时会破坏 iptables。我没有找到任何方法来阻止 libvirt/KVM/qemu 更改规则。 libvirt.org 上的手册也完全无法理解。多年来容易且广为人知的事情似乎变成了复杂的任务,包括使用任意语义编辑 XML,而没有任何文档。我的解决方案是一个脚本,它每分钟检查一次 iptables 并根据所有本地和远程 VM 的计算连接矩阵在需要时执行iptables-restore
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多