嗨!
我正在将 libvirt 与 kvm 一起使用,效果很好。我希望使用主机防火墙锁定主机系统。到目前为止,我一直使用 shorewall 作为我选择的 iptables 管理实用程序。但这与 libvirt 的 iptables 管理相冲突。我使用 libvirt 为 kvm 客户端配置 NAT。Libvirt 使用 iptables 为该客户端设置 MASQ,效果很好。但只要 shorewall 启动,它就会刷新 iptables 并根据 shorewall 文件中的配置进行设置。然后我尝试将所有 libvirt iptables 规则“翻译”到 shorewall 中以防止丢失功能。但这只起到部分作用,而且无论如何都是一个丑陋的黑客行为。只要我使用 libvirt 为客户端更改网络配置,我也必须对 shorewall 进行更改。那么,保护主机系统以及使用 libvirt 管理 kvm 客户端网络的正确方法是什么?在 CentOS 世界中,libvirt 是否与防火墙相结合?再见!
答案1
也许您可以使用 libvirt 的钩子脚本。您编写一个 shell 脚本,libvirt 将在您的 VM 启动时立即执行该脚本。
/etc/libvirt/hooks/qemu
创建包含以下内容的文件:
#!/bin/bash
if [ "${1}" = "<the name of your vm>" ] ; then
VM_NAME=${1}
VM_IP=172.16.20.10
if [ "${2}" = "prepare" ] ; then
iptables -t nat -I POSTROUTING -s ${VM_IP} -o eth0 \
-m comment --comment "${VM_NAME} nat" -j MASQUERADE
elif [ "%{2}" = release" ] ; then
iptables -t nat -D POSTROUTING -s ${VM_IP} -o eth0 \
-m comment --comment "${VM_NAME} nat" -j MASQUERADE
fi
确保<the name of yout vm>
正确替换了 VM_IP 的值。使文件也可执行:chmod +x /etc/libvirt/hooks/qemu
。
现在,每次 libvirt 启动您的 VM 时,它都会准备 NAT 配置,并且在 VM 停止后,将取消 NAT 配置。