technique:serveurs

Ceci est une ancienne révision du document !


Le routeur est une machine sous debian wheezy. Pour comprendre l'adressage utilisé par Ilico de manière globale, voir adressage

La configuration du routage IPv6 est traitée dans la seconde partie du document.

NOTE: L'ensemble de cette documentation est reprise de celle de Rhizome disponible sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0). Merci à eux pour le travail et le partage =)


D'un côté, le réseau Ilico (AP sur adresses privées et abonnés sur adresses publiques). Côté FDN,

  • Une adresse IPv4 publique est attribuée par le radius de FDN au modem (80.67.177.30/32) ;
  • un bloc d'adresses (80.67.180.0/24) est routé sur la ligne ADSL ;

On veut :

  • Que les abonnés soient routés vers internet
  • Que les AP sur le réseau privé ne soient pas routés vers internet
  • Qu'il n'y ait pas de routage entre le réseau abonné et le réseau backbone

Au niveau interfaces réseau, on aura à la fin de cette partie :

  • eth0: 10.42.1.0/16 (backbone radio, réseau privé des access-points).
  • eth0:abo : réseau des IPs publiques des abonnés routés sur cette connexion ADSL (80.67.180.0/24)
  • ppp0: 80.67.177.30/32 ptp (adresse attribuée par FDN via le modem), interface WAN, route par défaut.
  • eth1:modem 192.168.1.2/32 ptp (modem, adressage privé, pour configuration uniquement)

Il faut brancher le câble ethernet sur le port 1 du modem.

Configurer le modem :

  • Pour qu'il ne serve pas de DHCP,
  • Qu'il aie une adresse LAN statique 192.168.1.1
  • Qu'il fonctionne en mode bridge
  • Le brancher sur eth1 du routeur
pppoeconf

Puis se laisser guider (les choix par défaut conviennent très bien)! Les identifiants de connexion sont ceux envoyés par FDN par mail (XXX@fdn.nerim).

Mémo des commandes ppp :

  • Activer la connexion : pon dsl-provider
  • Désactiver: poff dsl-provider
  • Regarder le journal PPP plog

À l'issue de cette phase, le routeur devrait avoir un accès internet…

root@miassou:~# ping -c1 -q 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 45.245/45.245/45.245/0.000 ms

Reste à permettre aux abonnés d'être routés par cette interface.

Fichier /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
iface lo inet loopback

# The primary network interface
#allow-hotplug eth1
#iface eth1 inet dhcp

# Réseau privé des points d'accès radio
auto eth0
iface eth0 inet static
	address 10.42.1.1
	netmask 255.255.0.0

## eth0:abo Réseau abonnés
auto eth0:abo
iface eth0:abo inet static
	address 80.67.180.1
	netmask 255.255.255.0

## eth1:modem admin modem
#
# Le modem (son interface web/telnet)
# est accessible sur 192.168.1.1
auto eth1:modem
iface eth1:modem inet static
	address 192.168.1.2
	pointopoint 192.168.1.1
	netmask 255.255.255.255



## ppp0 interface WAN (ADSL FDN)
#
# Concerne le modem. L'activation de cette interface
#  - connecte le modem au réseau FDN
#  - crée une interface ppp0
#
auto dsl-provider
iface dsl-provider inet ppp
	pre-up /sbin/ifconfig eth1 up # line maintained by pppoeconf
	provider dsl-provider

	# lancement du pare-feu & du vpn au démarage 
	#openvpn work_vpn
	pre-up iptables-restore < /etc/iptables.up.rules

Le routage consiste du point de vue de la machine à recevoir un paquet IP qui ne lui est pas adressé et à le relayer vers son destinataire final. Pour savoir par où envoyer un paquet qu'il reçoit, le routeur consulte ses tables de routage.

Typiquement, les tables de routage des routeurs Rhizome vont ressembler à ça (de manière simplifiée):

62.4.16.ZZ/32      ppp0   # Routeur FDN de l'autre côté du tunnel PPP/ADSL (LNS)
80.67.180.0/24     eth0   # Bloc d'IP défini sur le routeur
192.168.1.0/24     eth1   # Réseau privé contenant uniquement le modem (IP d'administration)
10.42.0.0/16       eth0   # Réseau privé du backbone Rhizome (Access-points)
default            ppp0   # Route par défaut : le reste d'internet

Par défaut, le routage est désactivé sous Linux. Pour l'activer :

nano /etc/sysctl.conf

Décommenter la ligne net.ipv4.ip_forward=1

Cela prendra effet au prochain reboot. Pour l'appliquer immédiatement

sysctl -p

Cela active le routage de et vers tous les réseaux. Le pare-feu permet de contrôler plus finement le routage.

La commande ip route permet d'afficher la table de routage courante d'une machine.

