Routeur Wifi sous GNU/Linux Debian

Bonjour,

Je travaille sur la mise en œuvre d’un routeur Wifi sous Debian.

Trois interfaces dans la machine :
[ul][li] Ethernet, connectée au modem ADSL : eth1[/li]
[li] Ethernet, pour le réseau local : eth0[/li]
[li] Réseau sans fil local : wlan0[/li][/ul]

J’ai installé les logiciels suivants :
[ul][li] Serveur DHCP : isc-dhcp-server[/li]
[li] Point d’accès : hostapd[/li][/ul]

J’ai activé le transfert de paquets dans le noyau (/etc/sysctl.d/forwarding.conf) :

net.ipv6.conf.all.forwarding=1 net.ipv4.ip_forward=1

Les interfaces réseau sont configurées (/etc/network/interfaces) :

[code]auto lo
iface lo inet loopback
auto eth0 wlan0

eth1 ==> Connexion ADSL

auto FAI-adsl
iface FAI-adsl inet ppp
pre-up /sbin/ifconfig eth1 up # line maintained by pppoeconf
provider FAI-adsl
up ip -f inet6 route add default dev ppp0

eth0 ==> Réseau local filaire

iface eth0 inet static
address 192.168.1.225
netmask 255.255.255.0

wlan0 ==> Réseu local en Wifi

iface wlan0 inet static
address 192.168.1.226
netmask 255.255.255.0[/code]
Le serveur DHCP écoute sur les deux interfaces (/etc/default/isc-dhcp-server) :

Il est configuré pour attribuer des adresses dans une plage définie (/etc/dhcp/dhcpd.conf morceaux choisis) :

option domain-name "toto.net"; option domain-name-servers 192.168.1.226, 192.168.1.225; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.230 192.168.1.250; #option routers 192.168.1.226; <-- J'ai essayé en activant la ligne option routers 192.168.1.225; # eth0 option broadcast-address 192.168.1.255; }

Et enfin, les règles iptables sont lancées au démarrage :

modprobe ip_tables modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat iptables -A FORWARD -i wlan0 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o wlan0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Voilà pour les fichiers de config, le décor est planté !

Ça fonctionne très bien (une adresse est bien attribuée par le serveur DHCP et je ping des adresses distantes) en filaire.

Par contre, en Wifi alors que l’ordinateur client se connecte bien au réseau sans fil et une adresse lui est attribuée par DHCP, impossible de sortir du réseau…

Sur la machine cliente :

Si connecté en wifi

root@chlore:~# route -n Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 0.0.0.0 192.168.1.226 0.0.0.0 UG 0 0 0 wlan0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0

Si connecté en filaire

root@chlore:~# route -n Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 0.0.0.0 192.168.1.225 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

Et, encore plus étrange, si je fait en sorte d’avoir seulement l’interface Wifi fonctionnelle pour permettre une connexion d’une machine cliente, elle fonctionne !

Pourquoi ne pourrais-je pas avoir deux interfaces pour mon routeur ?!

Il doit y avoir quelque chose que j’ai loupé.

Auriez-vous une idée ?

Merci.

Salut,
Tu ne peux pas avoir sur la même machine deux interfaces dans le même réseau (192.168.1.0/24).

J’ai eu le même soucis chez moi. J’ai donc configuré le dhcp avec 2 plage différentes. 1 pour le LAN et 1 pour le WLAN. adresse carte LAN en 192.168.10.X et adresse carte wifi en 192.168.11.X

Voilà, ou alors il faut créer un pont entre les deux interfaces, ce qui revient en fait à avoir une seule interface logique, le pont. Lui seul a une configuration IP, les interfaces pontées n’en ont pas, elles deviennent des ports du pont. C’est ainsi que fonctionnent la plupart des box et routeurs wifi.

Note : parfois le pontage ne fonctionne pas très bien avec une interface wifi. C’est vrai en mode client, je ne sais pas si ça l’est aussi en mode point d’accès.

