Ouvrir les ports d'un domaine Xen en NAT
Lorsque Xen est configuré avec le pilote réseau NAT, il est possible d'utiliser iptables pour associer des ports des domU aux port du dom0. Ce guide vous aide à mettre en place ce réglage.
Ce guide est testé sur:
- Debian 5.0 Lenny
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Paramètres
Renseignez l'adresse IP du domaine ciblé par la règle NAT:
domUIP="10.0.0.1"
Renseignez le numéro de port concerné par la règle NAT:
domUPort=80
Remarque: Si vous le souhaitez, vous pouvez ouvrir une plage de ports:
# domUPort=49160-49299
Renseignez l'interface réseau source de la connexion (optionnel, par défaut, eth0 est utilisée):
# dom0Net="eth0"
Renseignez le protocole (optionnel, par défaut tcp):
# domUProto="udp"
Installation
Détectez le proxy de commande (command ou sudo):
cmdProxy='command'
command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'
Prérequis
Créez le fichier destiné à contenir les règles Iptables. Ces règles sont appliquées après le démarrage des interfaces réseaux:
if [ ! -e '/etc/network/if-up.d/iptables' ]; then command echo '#!/bin/sh # IpTables rules. # Purging prerouting rules before reloading them # iptables -t nat -F PREROUTING' \
| ${cmdProxy} tee '/etc/network/if-up.d/iptables' fi ${cmdProxy} chmod +x '/etc/network/if-up.d/iptables'
Autorisez le NAT avec iptables:
${cmdProxy} sed -i -e 's/[# ]*\(net\.ipv4\.conf\.default\.forwarding=\).*/\11/g' \ -e 's/[# ]*\(net\.ipv4\.ip_forward=\).*/\11/g' \ '/etc/sysctl.conf' ${cmdProxy} sysctl -p
Mise en place
Détectez l'adresse IP de l'interface réseau source:
test -z "${dom0Net}" && dom0Net="eth0"
dom0IP=$(command ifconfig ${dom0Net} \
| command grep "inet adr" \
| command sed -e 's/.*inet adr:\([^ ]*\) .*/\1/')
Détectez le protocole:
test -z "${domUProto}" && domUProto="tcp"
Ouvrez le port s'il n'est pas déjà ouvert:
${cmdProxy} iptables -C PREROUTING -t nat \
-p ${domUProto} -d ${dom0IP} --dport $(echo ${domUPort} | command tr '-' ':') \
-j DNAT --to ${domUIP}:${domUPort} 2>'/dev/null' \
|| ${cmdProxy} iptables -A PREROUTING -t nat \
-p ${domUProto} -d ${dom0IP} --dport $(echo ${domUPort} | command tr '-' ':') \
-j DNAT --to ${domUIP}:${domUPort}
Ajoutez la règle à la configuration iptable permanante, de façon à ce qu'elle soit chargée à chaque démarrage du système:
cleanDomUPort=$(echo ${domUPort} | command tr '-' ':')
echo " # Opening port ${DOMU_PORT} from ${dom0IP} to IP address ${domUIP} :
command iptables -C PREROUTING -t nat -p ${domUProto} \\
-d ${dom0IP} --dport ${cleanDomUPort} \\
-j DNAT --to ${domUIP}:${domUPort} 2>'/dev/null' \\
|| command iptables -A PREROUTING -t nat -p ${domUProto} \\
-d ${dom0IP} --dport ${cleanDomUPort} \\
-j DNAT --to ${domUIP}:${domUPort}
" \ | ${cmdProxy} tee -a '/etc/network/if-up.d/iptables'