Bonjours,
J'ai recement installe plusieurs machine virtuelle sur mon serveur en utilisant ubuntu-vm-builder
Voici ma configuraton actuelle:server host1 (xxx.xxx.xxx.xxx) -> guest vm1 (192.168.0.3)
-> guest vm2 (192.168.0.4)
Je souhaiterais pouvoir redirectionner le port 2222 vers le port 22 de ma machine virtuelle 192.168.0.3, pour ainsi me connecter directement en SSH sur celle ci depuis l'exterieur.
J'ai essaye de faire cela en ajoutant la regle suivante a iptables:
~$sudo iptables --table nat --append PREROUTING --protocol tcp --destination xxx.xxx.xxx.xxx --destination-port 2222 --jump DNAT --to-destination 192.168.0.3:22
Mais j'ai un time out, probablement du aux regles ajoute par ubuntu-vm-builder lors de la creation des machines virtuelles. Voici la liste des regles actuelles:
~$sudo iptables -nL -v --line-numbers -t nat
Chain PREROUTING (policy ACCEPT 32446 packets, 3695K bytes)
num pkts bytes target prot opt in out source destination
1 7 420 DNAT tcp -- * * 0.0.0.0/0 xxx.xxx.xxx.xxx tcp dpt:2222 to:192.168.0.3:22
Chain INPUT (policy ACCEPT 8961 packets, 968K bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 350 packets, 23485 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 357 packets, 23905 bytes)
num pkts bytes target prot opt in out source destination
1 151 9060 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
2 99 7524 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
3 3 252 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
~$sudo iptables -nL -v --line-numbers
Chain INPUT (policy ACCEPT 14 packets, 1147 bytes)
num pkts bytes target prot opt in out source destination
1 454 30229 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 589K 2304M ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED
2 403K 24M ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
4 1 60 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 4 packets, 480 bytes)
num pkts bytes target prot opt in out source destination
Je suppose que les regles 4 et 5 de la chaine FORWARD sont responsables mais je ne suis pas sur de comment les remplacer, n'etant pas bien sur de comprendre l'ensemble de ces regles.
Un conseil?
# une image pour expliquer iptables et savoir ce qui se passe, et ou...
Posté par NeoX . Évalué à 10.
ca ne va peut-etre pas t'aider, mais quand j'ai un doute sur mes regles, je relis cette image pour savoir qui passe ou …
# Tentative de modifications
Posté par ben (site web personnel) . Évalué à 3.
J'ai supprime les regles suivantes dans la table nat mais sans resultat…
J'ai aussi essaye d'ajouter les regles suivantes:
iptables -t nat -I PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.0.3:22
sudo iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
Mais sans succe…
# Chemin aller, chemin retour
Posté par jben . Évalué à 3. Dernière modification le 10 décembre 2012 à 23:56.
Pour rediriger un port local p₁ sur une machine ayant l'ip n₁ (sur le réseau local) vers le port p₂ d'une ip n₂ (pour du tcp). J'utilise les deux règles suivantes :
Sinon les paquets ne pourront pas revenir.
[^] # Re: Chemin aller, chemin retour
Posté par NeoX . Évalué à 3.
il ne manquerait pas un 2 dans
[^] # Re: Chemin aller, chemin retour
Posté par jben . Évalué à 2. Dernière modification le 11 décembre 2012 à 00:35.
Tout à fait, merci. J'ai écrit ces commandes de tête, j'ai déjà vérifié dans le man que je me plantais pas sur le nom des arguments, mais vraissemblablement mon attention à ce point aura été préjudiciable à d'autres points.
[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
Ok, j'ai supprimé les règles que j'avais ajoutées et rentré les suivantes:
Ou xxx.xxx.xxx.xxx est l'adresse I.P. de mon serveur hôte, mais sans succès…
[^] # Re: Chemin aller, chemin retour
Posté par jben . Évalué à 2.
Quelle addresse ? Celle sur quel réseau ?
J'arrive pas à comprendre qui est le réseau de quoi.
Moi je vois deux réseaux :
Il y a combien de réseaux (y compris en comptant le reseau virtuel entre tes VM et ton hote) quels sont-ils ? Quels sont les addresses de l'hote sur chacun de ces reseaux ?
[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
Pardon, j'ai oublier de mentionner cela:
xxx.xxx.xxx.xxx est l'adresse de mon serveur hôte pour l’extérieur (mettons, 129.112.5.2 sur eth0) et 192.168.122.1 est son adresse pour communiquer avec les serveurs virtuels (virbr0).
virbr0 a les paramètres suivant:
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
Les règles iptables ci-dessus on était automatiquement générées lors de l'installation des machines virtuelles en utilisant vmbuilder, excepté la règle 1 de la chaîne PREROUTING que j'ai rajouté pour tenter de redirectionner le port 2222 du serveur hôte vers le port 22 d]un des serveur virtuel afin d'y héberger un repository git.
[^] # Re: Chemin aller, chemin retour
Posté par NeoX . Évalué à 3.
alors tes machines virtuelles doivent avoir une IP dans le reseau 192.168.122.0/24
et tu ne devrais plus avoir besoin des regles que nous avons ajouter puisque les bonnes regles etaient deja presente.
sinon, ton SNAT doit se faire avec 192.168.122.1
[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
Houla, oui, grosse erreur de ma part:
Je recapitule car je m'étais embrouillé :
Voici ma configuration actuelle:
server host1 (192.168.122.1/xxx.xxx.xxx.xxx) -> guest vm3 (192.168.122.203)
-> guest vm4 (192.168.122.204)
Ou:
192.168.122.1
est l'adresse sur virbr0 etxxx.xxx.xxx.xxx
pour eth0Les règles iptables sont les même que ci-dessus, je me suis effectivement embrouille avec les adresses pour le réseau des serveurs virtuels.
Milles excuses…
[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
Maintenant, si je modifie les règles comme suggéré précédemment par jben et NeoX:
sudo iptables -t nat -A POSTROUTING -p tcp --dport 22 -d 192.168.122.203 -j SNAT --to 192.168.122.1
sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.122.203:22
J'obtiens un
ssh: connect to host xxx.xxx.xxx.xxx port 2222: Connection refused
Cela peut il être du aux règles ajoutées automatiquement lors de la génération des machines virtuelles par vmbuilder ?
[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
OK, j'ai finalement réussi, merci a tous pour m'avoir guide, pour information voici les règles iptables:
J'ai donc rajoute les règles suivantes:
Et j'ai supprime les règles 4 et 5 de la chaîne FORWARD de la table filter
Je pense pouvoir faire plus finement maintenant (en bloquant le trafic sauf pour le serveur virtuel hébergeant le serveur SSH).
Merci encore a tous!
[^] # Re: Chemin aller, chemin retour
Posté par jben . Évalué à 3.
Merci, ça fait plaisir d'être utile.
Toutefois je m'interroge sur cette regle :
Normalement il y a rien qui passe dans
INPUT
sur le port 2222 sur l'hôte, normalement ça devrait être intercepté parPREROUTING
et envoyé versFORWARD
. Donc à mon avis ça ne sert à rien. (Et ça ne sert d'autant plus à rien que la politique finale estACCEPT
)[^] # Re: Chemin aller, chemin retour
Posté par ben (site web personnel) . Évalué à 2.
Tout a fait, je l'ai supprimée, merci encore…
[^] # Re: Chemin aller, chemin retour
Posté par NeoX . Évalué à 3. Dernière modification le 11 décembre 2012 à 10:13.
meme question que jben.
d'apres tes regles iptables, tes machines virtuelles sont en 192.168.0.0/24
c'est etrange car tu as un reseau 192.168.122.0/24, avec des regles iptables bien definies,
qui ressemble beaucoup plus au reseau de machine virtuelle que je croise habituellement.
tu es sur que tu ne t'es pas melangé les pinceaux entre machine/IP reelle (192.168.0.0/24) et machine/IP virtuelle (192.168.122.0/24) ?
# Pourquoi passer sur le port 22 ?
Posté par mazarini . Évalué à 2.
Bonjour,
Si la connexion arrive sur le port 2222, il serait plus simple paramétré le port d'écoute de ton serveur ssh sur le port 2222 également.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.