Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/03/2013, à 23:14

Crone123

[Résolu] Installer un NAT entre un réseau ethernet et wifi

Bonjour,
J'ai fini par résoudre mon problème, j'ai rédigé la solution ici pour que ça puisse resservir:
http://forum.ubuntu-fr.org/viewtopic.ph … #p13020221


J'aimerais créer un NAT avec un point d'accès wifi (mode infrastructure) afin de remplacer le wifi de mon routeur.

Le serveur qui s'occupe de ça contient déjà un serveur DHCP et DNS configuré et fonctionnel.
J'ai coupé l'IPV6 du serveur (et de tout le réseau en fait) pour des raisons de simplicité de configuration, je ne me préoccupe donc que d'une configuration en IPV4.

J'ai 2 interfaces: eth0, qui est le réseau ethernet, donc celui contenant la passerelle vers internet. Et wlan0 qui sert de point d'accès wifi (point d'accès en infrastructure, donc accès point et non pas en ad-hoc pour être compatible avec tous les appareils)

Au niveau du wifi, j'utilise donc hostadp qui crée un réseau protégé par WEP.
J'y connecte mon smartphone pour tester, et j'ai en effet une IP attribuée et une connexion au serveur. Inversement le serveur peut se connecter au smartphone.

Sauf que ceux qui sont sur eth0 ne peuvent pas accéder au réseau de wlan0 et inversement, wlan0 n'as pas accès a eth0 et donc pas a internet.

eth0: 192.168.1.0/24 : ip du serveur: 192.168.1.11
wlan0 : 192.168.2.0/24 : ip du serveur : 192.168.2.11

Mon serveur DHCP indique:
Serveur DNS: 192.168.1.11 et passerelle 192.168.1.1

J'ai activé l'IPV4 forward dans les paramètres de sysctl.conf (et son équivalent en temps réel), j'ai déjà redémarré le serveur pour tester.

J'aimerais donc faire un nat avec iptables (Je débute dans son utilisation, mais c'est effectivement très puissant).
D'après ce que j'ai lu, il faut utilise une redirection avec MASQUERADE.
J'ai donc rajouté ceci:

iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.2.0/24
iptables -t nat -A POSTROUTING -j MASQUERADE -d 192.168.2.0/24

→ Notez que le serveur NAT est ouvert sur internet, et fait d'ailleurs serveur web donc il ne faut pas rediriger toutes les connexions a ce serveur vers le second réseau.

Mais ça ne fonctionne pas, wlan0 reste coupé du monde...

Quelqu'un pourrait m'aider a faire fonctionner ça?
Merci smile

Dernière modification par Crone123 (Le 25/03/2013, à 18:07)

Hors ligne

#2 Le 24/03/2013, à 23:24

Nicoo

Re : [Résolu] Installer un NAT entre un réseau ethernet et wifi

tu es sur que ta carte est géré par hostapd ? j'ai fait la meme chose que toi il y a quelques semaines, sur deux pc différents, l'un avec une carte utilisant le driver zydas, malheureusement pour moi zydas n'est pas géré par hostapd...

est-ce que sans wep ça fonctionne ?
check ton driver,
montre /etc/hostapd/hostapd.conf

edit ::
je vais peut-être dire une bétise mais pour le forwarding c'est pas :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Dernière modification par Nicoo (Le 24/03/2013, à 23:30)


HEAVY METAL RULES THIS F******G WORLD

Hors ligne

#3 Le 24/03/2013, à 23:31

Crone123

Re : [Résolu] Installer un NAT entre un réseau ethernet et wifi

