Infrastructure de SamesWireless
Présentation par Fernando Alves le 09.10.2010
La configuration de SamesWireless est simple :
- Dans le local technique du particulier d'où partent nos connexions ADSL (à Guiche), une passerelle linux reliée à une RocketM5 (source A) posée sur le toit configurée en AP WDS (+ onduleur, modems ADSL).
- Sur le toit des maisons à Sames ayant une vue sur la source A, j'ai installé 2 antennes, une en mode STA WDS et l'autre en mode AP WDS pour diffuser sur les quartiers en contrebas.
- Chaque adhérent a chez lui un Linksys54GL avec DD-WRT embarqué qui récupère son IP publique auprès de la passerelle par DHCP (identifié par son MAC Addr).
Toutes les antennes du réseau sont réglées en mode pont transparent (WDS) avec IP privées (192.168.x.x/24). Tout le réseau est entièrement composé de techno M5 ou M2 de Ubiquiti. Avec ce mode c'est comme si chaque modem/routeur des adhérents était relié par un câble Ethernet à la passerelle (niveau 2).
Ensuite tout se règle sur la passerelle :
- Pour un partage équitable et éviter les blocages, il faut mettre du QOS sur la voie montante avec une bonne gestion du burst (sur connexions PPPOE adsl).
- Une petite astuce, les modules Ubiquiti ont tendance à planter après quelques semaines de fonctionnement (moins quand ils sont sur onduleur), générez une clé publique RSA sur la passerelle et chargez la dans “ Authorized Keys ” de vos modules Ubiquiti ensuite un petit script sur la passerelle qui s'exécute tous les 3 jours la nuit du style “ ssh samesw00@192.168.x.x reboot ”, depuis (6 mois) que j'ai mis en place ce script plus de crash d'AP
- Un peu d'Iptables pour protéger la passerelle
- Collectd, cacti pour les stats.
- Bind pour le serveur DNS
- Serveur DHCP…
Avec cette configuration les adhérents ont l'impression d'avoir une connexion ADSL 8Mbits, il faut dire aussi que aujourd'hui nous n'avons pas de gros téléchargeur qui télécharge 24h/24h.
Le coût : aujourd'hui pour adhérer à SamesWireless, c'est 100 euros de droit d'entrée et ensuite 15euros/mois pour le service internet. À ce jour SamesWireless a un petit déficit de 1000euros qui devrait être comblé dans l'année.
FAQ suite à cette présentation
Q : Quelles sont les contraintes lors du déploiement d'un réseau Wifi (hors déclaration éventuelle auprès de l'ARCEP) ? Faut-il des autorisations particulières en mairie par exemple ?
R : Non aucune, il faut juste respecter la PIRE 0,1w en 2.4Ghz et 1w en 5Ghz
Q : Parmi les contraintes éventuelles, y a-t-il eu des réticences des habitants de la commune lorsque vous avez déployé votre réseau Wifi ?
R : Nos antenne sont installées sur les toits des adhérents (domaine privé), personne ne peut rien dire (droit a l'antenne). J'ai aussi fait un peu de pédagogie auprès des habitants : émetteur GSM 100W, WIMAX 20W à 50W, téléphone portable 2W, WIFI de 0,1W à 1W même puissance que le Wifi d'une BOX ADSL.
Q : Au jour d'aujourd'hui, ça donne quoi SamesWireless en chiffres (nombre d'adhérents à l'asso, superficie couverte, …) ?
R : Ponts les plus long, de 3 à 4km. 44 adhérents, 6 adhérents sont passé à la VoIP dont moi même (1,20euros/mois chez OVH). Nous couvrons le village de Sames et ceux qui sont en limite périphérique.
Q : L'énorme charge que vous avez rencontrée est liée au fait que vous couvriez une zone blanche (avec donc un grand nombre de demandes) ou y a-t-il d'autres facteurs ?
R : Oui, c'est surtout parce que nous couvrons une zone blanche mais le coût aussi (15euros/mois). Certains déçus du satellite viennent chez nous avant la fin de leurs engagements.
Q : Avez-vous rencontré de grosse difficultés techniques lors du déploiement du réseau, notamment entre Guiche et Sames ?
R : Oui les arbres et les collines
Q : Est-ce légal ?
R : OUI
Q : Et au sujet de la gestion des membres, vous avez opté pour quelles solutions ? Les créations de lignes sont-elles automatisées ?
R : L'ouverture d'une ligne WIFI n'est pas très automatisée. Aujourd'hui je dois modifier plusieurs scripts sur la passerelle pour ajouter un adhérent.
Q : Quand un nouvel adhérent demande un accès, faites-vous la demande à FDN à la main ?
R : Ce sont des lignes ADSL partagées à plusieurs. Aujourd'hui 2 lignes ADSL (10M) a 43 adhérents, une 3ème est en cours de construction.
Q : Par curiosité, comment le load-balancing est-il mis en œuvre ?
R : Aujourd’hui j’ai la moitié des adhérents sur la 1ère ligne et l’autre moitié sur la 2ème. Côté FDN Domi essaye de mettre en place MLPPP, en espérant que ça marchera.
Présentation infrastructure
Schéma de la passerelle
Infos: Les IPs données dans ces exemples ne correspondent pas aux IPs réellement utilisées sur notre réseau.
Aujourd'hui FDN nous livre un bloc de 128 IP publiques (80.68.167.128/25) découpées en 4 blocs de 32 IPs (un /27 par connexion ppp).
ppp0 –> 80.68.167.128/27
ppp1 –> 80.68.167.160/27
ppp2 –> 80.68.167.192/27
ppp3 –> 80.68.167.224/27
Si l'on veut utiliser la même interface physique pour monter plusieurs connexions ppp il faut utiliser les vlan, car lors de la négociation pppoe avec le serveur, le serveur n'accepte qu'une connexion ppp par adresse MAC.
Pour cela Il faut avoir installé le paquet vlan (voir vconfig) pour pouvoir utiliser les vlan sur une debian.
http://www.linux-france.org/prj/inetdoc/cours/routage.inter-vlan/routage.inter-vlan.typical.html
configuration du fichier interface
alix:/# cat /etc/network/interfaces
# 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 eth0 eth1 eth2 iface lo inet loopback iface eth0 inet static post-up iptables-restore </etc/iptables.up.rules address 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 network 192.168.2.0 auto eth0.101 iface eth0.101 inet static address 192.168.101.2 netmask 255.255.255.0 broadcast 192.168.101.255 network 192.168.101.0 hwaddress ether 00:0d:b9:1d:3f:d7 auto eth0.102 iface eth0.102 inet static address 192.168.102.2 netmask 255.255.255.0 broadcast 192.168.102.255 network 192.168.102.0 hwaddress ether 00:0d:b9:1d:3f:d8 auto eth0.103 iface eth0.103 inet static address 192.168.103.2 netmask 255.255.255.0 broadcast 192.168.103.255 network 192.168.103.0 hwaddress ether 00:0d:b9:1d:3f:d9 auto eth0.104 iface eth0.104 inet static address 192.168.104.2 netmask 255.255.255.0 broadcast 192.168.104.255 network 192.168.104.0 hwaddress ether 00:0d:b9:1d:3f:da # LAN Private Network iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 network 192.168.1.0 # LAN Publique Network iface eth2 inet static address 80.68.167.129 netmask 255.255.255.128 broadcast 80.68.167.255 network 80.68.167.128
Définition de 4 tables iproute, une par connexion ppp (WAN1,WAN2,WAN3 et WAN4)
alix:/# cat /etc/iproute2/rt_tables
# # reserved values # 255 local 254 main 253 default 0 unspec 201 WAN1 202 WAN2 203 WAN3 204 WAN4
script de routage lancé au boot
alix:/# cat /etc/init.d/routing
#!/bin/sh PATH=/sbin:/bin:/usr/bin do_stop () { ip route flush cache } do_start () { ip route flush table WAN1 ip route flush table WAN2 ip route flush table WAN3 ip route flush table WAN4 # Table WAN1 ip route add 127.0.0.0/8 dev lo table WAN1 ip route add 80.68.167.128/25 dev eth2 proto kernel scope link src 80.68.167.129 table WAN1 ip route add 192.168.101.0/24 dev eth0.101 proto kernel scope link src 192.168.101.2 table WAN1 ip route add 192.168.102.0/24 dev eth0.102 proto kernel scope link src 192.168.102.2 table WAN1 ip route add 192.168.103.0/24 dev eth0.103 proto kernel scope link src 192.168.103.2 table WAN1 ip route add 192.168.104.0/24 dev eth0.104 proto kernel scope link src 192.168.104.2 table WAN1 ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1 table WAN1 # Table WAN2 ip route add 127.0.0.0/8 dev lo table WAN2 ip route add 80.68.167.128/25 dev eth2 proto kernel scope link src 80.68.167.129 table WAN2 ip route add 192.168.101.0/24 dev eth0.101 proto kernel scope link src 192.168.101.2 table WAN2 ip route add 192.168.102.0/24 dev eth0.102 proto kernel scope link src 192.168.102.2 table WAN2 ip route add 192.168.103.0/24 dev eth0.103 proto kernel scope link src 192.168.103.2 table WAN2 ip route add 192.168.104.0/24 dev eth0.104 proto kernel scope link src 192.168.104.2 table WAN2 ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1 table WAN2 # Table WAN3 ip route add 127.0.0.0/8 dev lo table WAN3 ip route add 80.68.167.128/25 dev eth2 proto kernel scope link src 80.68.167.129 table WAN3 ip route add 192.168.101.0/24 dev eth0.101 proto kernel scope link src 192.168.101.2 table WAN3 ip route add 192.168.102.0/24 dev eth0.102 proto kernel scope link src 192.168.102.2 table WAN3 ip route add 192.168.103.0/24 dev eth0.103 proto kernel scope link src 192.168.103.2 table WAN3 ip route add 192.168.104.0/24 dev eth0.104 proto kernel scope link src 192.168.104.2 table WAN3 ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1 table WAN3 # Table WAN4 ip route add 127.0.0.0/8 dev lo table WAN4 ip route add 80.68.167.128/25 dev eth2 proto kernel scope link src 80.68.167.129 table WAN4 ip route add 192.168.101.0/24 dev eth0.101 proto kernel scope link src 192.168.101.2 table WAN4 ip route add 192.168.102.0/24 dev eth0.102 proto kernel scope link src 192.168.102.2 table WAN4 ip route add 192.168.103.0/24 dev eth0.103 proto kernel scope link src 192.168.103.2 table WAN4 ip route add 192.168.104.0/24 dev eth0.104 proto kernel scope link src 192.168.104.2 table WAN4 ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1 table WAN4 ip route add 127.0.0.0/8 dev lo # DEMARRAGE des connexions PPPOE pon dsl-provider1 pon dsl-provider2 pon dsl-provider3 pon dsl-provider4 } case "$1" in start) do_start exit 0 ;; restart|reload|force-reload) echo "Error: argument '$1' not supported">&2 exit 3 ;; stop) do_stop exit 0 ;; *) echo "Usage: $0 start|stop">&2 exit 3 ;; esac
configuration des fichiers dsl-provider1, 2 , 3 et 4
alix:~# cat /etc/ppp/peers/dsl-provider1
noipdefault defaultroute hide-password lcp-echo-interval 15 lcp-echo-failure 5 connect /bin/true noauth persist mtu 1462 noaccomp default-asyncmap plugin rp-pppoe.so eth0.101 user "sameswireless.line1@fdn.nerim"''
script de routage lors du montage d'une connexion ppp
alix:~# cat /etc/ppp/ip-up.d/routing''
#!/bin/sh PATH=/sbin:/bin WAN=WAN1 NETW=80.68.167.128 MAXUP0=700 MAXUP1=600 if [ "$PPP_LOCAL" = 80.70.120.108 ]; then WAN=WAN1 NETW=80.68.167.128 elif [ "$PPP_LOCAL" = 80.70.120.135 ]; then WAN=WAN2 NETW=80.68.167.160 elif [ "$PPP_LOCAL" = 80.70.120.179 ]; then WAN=WAN3 NETW=80.68.167.192 elif [ "$PPP_LOCAL" = 80.70.120.218 ]; then WAN=WAN4 NETW=80.68.167.224 fi ip route add $PPP_REMOTE dev $PPP_IFACE proto kernel scope link src $PPP_LOCAL table $WAN ip route add default dev $PPP_IFACE scope link table $WAN tc qdisc del dev $PPP_IFACE root handle 1: htb tc qdisc add dev $PPP_IFACE root handle 1: htb default 100 tc class add dev $PPP_IFACE parent 1: classid 1:1 htb rate 100000Kbit ceil 100000Kbit burst 1023975b cburst 126575b prio 0 quantum 60000 tc class add dev $PPP_IFACE parent 1:1 classid 1:2 htb rate 800kbit ceil 800kbit burst 6Kb cburst 2224b quantum 60000 tc class add dev $PPP_IFACE parent 1:2 classid 1:10 htb rate 500kbit ceil ${MAXUP0}kbit burst 48Kb prio 1 quantum 60000 tc qdisc add dev $PPP_IFACE parent 1:10 handle 10: sfq perturb 10 tc class add dev $PPP_IFACE parent 1:2 classid 1:3 htb rate 200kbit ceil ${MAXUP0}kbit burst 24Kb prio 2 quantum 60000 tc class add dev $PPP_IFACE parent 1:3 classid 1:100 htb rate 100kbit ceil ${MAXUP1}kbit burst 24Kb prio 3 quantum 60000 tc qdisc add dev $PPP_IFACE parent 1:100 handle 100: sfq perturb 10 tc qdisc del dev $PPP_IFACE ingress tc qdisc add dev $PPP_IFACE handle ffff: ingress tc filter replace dev $PPP_IFACE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 500k drop flowid :1 tc filter add dev $PPP_IFACE parent 1:0 protocol ip prio 1 handle 0x01/0xF fw flowid 1:10 ip rule del from 80.68.167.128/27 table $WAN ip rule del from 80.68.167.160/27 table $WAN ip rule del from 80.68.167.192/27 table $WAN ip rule del from 80.68.167.224/27 table $WAN ip rule add from $NETW/27 table $WAN