Lier un DomU Xen en NAT à une adresse IP publique
Contrairement au mode bridge qui associe une adresse IP publique à un DomU, le mode NAT permet d'associer une IP à plusieurs DomU suivant le port demandé. L'inconvénient du mode NAT, c'est que tous les DomU ont la même IP publique. Ce guide explique comment faire en sorte qu'un DomU spécifique ait une IP publique différente.
Ce guide est testé sur:
- Debian 6.0 Squeeze
Paramètres
Renseignez le nom de l'interface réseau à lier au DomU:
NET_DEV="eth0:1"
Renseignez le nom du DomU à lier:
DOMU="domu.domain.xen"
Installation
Créez le script vif-nat spécifique à l'interface:
CLEAN_NET_DEV=$(command echo ${NET_DEV} | command tr ':' '-')
command cp -a '/etc/xen/scripts/vif-nat' "/etc/xen/scripts/vif-nat-${CLEAN_NET_DEV}"
Obtenez l'adresse IP de l'interface réseau:
NET_IP="$(command ifconfig "${NET_DEV}" \
| command grep 'inet ' \
| command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"
Obtenez le nom de l'interface réseau réelle (dans le cas où ${NET_DEV} est un alias):
REAL_NET_DEV=$(command echo ${NET_DEV} | command sed -e 's/:.*$//')
Modifiez le script pour insérer les règles iptables spécifiques au DomU:
command sed -i \
-e "/proxy_arp/a\\
iptables -t nat -I POSTROUTING -j SNAT -o ${REAL_NET_DEV} --to-source ${NET_IP} -s \${ip}" \
-e "/ifconfig.*down/a\\
iptables -t nat -D POSTROUTING -j SNAT -o ${REAL_NET_DEV} --to-source ${NET_IP} -s \${ip}" \
"/etc/xen/scripts/vif-nat-${CLEAN_NET_DEV}"
Modifiez le fichier de configuration du DomU pour utiliser le nouveau script:
CONFIG_FILE="$(command find '/etc/xen' -name "${DOMU}.cfg")"
command cp "${CONFIG_FILE}" "${CONFIG_FILE}.orig"
if [ -e "${CONFIG_FILE}" ]; then
command sed -i \
-e "s/script=[^,]*,//g" \
-e "s/^\(vif[^']*'\)\(.*\)$/\1script=vif-nat-${CLEAN_NET_DEV},\2/" \
"${CONFIG_FILE}"
fi
Remerciements
- Merci à gauthk pour sa réponse au sujet Xen et réseau (fr).
- Merci à pasik sur ##xen pour son aide.