Je me suis douté qu’il y avait un truc comme ça à faire…

Je n’ai pas trouvé comment, dans la config du serveur DHCP, indiquer à quelle interface correspond telle plage réseau ? Une petite aide serait la bienvenue …

Merci !

Normalement dhcpd trouve tout seul quel subnet défini dans dhcpd.conf correspond à quelle interface.

En fonction de l’adresse paramétrée dans /etc/network/interfaces ?

Plutôt en fonction de l’adresse affectée à l’interface, quel que soit le moyen.

Effectivement, tu n’a pas besoins de déclarer une interface pour les 2 plages d’adresses dans ton dhcp.conf.

Voila mes fichiers de conf, si ça peut t’aider :

dhcp.conf :

ddns-update-style none;
option domain-name "dom.lan";
option domain-name-servers 192.168.10.254;
option domain-name-servers 192.168.11.254;

default-lease-time 600;
max-lease-time 7200;

authoritative;

log-facility local7;

#plage du WLAN

subnet 192.168.11.0 netmask 255.255.255.0 {
        range 192.168.11.100 192.168.11.150;
        option routers 192.168.11.254;
        option domain-name-servers 192.168.11.254;
}


#plage du LAN

subnet 192.168.10.0 netmask 255.255.255.0 {
	range 192.168.10.100 192.168.10.150;
	option routers 192.168.10.254;
	option domain-name-servers 192.168.10.254;
}

interface :

[code]# This file describes the network interfaces available on your system

and how to activate them. For more information, see interfaces(5).

The loopback network interface

auto lo
iface lo inet loopback

Interface WAN

allow-hotplug eth0
iface eth0 inet static
address 192.168.168.250
netmask 255.255.255.0
gateway 192.168.168.254

#Interface LAN
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.10.254
netmask 255.255.255.0

#Interface Wlan
auto wlan0
allow-hotplug ath1
iface wlan0 inet static
address 192.168.11.254
netmask 255.255.255.0[/code]

[quote=“leo-25”]Effectivement, tu n’a pas besoins de déclarer une interface pour les 2 plages d’adresses dans ton dhcp.conf.

Voila mes fichiers de conf, si ça peut t’aider :
(…)[/quote]

Super :023 Merci beaucoup. Ça marche impeccable !!! :038

La ligne “allow-hotplug ath1” me semble erronée.

Effectivement, ça drevrait wlan0 à la place de ath1. Cela dit ça fonctionne tout de même.

Oui, ça doit être allow-hotplug wlan0

Je crois qu’il va falloir que je fasse un bridge car les machines connectées sur le réseau Wifi ne peuvent pas se connecter sur celles du réseau filaire…
Il faut passer par un logiciel spécial, bridge-utils comme indiqué ici ?

Mais si, elles peuvent, à condition que le trafic entre eth0 et wlan0 ne soit pas bloqué par iptables [1]. Par contre tout ce qui passe par du broadcast ou du multicast local (résolution de nom Netbios, mDNS…) ne marche pas, car ce type de paquet reste cantonné au réseau local et ne traverse pas le routeur. Dans ce cas le pontage comme décrit dans ton lien est une solution. Attention, par défaut iptables s’applique aussi au paquets IP qui traversent un pont. L’interface d’entrée et de sortie vue par iptables est le pont et non les interfaces qui servent de ports. Pour filtrer sur ces dernières, il faut utiliser la correspondance physdev.

[1] A ce propos il faudrait revoir les règles iptables qui ne me semblent pas très cohérentes.
Quel intérêt de s’occuper du trafic IP sur eth1 qui ne voit passer que du PPPoE ? C’est l’interface PPP (ppp0) qui voit passer le trafic IP avec internet.
D’autre part on ne voit pas la politique par défaut de la chaîne FORWARD, si tu l’as laissée à ACCEPT alors tes règles sont inutiles.