当防火墙运行时,虚拟机 (KVM/libvirt) 无法从 CentOS 主机上运行的 libvirt 启动的 dnsmasq 获取动态 IP 地址。当我关闭防火墙 (CSF) 时,虚拟机会获取 IP。对于那些遇到过类似情况的人,您有什么办法吗?
我已经在 csfpost.sh 中尝试了自定义 iptables 规则(INPUT OUTPUT 和 FORWARD)。
/sbin/iptables -A INPUT -j ACCEPT -s $SUBNET_PRIVATE -i $IF_TUN_0
/sbin/iptables -A OUTPUT -j ACCEPT -s $SUBNET_PRIVATE -o $IF_TUN_0
/sbin/iptables -A FORWARD -i $IF_TUN_0 -o $IF_ETH_0 -j ACCEPT
/sbin/iptables -A FORWARD -i $IF_ETH_0 -o $IF_TUN_0 -j ACCEPT
我已尝试过 csf.allow 中的条目。
#allow dnsmasq to serve dynamic IPs to virtual machines on local subnet
tcp:in:d=53:s=10.x.y.0/24
udp:in:d=53:s=10.x.y.0/24
tcp:out:d=53:s=10.x.y.0/24
udp:out:d=53:s=10.x.y.0/24
我忽略了哪些重要步骤?
答案1
在确定如何打开一切之后……
/sbin/iptables -A INPUT -j ACCEPT -p all -s 0/0 -i $IF_TUN_0
/sbin/iptables -A OUTPUT -j ACCEPT -p all -s 0/0 -o $IF_TUN_0
线索来自/var/log/messages。端口67和68被阻止。
# allow broadcasted dhcp requests, IP is unknown hence all zero'd
/sbin/iptables -A INPUT -j ACCEPT -p udp -d 0/0 -i $IF_TUN_0 --dport 67 --sport 68
# allow dhcp renewal requests, the IP is known at this point
/sbin/iptables -A INPUT -j ACCEPT -p udp -d $IP_PRIVATE_HOST -i $IF_TUN_0 --dport 68 --sport 67
# allow dhcp acks
/sbin/iptables -A OUTPUT -j ACCEPT -p udp -s $IP_PRIVATE_HOST -o $IF_TUN_0 --dport 68 --sport 67
# allow dhcp renewal response
/sbin/iptables -A OUTPUT -j ACCEPT -p udp -s $IP_PRIVATE_HOST -o $IF_TUN_0 --dport 67 --sport 68