Problème réseau avec iptables, route et machine virtuelle

Résolu/Fermé
silverangel958 - Modifié par silverangel958 le 15/08/2013 à 18:15
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 - 21 août 2013 à 19:46
Bonjour,

Je suis plutôt débutant dans tout ce qui est Linux et sa couche réseau- Raison pour laquelle je poste ici, dans l'espoir que quelqu'un puisse m'aider.
Sachez tout d'abord que j'ai recherché de nombreux articles sur Internet pour essayer de trouver la solution seul. Je viens pas ici les mains vides.

J'ai loué un Linux Ubuntu (10.04 LTS). C'est une version DESKTOP, j'utilise X2go pour me connecter à distance. Il est, donc bien évidemment, relié à Internet.

La carte réseau locale d'Ubuntu s'appelle eth0, voici sa configuration IP statique;
Vitesse : 1000 Mb/s
Pilote : ATL1E
Sécurité : Aucun
IPv4 : 192.168.1.240
IPv6 : Désactivé
Masque de sous-réseau : 255.255.255.0
Passerelle : 192.168.1.1
DNS 1 : 192.168.1.1

J'ai activé le reroutage IPv4 dans /etc/sysctl.conf (net.ipv4.ip_forward = 1)
J'ai activé le reroutage avec la commande sysctl -p

J'ai installé iptables et VirtualBox.

J'ai appliqué les différentes modifications apportées au noyau par iptables et Virtualbox avec la commande update-initramfs -u

Après tout ça, j'ai redémarré le système distant puis je me suis employé installer Windows XP SP3 dans une machine virtuelle, où va tourner le logiciel serveur qui m'intéresse.

Après l'installation, j'ai procédé aux modifications suivantes sur la carte réseau de la machine virtuelle;

Type de réseau : Réseau privé hôte (vboxnet0).
Mode de promiscuité : Tout autoriser

Puis les paramètres suivants ont étés appliqués à la carte réseau dans Windows;

Type d'adresse : Attribution auto. par serveur DHCP
Adresse IP : 192.168.56.101
Masque de sous-réseau : 255.255.255.0
Serveur DHCP : 192.168.56.100
Serveur DNS : Aucun


Lorsque je tape la commande wget 192.168.56.101 dans le terminal Ubuntu, je télécharge bel et bien la page d'accueil du mini-site hébergé. J'en conclus que la communication entre la machine virtuelle et l'hôte est okey.


Il ne me restait plus qu'a dévier les communication entrantes et sortantes du port TCP 80 de mon Ubuntu vers ma machine virtuelle- C'est là que ça coince totalement, je ne maîtrise pas et comprends pas comment fonctionne iptables.


Je me suis basé sur les articles suivants pour m'aider ;

* http://linux.about.com/od/commands/l/blcmdl8_route.htm
* http://forum.slicehost.com/index.php?p=/discussion/2497/iptables-redirect-port-80-to-port-8080/p1
* http://www.croc-informatique.fr/2009/10/redirection-de-port-ou-port-forwarding-avec-iptables/
* http://forum.hardware.fr/hfr/OSAlternatifs/debian-sarge-interfaces-sujet_48707_1.htm
* http://www.admin6.fr/2012/03/regles-de-routage-simple-avec-iptables/
* http://www.debian-fr.org/rediriger-le-traffic-avec-iptables-t22344.html
* http://itsecureadmin.com/wiki/index.php/Setup_a_Home_Router_using_IPTables
* http://blog.inforeseau.com/2010/10/firewall-iptables-rediriger-un-port-vers-un-autre
* http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-fr-4/s1-firewall-ipt-fwd.html
* http://www.yolinux.com/TUTORIALS/LinuxTutorialIptablesNetworkGateway.html


Voici le contenu de mon script pour activer les redirections de ports;



sudo iptables --flush
sudo iptables --table nat --flush
sudo iptables --delete-chain
sudo iptables --table-nat --delete-chain

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 80 -j ACCEPT
sudo iptables -A FORWARD -i vboxnet0 -j ACCEPT
sudo iptables -A FORWARD -o vboxnet0 -j ACCEPT

sudo iptables -t nat -A PREROUTING -j DNAT -i eth0 -p tcp --dport 80 --to 192.168.56.101:80
sudo iptables -t nat -A PREROUTING -j DNAT -i eth0 -p tcp --dport 80 --to-destination 192.168.56.101:80

sudo iptables -t nat -A POSTROUTING -j MASQUERADE -o eht0 -p tcp --dport 80 -d 192.168.56.101