Oui je suis certain que ma carte est compatible.
Actuellement je teste sur une clé USB Wifi (dont j'ai vérifié la compatibilité) pour que ça soit fonctionnel quand je recevrais une vraie carte wifi puissante dans la semaine. (qui est aussi compatible)

Le problème ne viens pas de la connexion wifi, même par WEP, j'arrive a échanger des données entre le serveur et un client, le serveur héberge un site web, je peux me connecter au site en tapant l'IP 192.168.2.11 depuis le client sur wlan0, et inversement, j'ai pu entrer dans le smartphone depuis le serveur par FTP en passant par wlan0.

Le problème viens vraiment de la redirection par iptable...qui empêche les connexions entre eth0 et wlan0...
Merci smile

Hors ligne

#4 Le 24/03/2013, à 23:42

Nicoo

Re : [Résolu] Installer un NAT entre un réseau ethernet et wifi

tu as fait :

echo 1 > /proc/sys/net/ipv4/ip_forward

avec sudo je pense

bon mon problème c'est que ça n'était pas avec ubuntu que j'ai fait ça... et les pc avec lesquels j'ai fait ça ont eu le droit à une réinstallation...

Dernière modification par Nicoo (Le 24/03/2013, à 23:44)


HEAVY METAL RULES THIS F******G WORLD

Hors ligne

#5 Le 25/03/2013, à 00:38

Crone123

Re : [Résolu] Installer un NAT entre un réseau ethernet et wifi

Oui j'ai déjà fait ça, et le fichier /proc/sys/net/ipv4/ip_forward contient 1

Je suppose que mes règles iptables sont fausses non? Quelqu'un a une idée?
Merci smile

Hors ligne

#6 Le 25/03/2013, à 18:05

Crone123

Re : [Résolu] Installer un NAT entre un réseau ethernet et wifi

J'ai fini par trouver a force de chercher et faire des tests:
Je vous explique en fait ce que j'ai configuré avec mon rc.local et d'autres petit scripts perso capable de gérer tout ça, et ce que j'ai modifié dans la config du serveur maintenant fonctionnel.
Vous pouvez ré-utiliser tout ceci librement, ça pourrait je pense aider plus d'une personne si quelqu'un avec un certain talent de pédagogue le rédige simplement dans le Wiki d'Ubuntu-fr smile
Pour rappel, le serveur qui fait NAT est un DHCP, la freebox ne le fait plus (coupé) et il fait aussi serveur DNS maître, donc je n'ai aucun serveur de ce genre a rajouter, juste un petit peu de config a modifier. Si vous n'en avez pas, il faudra configurer ça en conséquences.
Donc, il faut:

route add default gw 192.168.1.1

Sur le serveur pour s'assurer que eth0 aille bien vers ma box. (passerelle, car le reste du réseau aura le serveur en passerelle, il faut donc pas que le serveur se connecte a lui même comme passerelle)
Ensuite:

iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
iptables -A FORWARD -o eth0 -i wlan0 -j ACCEPT
iptables -A FORWARD -o eth0 -i eth0 -j ACCEPT
iptables -A FORWARD -o wlan0 -i wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Autoriser les connexions dans tous les sens entre les interfaces du serveur, et activer le MASQUERADE
Note: Souvent les gens sur le net oublient l'option "-t nat" et iptables ne connais pas de table POSTROUTING dans "-t filter" utilisée par défaut.

Ensuite seulement, le Wifi est démarré:

#!/bin/bash
if [ $UID == "0" ]
then
	#kill des processus
	killall hostapd
	#Attente de Xs pour être sur que le serveur est démarré
	sleep $1
	#reinitialisation wifi
	ifconfig wlan0 down
	ifconfig mon.wlan0 down
	ifconfig wlan0 192.168.2.11 netmask 255.255.255.0 up
	#reinitialisation des serveurs dhcp et dns
	service isc-dhcp-server restart
	service bind9 restart
	#demarrage du point d'acces
	hostapd /etc/hostapd-1.0/hostapd/hostapd.conf >> /hostapd
	ifconfig wlan0 down
else
	echo "Vous devez etre root pour lancer ce script !";
fi

L'attente avec sleep est fixée a 30s dans le rc.local, et le script permet de relancer le wifi en cas de bug.
Les 30s permettent de s'assurer que le serveur est bien démarré et les services tels que network-manager, etc.. prêts.
Je redirige les sorties vers des fichiers pour pouvoir suivre l'évolution depuis une connexion ssh.
→ Ici je ne l'ai pas fait, mais j'ai certains de mes services qui se relancent automatiquement en cas de crash/kill

Le script coupe l'interface et le relance avec une configuration d'IP (celle du démarrage ne conviens pas)
La ligne "ifconfig mon.wlan0 down" est un interface qui apparaît et qui ne sert a rien donc je le coupe (bug?)

Les serveurs DHCP et DNS sont relancés pour être sur qu'ils écoutent sur tous les interfaces. J'avais remarqué que le DHCP par exemple n'écoutait pas sur wlan0 si je démarrais le wifi après.

Au niveau de la configuration DHCP, il faut que le subnet 192.168.1.0/24 aie pour route 192.168.1.11 (l'ip du serveur sur eth0) et que le subnet 192.168.2.0/24 aie pour route 192.168.2.11 (l'ip du serveur sur wlan0)
Comme le serveur a été précédemment configuré pour avoir 192.168.1.1 (freebox) en passerelle, toutes les connexions du réseau convergent vers le serveur (au lieu de la box) avant de repartir vers l'endroit voulu.
Le problème était que les clients de wlan0 cherchaient 192.168.1.1 en passerelle qui n'est pas sur leurs réseau.

On pourrait penser que eth0 doit utiliser 192.168.1.1 en passerelle, mais c'est faux. Si on fait ça, certes on a internet sur ces clients, mais il seront alors incapable d'engager une connexion TCP ou UDP vers un client de wlan0 (ils pourront par contre répondre a une connexion TCP ou ICMP venant de wlan0). C'est pour ça qu'il faut mettre comme route 192.168.1.11 sur les clients de eth0 pour que leurs demande du réseau de wlan0 arrive au serveur et soit bien redirigée.

Voilà, si vous avez bien configuré les forward d'IPV4 dans syscl.conf vous avez maintenant eth0 et wlan0 qui peuvent communiquer ensembles. (Note: Après modification du serveur DHCP: Relancer, et reconnecter tous les périphériques connectés au réseau pour appliquer les modifications)


Je termine juste en rajoutant que le rc.local est une très bonne invention de Linux, rien de tel pour gérer des tâches au démarrage d'un serveur smile
Et voici l'endroit dont je me suis inspiré: http://www.commentcamarche.net/forum/af … c-iptables (note: J'ai l'impression que leurs soluce ne fonctionne pas, certaines informations sont fausses d'où mes modifications)


PS: Il m'arrive dans certains cas que redémarrer le DHCP et la DNS empêche aux clients d'accéder au réseau. Commentez ces lignes au besoin, et laissez quelques secondes entre le démarrage du Wifi et le lancement du point d'accès.

Dernière modification par Crone123 (Le 25/03/2013, à 20:54)

Hors ligne