Centos

設置主機防火牆,以便虛擬機從 dnsmasq 獲取動態 IP

  • December 6, 2009

當防火牆執行時,虛擬機 (KVM/libvirt) 無法從執行在 CentOS 主機上的 libvirt 啟動的 dnsmasq 獲取動態 IP 地址。當我關閉防火牆 (CSF) 時,虛擬機會獲得一個 IP。對於那些遇到過類似情況的人,什麼對你有用?

我在 csfpost.sh 中嘗試了自定義 iptables 規則(輸入輸出和轉發)。

/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

我忽略了哪些重要步驟?

在確定如何打開一切之後…

/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

引用自:https://serverfault.com/questions/90455