Malgré ces commandes, je n'ai jamais été en mesure de contacter le serveur web depuis l'extérieur. Je précise néanmoins que les ports sont ouverts dans le modem.

Si quelqu'un pouvait m'aider, je lui en serait très reconnaissant.

Cordialement.




PS: Ubuntu Desktop était une solution quasi-gratuite contrairement à un hébergement Windows Server 2008 R2 où il faut payer la licence. N'ayant pas trop de moyens pour le moment, j'ai donc décidé de mettre de coté Windows où j'aurais facilement réglé cette question seul...
A voir également:

9 réponses

D£v91 Messages postés 390 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 15 avril 2014 100
16 août 2013 à 14:30
Bonjour,
Quel est le logiciel que tu veux utiliser sous XP?
Tu n'as pas trouvé un équivalent sous linux?

Sinon essai directement de paramétrer virtual box en bridge, peut être que ça simplifiera la chose.
0
Hello.

Malheureusement non, c'est un logiciel- ou plus particulièrement un programme serveur de jeu conçu par Microsoft datant des années 2000; Microsoft Freelancer.
C'est suffisamment âgé pour être partiellement incompatible Windows 7 et complètement incompatible Windows 8.

Pour ce qui est du réseau de VirtualBOX, il m'est impossible de faire autrement; je n'ai droit qu'à une seule adresse IP- Je ne peux donc pas capturer une autre adresse IP sur le réseau de la machine hôte.

Mon objectif est de ponter le port UDP et TCP 2302 ainsi que le port TCP 80 et 8080 de la machine virtuelle sur la machine hôte. Comme ça, si je contacte le serveur (Machine hôte) depuis l'extérieur, je tombe en fait sur la machine virtuelle.

Qui, soit-dit en passant, j'ai réussi à faire durant l'espace d'un instant!... Le problème c'est que je n'ai pas réussi à le reproduire après le redémarrage de la machine hôte (iptables est réinitialisé lors du redémarrage de la machine). Même malgré mes tentatives de récupération des milliers de commandes que j'ai testées via le fichier .bash_history, impossible de réactiver ce pontage.
0
D£v91 Messages postés 390 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 15 avril 2014 100
16 août 2013 à 15:15
A tout hasard tu as désactivé le Pare-Feu Windows ?
Parceque la je ne vois pas d'où pourrais venir le problème
0
silverangel958
16 août 2013 à 15:56
Rhaaaa! J'ai cliqué sur le bouton vert au lieu du bouton Valider! J'ai dû tout réécrire! Grmlll!

Bref. Je disais...

Le pare-feu Windows XP est bien connu pour ne pas bloquer grand chose... :D

Mais oui. Le pare-feu a été désactivé puis son service supprimé (sc delete MpsSvc).
Il en est de même pour de nombreux services comme le Centre de sécurité, Registre à distance, Avertissements, Audio Windows, Terminal Server, Spooler d'impression, Thèmes, etc............
Mon Windows est vraiment lite. Moins de 100Mb de RAM en fin de chargement- De plus, ce n'est pas un problème de droit d'accès aux fichier; le Windows est installé sur un VDD de 30 Gb formaté en FAT32. Il n'y a pas de gestion de droits d'accès aux fichiers.

À mon avis, c'est bel et bien mon script iptables qui est foireux. Comme j'ai indiqué, ça a fonctionné l'espace d'un instant après mes centaines de tentatives... C'est après le redémarrage de l'hôte que ça a cessé de fonctionner, lorsque iptables a été réinitialisé (iptables ne sauvegarde pas les paramètres, il faut tout reconfigurer au démarrage- soit manuellement, soit avec un script).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
install tcpdump sur linux et tapes :

tcpdump -ni eth0

lance ta requete et passe nous la trace reseau, ce sra plus imple pour debuguer.
0
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
17 août 2013 à 11:02
Hello,

Ton script n'est pas foireux, c'est juste que tu n'utilises pas le bon type d'interface ... Prends un peu de recul et demande toi ce que veux dire "host-only adapter".

Essayes plutôt d'utiliser une interface de type NAT et de créer une règle de NAT directement via virtualbox et non iptables. Normalement, ça devrait mieux marcher.
0
Hello.

Merci pour vos réponses.

@cocoche95
Je sais bien que host-only permet, théoriquement, juste la communication exclusive entre l'hôte et la VM. Tu penses bien que j'ai testé les différents types de réseaux entre Bridged, Internal, NAT et Host Only.