root@miassou:~# ip route 
default dev ppp0  scope link 
10.42.0.0/16 dev eth0  proto kernel  scope link  src 10.42.1.1 
10.254.254.252 dev tun0  proto kernel  scope link  src 10.254.254.254 
62.4.16.41 dev ppp0  proto kernel  scope link  src 80.67.177.30 
80.67.180.0/24 dev eth0  proto kernel  scope link  src 80.67.180.1 
192.168.1.1 dev eth1  proto kernel  scope link  src 192.168.1.2 

Le pare-feu répond à deux questions :

  • Quels sont les paquets que l'on accepte de router (en fonction de leur source/destination) ?
  • Quels sont les connexion entrantes destinées au routeur lui-même que l'on accepte ?

On utilise le pare-feu netfilter qui est intégré au noyau linux et qui se configure à l'aide des outils iptables.

Routage

On ne veut pas que le réseau backbone (10.42.0.0/16) ait accès à internet, ni que le routage soit effectif entre ce réseau et le réseau abonnés. Idem pour le réseau d'administration du modem.

Ces directives correspondent à la chaine FORWARD du pare-feu netfilter/iptables

Services sur le routeur

On ne veut pas non plus ouvrir le routeur à tous vents. Seuls certains services devront-être accessibles :

  • SSH depuis partout
  • ICMP (pings, rapports d'erreurs…) depuis partout
  • DNS depuis l'intérieur du réseau
  • IGMP (annonces multicast) depuis l'intérieur du réseau

Ces directives correspondent à la chaine INPUT du pare-feu netfilter/iptables

Configuration iptables

Pour simplifier la configuration d'IPtables on peut définir des noms de réseau :

Contenu du fichier /etc/networks:

default		0.0.0.0
loopback	127.0.0.0
link-local	169.254.0.0

#blocs FDN
abo.ilico.fr		80.67.180.0		abo.wifi.ilico.fr
backbone.ilico.fr	10.42.0.0

La configuration IPTables est la suivante

/etc/iptables.up.rules

# /etc/iptables.up.rules
# iptables-restore(8) remet implicitement à zéro toutes les règles

# Les instructions qui suivent concernent la table « filter »,
*filter

#########################
# Politiques par défaut #
#########################

# Le traffic entrant est bloqué par défaut
-P INPUT DROP

# Le traffic destiné à être routé est refusé par défaut
-P FORWARD DROP

# Le traffic sortant est accepté par défaut
-P OUTPUT ACCEPT




######################
# Règles de filtrage #
######################

# Pas de filtrage sur l'interface de "loopback"
-A INPUT -i lo -j ACCEPT

# Accepter de forward les paquets relatifs à une connexion existante
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# Accepter de forward tout le traffic des abonnés (entrant/sortant)
-A FORWARD -i eth0 --source 80.67.180.0/24 -j ACCEPT
-A FORWARD --destination 80.67.180.0/24 -j ACCEPT

# Accepter de forward tout ce qui vient du vpn (pour la maintenance)
-A FORWARD -i tun0 -j ACCEPT



#SNMP
-A INPUT -p udp --dport snmp -j ACCEPT

# VPN
-A INPUT -p udp --dport openvpn -j ACCEPT

# ICMP (ping & diagnostic)
-A INPUT -p icmp -j ACCEPT

# IGMP (pour le multicast)
-A INPUT -p igmp -j ACCEPT

# Accepter les packets entrants relatifs à des connexions établies
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# SSH autorisé partout
-A INPUT -p tcp --dport ssh -j ACCEPT

# HTTP pour le serveur web apache (stats munin)
# -A INPUT -p tcp --dport http -j ACCEPT

# Accepter DNS depuis les IPs abonnés 
-A INPUT -i eth0 -p tcp --dport domain --source 80.67.180.0/24 -j ACCEPT
-A INPUT -i eth0 -p udp --dport domain --source 80.67.180.0/24 -j ACCEPT

# Accepter les requêtes/réponses DHCP
-A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Accepter les requêtes NTP
-A INPUT -i eth0 -p udp --dport 123 --source 80.67.180.0/24 -j ACCEPT

# Accepter les requêtes syslog
-A INPUT -i eth0 -p udp --dport 514 --source 80.67.180.0/24 -j ACCEPT

COMMIT


####################
# Problème de MTU… #
####################

# Les instructions qui suivent concernent la table « mangle », c'est
# à dire l'altération des paquets
*mangle

# Règle les différences de MTU entre ppp0 et ethX
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu

COMMIT

Il est préférable de tester les règles avant de les appliquer :

iptables-apply <fichier-de-règles>

Puis tester d'établir une nouvelle connexion SSH vers le serveur et répondre à la question…

Cela permet de tester un fichier de règles pendant 30s. Si le nouveau fichier de règles contient une erreur vous coupant le cordon SSH, l'ancien sera rétabli au bout de 30s.

À chaque démarrage, la configuration iptables sera appliquée par la ligne que nous avions placée dans /etc/network/interfaces (ndlr: “pre-up iptables-restore < /etc/iptables.up.rules”).

Note importante: Attention à ne placer dans le fichier /etc/iptables.up.rules qu'un jeu de règles fonctionnel et testé sous peine de surprise au prochain reboot…

DNSMasq joue un double rôle :

  • Serveur DHCP : il attribue les adresses publiques aux équipements des abonnés et envoie les informations de configuration (route par défaut… etc).
  • Serveur DNS : il reçoit les requêtes de noms de la part des abonnés et y répond. Il résoud réellement les noms des machines abonnées et se contente de transmettre les autres aux serveurs DNS supérieurs (ceux de FDN pour l'instant)

Installer DNSMasq

apt-get intsall dnsmasq

Créer un fichier de conf /etc/dnsmasq.d/wifi-ilico_dhcp pour le DHCP Ilico (celui par défaut ne fait rien). (On considère que le routeur distribue les IPv4 publiques du bloc 80.67.180.0/24 et qu'il a lui-même dans ce bloc l'adresse 80.67.180.1)

# Fichier de configuration du serveur DHCP + DNS Wifi Ilico-Chanteix
#
##-> DHCP : Attribue les adresses publiques des abonnes a leurs
#           equipements (box routeur, selon). N'alloue que des IP fixes
#           et publiques, en fonction de l'adresse MAC. N'alloue pas
#           d'adresses IP a des equipements inconnus (addr MAC).
#

# Ne pas attribuer d'adresse aux equipements inconnus
# /!\ A desacitver (commenter) au momment du festival
# si on veut distribuer de l'IP publique

#dhcp-ignore=#known

# On écoute que sur l'adresse IP qui est au début du bloc abonné 
listen-address=80.67.180.1
interface=eth0

# La plage d'IP allouee par ce routeur
dhcp-range=80.67.180.2,80.67.180.254,60m
log-dhcp
dhcp-leasefile=/var/lib/misc/dnsmasq.leases


# Les correspondances @mac <-> @IP publique sont definies dans
# le fichier /etc/ethers
read-ethers

#
##-> DNS  : Fait office de serveur DNS (relaie vers les DNS FDN)
#           Garde les reponses en cache pour accelerer les suivantes.           


# Ne transfere pas les requetes DNS incompletes
#domain-needed

# Ne transfere pas les requetes reverse-DNS sur des adresses privees.
#bogus-priv

# les abonnes sont localement accessibles par 
# <nom_equipement>.abo.wifi.ilico.fr
domain-suffix=abo.wifi.ilico.fr

# Taille du cache DNS
cache-size=256
port=53

C'est le fichier ethers qui contient les associations @MAC ↔ @IP. On peut le remplir initialement avec une ligne prête pour chaque IP publique que le routeur est censé distribuer. Par exemple, si le routeur distribue 80.67.180.0/24 et que les IP 80.67.180.2-80.67.180.42 sont pour les abonnés, on peut préparer /etc/ethers comme suit :

# Pour ajouter un abonne, renseigner le commentaire et l'adresse MAC et
# décommenter la ligne contenant l'adresse MAC.
# Utilisé par dnsmasq (/etc/dnsmasq.d/)

# Pour voir les baux DHCP en cours : cat /var/lib/misc/dnsmasq.leases
# dnsmaq est logué dans /var/log/dnsmasq
 
#-------------------------------------------------------------

# MARQUE MODEL de l'équipement (type d'équipementà - Nom Prenom Abonné
# 00:00:00:00:00:00 80.67.180.XX

# XXXXX YYYYYY (serveur Debian) - Jhon Doe
00:f0:63:e7:aF:ff 80.67.180.2

# TP LINK TL-WR741ND (routeur wifi) - Richard Matthew Stallman
00:2d:84:88:ac:a3 80.67.180.3

# TP LINK TL-WR741ND (routeur wifi) - Anakin Skywalker
a0:f3:c1:67:52:f9 80.67.180.4

# [...]

# LINKSYS WRT54GL (routeur wifi) -  Douglas Adams
10:e1:c0:8c:02:28 80.67.180.42

# ect.

… Puis redémarrer

/etc/init.d/dnsmasq restart

Il suffira de renseigner et décommenter une ligne pour ajouter les abonnés lors de la configuration du matériel pour un nouvel abonné.

Il serait dommage de faire passer les paquets échangés entre les abonnés du reseau wifi par internet. On met donc en place un routage entre les antennes des abonnés. En théorie, il faudrait mettre en place des IP publiques pour le routage, mais malheureusement nous n'en avons pas assez. Nous utiliserons donc le réseau en 10.42 pour le routage.

ip route add 80.67.180.0/24 via 10.42.1.1

Ajout des routes au démarrage de l'interface

Ajout dans la conf de /etc/network/interfaces (pour que les routes soient effectives au demarrage du routeur)

# Ajout des routes au démarrage de l'interface (Routage inter-routeur)
        post-up ip route add 80.67.180.0/24 via 10.42.1.1
# La route sera définie dès que l'interface sera up
  • technique/serveurs.1385545007.txt.gz
  • Dernière modification : 2013/11/27 10:36
  • de gtom