memo

2011-01-08

libvirt 用の仮想ネットワークを手で作る

libvirt にネットワークを作らせると、 0.0.0.0:53 で勝手に dnsmasq を立ち上げようとして、 すでにいる unbound 等の DNS キャッシュサーバーとぶつかってエラーになるとかうざったいなぁと思っている人用、 手動で仮想ネットワークを作る方法。

外部のネットワークへはホストをルーターにして NAT した上でアクセスする。

INTERFACE="virbr0"
IPADDR="192.168.122.1"
NETMASK="255.255.255.0"

# create bridge
/sbin/brctl addbr "${INTERFACE}"

# set IP address
/sbin/ip addr add "${IPADDR}/${NETMASK}" dev "${INTERFACE}"
/sbin/ip link set "${INTERFACE}" up

# add iptables rules to access DNS resolver
/sbin/iptables -N "RULE-FOR-${INTERFACE}"
/sbin/iptables -A "RULE-FOR-${INTERFACE}" -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A "RULE-FOR-${INTERFACE}" -m state --state NEW -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A "RULE-FOR-${INTERFACE}" -m state --state NEW -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -i "${INTERFACE}" -j "RULE-FOR-${INTERFACE}"

# NAT
/sbin/iptables -t nat -A POSTROUTING -s "${IPADDR}/${NETMASK}" -j MASQUERADE

# allow forward
/sbin/sysctl -w net.ipv4.ip_forward=1