Le bridged mode ne fonctionne pas; je n'ai pas droit à une seconde adresse IP sur le réseau local de l'hébergeur. De plus, le port ouvert sur la nouvelle IP ne serait pas «nattée», et par conséquent, inaccessible depuis l'extérieur.

Le Internal ne permet que la communication entre les VMs mais pas l'hôte.

NAT, j'ai beau essayer d'ajouter la règle NAT port TCP 80 de 127.0.0.1 sur TCP 80 à 192.168.56.101 mais la communication ne fonctionne pas (et j'ai bien demandé si les ports étaient ouverts; on m'a répondu qu'il n'y avait aucun port bloqué- C'est ce qu'ils appellent le Exposed Host).

En gros, seul le Host-Only Adapter m'a permis de communiquer dans les deux sens avec la machine virtuelle et l'hôte, et permet également la communication entre ses deux machines.

Mes règles iptables ne semblent, elles, pas fonctionner.

Te vexes pas, je ne dit pas que tu te trompes, tu en sais sûrement plus que moi sur le monde de Linux (et c'est certain) mais ça a fonctionné l'espace d'un moment (jusqu'au reboot). Je souhaite juste que ça se refasse. :D

Bonne matinée! :)
0
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
Modifié par cocoche95 le 20/08/2013 à 20:31
Un petit lien vaut mieux qu'un copier-coller ;-)
http://blog.delacelle.com/post/2011/05/10/port-forwarding-sous-virtualbox-ssh-http-ftp/

Même deux !
http://blog.bayles.fr/post/2009/03/05/VirtualBox-c-est-genial
0
Un énorme merci!

Je tiens juste à préciser quelques éléments pour les gens qui seraient dans la même problématique que moi;

1) iptables, en plus d'être extrêmement compliqué à configurer, ne sert absolument rien dans ce cas de figure.

2) Pour «natter» un port de la machine virtuelle vers la machine hôte, ces trois commandes, tapées DANS l'ORDRE, dans un terminal suffisent;

VBoxManage setextradata "Nom de votre VM" "VBoxInternal/Devices/Interface utilisée (e1000 ou pcnet)/0/LUN#0/Config/Nom_du_service/Protocol" TCP ou UDP

VBoxManage setextradata "Nom de votre VM" "VBoxInternal/Devices/Interface utilisée (e1000 ou pcnet)/0/LUN#0/Config/Nom_du_service/HostPort" Port d'accès sur l'hôte

VBoxManage setextradata "Nom de votre VM" "VBoxInternal/Devices/Interface utilisée (e1000 ou pcnet)/0/LUN#0/Config/Nom_du_service/GuestPort" Port d'accès sur la machine virtuelle

Exemple;
VBoxManage setextradata "windowsxp-srv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/Apache/Protocol" TCP

VBoxManage setextradata "windowsxp-srv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/Apache/HostPort" 8001

VBoxManage setextradata "windowsxp-srv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/Apache/GuestPort" 80


3) Il semblerait (et c'était la cause principale de mon problème car je n'étais pas au courant et qu'il n'y a aucune documentation sur ce problème...) que les ports classiques comme 123, 80, 445, 143, 25, etc... ne peuvent pas êtres utilisés sur la machine hôte... Même s'ils sont libres! (peut-être pour des raisons de sécurité?) Vous devez donc, par exemple, «natter» le port machine virtuelle 80 sur le port 8001 de la machine hôte via les commandes indiquées précédemment puis, dans votre routeur, «natter» le port d'entrée 80 sur le port 8001 de la machine hôte!

4) Il semblerait, encore une fois, que si la machine virtuelle est en activité ou même si elle est arrêtée mais que la fenêtre principale de VirtualBOX est ouverte, les commandes que vous tapez dans le terminal n'auront aucun effet et ne seront pas conservée lors que vous quitterez VirtualBox. (Probablement parce-que les fichiers de configurations de VirtualBox et de la machine virtuelle sont réécris) Veillez donc à éteindre la machine virtuelle et quitter complètement virtualbox avant de taper les trois commandes pour «natter» un port.

Encore un grand merci!

Sujet résolu.

Cordialement.
0
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
Modifié par cocoche95 le 21/08/2013 à 19:46
Je complèterai ton point n°3 en disant que :
- tous les ports en dessous de 1024 ne peuvent êtres utilisés par un "user" standard
- pour utiliser les ports en dessous de 1024 il faut être "root" ou utiliser la commande 'sudo' lorsque l'on lance vbox !

D'ordre général, c'est vrai pour tous les linux !
0