Vous êtes ici : Accueil / Debian GNU/Linux / Système / Xen / Ouvrir les ports d'un domaine Xen en NAT

Ouvrir les ports d'un domaine Xen en NAT

Par Pierre-Yves Landuré Dernière modification 31/03/2014 21:51

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'