Récupération d'articles d'archives
This commit is contained in:
@@ -0,0 +1,495 @@
|
||||
---
|
||||
comments_url: https://com.richard-dern.fr/post/539
|
||||
date: '2014-12-15 23:02:32'
|
||||
links:
|
||||
- lang: fr
|
||||
name: Page d'origine sur LinuxFr
|
||||
url: https://linuxfr.org/users/richarddern/journaux/mon-reseau-aussi
|
||||
tags:
|
||||
- IPv6
|
||||
- Réseau domestique
|
||||
- Load-balancing
|
||||
- Failover
|
||||
- Debian
|
||||
- Réseau
|
||||
- Pare-feu
|
||||
title: Mon réseau (aussi)
|
||||
weather:
|
||||
humidity: 85
|
||||
illuminance: 0.0
|
||||
precipitations: true
|
||||
pressure: 1014.0
|
||||
source:
|
||||
- open-meteo
|
||||
temperature: 5.5
|
||||
wind_direction: 227
|
||||
wind_speed: 7.4
|
||||
---
|
||||
|
||||
Dans la mouvance des journaux actuels, j'ai décidé de montrer le mien (de réseau).
|
||||
En effet, je pense qu'il contient - aussi - certaines spécificités pouvant en intéresser d'autres que moi.
|
||||
|
||||

|
||||
|
||||
## WAN
|
||||
|
||||
La partie WAN est constituée de deux Freebox V6 en mode bridge.
|
||||
Je ne les ai pas configurées en mode routeur parce que je considère tout simplement que ce n'est plus leur rôle à partir du moment où j'intercale un routeur "maison".
|
||||
|
||||
## LAN
|
||||
|
||||
Le NAS (Synology DS214Play) est utilisé pour la sauvegarde des serveurs via rsync et le stockage des fichiers pour le LAN et le WLAN, et gère le serveur LDAP du réseau.
|
||||
Il est aussi utilisé pour l'encodage des vidéos, photos et musiques à la volée (d'où le "Play" à la place du "+" habituel), à destination des périphériques multimédias (platine Dune HD-MAX au salon et HD-TV101 dans la chambre, ainsi que les téléphones et tablettes, non présents sur le diagramme).
|
||||
|
||||
## WLAN
|
||||
|
||||
Le point d'accès sans-fil TP-Link TL-WA801N est configuré pour une authentification RADIUS, dont les identifiants sont fournis par le LDAP.
|
||||
|
||||
## DMZ
|
||||
|
||||
La DMZ est constituée de trois serveurs.
|
||||
|
||||
Mercure héberge tous mes sites publiques, Minerve le serveur mail (sous Zimbra) et XMPP (sous OpenFire), et Gitus le serveur git sous Gitlab.
|
||||
A l'exception de Minerve (Ubuntu 14.04), les serveurs sont sous Debian stable.
|
||||
|
||||
## Cerbere
|
||||
|
||||
Sous Debian GNU/Linux, doté des incontournables [patches de Julian Anastasov] [1], son rôle est d'assurer la sécurité du réseau et de distribuer les connexions Internet (load-balancing et fail-over, même si ces termes sont peut être un peu usurpés).
|
||||
Il héberge le serveur freeRADIUS pour l'authentification des clients du WLAN, Apache en tant que proxy pour les sites locaux, bind en tant que cache DNS, serveur pour les domaines locaux et pour le blocage de domaines indésirables.
|
||||
|
||||
### Load-balancing et fail-over
|
||||
|
||||
Bien que ce soient les patches sus-mentionnés qui font pratiquement tout, il faut tout de même constituer un firewall et une table de routage corrects.
|
||||
Je me suis donc préparé les scripts qui vont suivre, mais dans un premier temps, il faut créer les tables qui vont bien dans le fichier `/etc/iproute2/rt-tables`:
|
||||
|
||||
```
|
||||
#
|
||||
# reserved values
|
||||
#
|
||||
255 local
|
||||
254 main
|
||||
253 default
|
||||
0 unspec
|
||||
#
|
||||
# local
|
||||
#
|
||||
1 ISP1
|
||||
2 ISP2
|
||||
```
|
||||
|
||||
Maintenant, le script qui va modifier la table de routage:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
# ----| Configuration |--------------------------------------------------------
|
||||
|
||||
P1_NET="xxx.xxx.xxx.0/24" # Réseau WAN 1
|
||||
IF1="eth1" # Interface WAN 1
|
||||
IP1="xxx.xxx.xxx.xxx" # IP WAN 1
|
||||
T1="1" # Identifiant de la table de routage
|
||||
P1="xxx.xxx.xxx.254" # Passerelle WAN 1
|
||||
|
||||
P2_NET="xxx.xxx.xxx.0/24" # Réseau WAN 2
|
||||
IF2="eth2" # Interface WAN 2
|
||||
IP2="xxx.xxx.xxx.xxx" # IP WAN 2
|
||||
T2="2" # Identifiant de la table de routage
|
||||
P2="xxx.xxx.xxx.254" # Passerelle WAN 2
|
||||
|
||||
DMZ_NET="10.0.0.0/16" # Réseau DMZ
|
||||
DMZ_IF="eth3" # Interface DMZ
|
||||
|
||||
LAN_NET="10.1.0.0/16" # Réseau LAN
|
||||
LAN_IF="eth4" # Interface LAN
|
||||
|
||||
WLAN_NET="10.2.0.0/16" # Réseau WLAN
|
||||
WLAN_IF="eth0" # Interface WLAN
|
||||
|
||||
# ----| Modification de la table de routage |----------------------------------
|
||||
|
||||
# Purge du cache des routes
|
||||
ip route flush cache
|
||||
|
||||
# Purge des règles
|
||||
ip rule flush
|
||||
|
||||
# Ce qui vient de $IP1 va dans la table ISP1,
|
||||
ip rule add from $IP1 pref 1500 lookup 1
|
||||
# ce qui vient de $IP2 va dans la table ISP2,
|
||||
ip rule add from $IP2 pref 1501 lookup 2
|
||||
# et ce qui est marqué par iptables va dans la table correspondante
|
||||
ip rule add fwmark 1 pref 2000 lookup 1
|
||||
ip rule add fwmark 2 pref 2001 lookup 2
|
||||
|
||||
# Règles par défaut
|
||||
ip rule add from all pref 32766 lookup main
|
||||
ip rule add from all pref 32767 lookup default
|
||||
|
||||
# Purge des routes existantes
|
||||
ip route flush table main
|
||||
ip route flush table 1
|
||||
ip route flush table 2
|
||||
|
||||
ip route add $P1_NET dev $IF1 src $IP1
|
||||
ip route add $P2_NET dev $IF2 src $IP2
|
||||
|
||||
ip route add $P1_NET dev $IF1 src $IP1 table $T1
|
||||
ip route add 127.0.0.0/8 dev lo table $T1
|
||||
ip route add default via $P1 table $T1
|
||||
|
||||
ip route add $P2_NET dev $IF2 src $IP2 table $T2
|
||||
ip route add 127.0.0.0/8 dev lo table $T2
|
||||
ip route add default via $P2 table $T2
|
||||
|
||||
ip route add $LAN_NET dev $LAN_IF
|
||||
ip route add $LAN_NET dev $LAN_IF table $T1
|
||||
ip route add $LAN_NET dev $LAN_IF table $T2
|
||||
|
||||
ip route add $WLAN_NET dev $WLAN_IF
|
||||
ip route add $WLAN_NET dev $WLAN_IF table $T1
|
||||
ip route add $WLAN_NET dev $WLAN_IF table $T2
|
||||
|
||||
ip route add $DMZ_NET dev $DMZ_IF
|
||||
ip route add $DMZ_NET dev $DMZ_IF table $T1
|
||||
ip route add $DMZ_NET dev $DMZ_IF table $T2
|
||||
|
||||
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
|
||||
|
||||
# IPv6
|
||||
# A décommenter plus tard :)
|
||||
|
||||
#ip -6 route add xxxx:xxxx:xxxx:d141::/64 dev $LAN_IF
|
||||
#ip -6 route add xxxx:xxxx:xxxx:d142::/64 dev $WLAN_IF
|
||||
#ip -6 route add xxxx:xxxx:xxxx:d143::/64 dev $DMZ_IF
|
||||
|
||||
#ip -6 route add xxxx:xxxx:xxxx:1591::/64 dev $LAN_IF
|
||||
#ip -6 route add xxxx:xxxx:xxxx:1592::/64 dev $WLAN_IF
|
||||
#ip -6 route add xxxx:xxxx:xxxx:1593::/64 dev $DMZ_IF
|
||||
```
|
||||
|
||||
Pensez à bien modifier les adresses IP et réseaux au début du fichier.
|
||||
Ce que nous faisons ici, c'est supprimer les tables de routage existantes pour les recréer "à la main", parce que c'est toujours mieux quand on fait soi-même...
|
||||
|
||||
Pour les routes liées à IPv6, il s'agit des préfixes que vous aurez choisi dans la console de gestion de vos Freebox (voir plus bas).
|
||||
|
||||
Enfin, le firewall:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
|
||||
# ----| Paramètres |-----------------------------------------------------------
|
||||
|
||||
WAN_IF="eth1"
|
||||
WAN_IP="xxx.xxx.xxx.xxx"
|
||||
|
||||
WAN2_IF="eth2"
|
||||
WAN2_IP="xxx.xxx.xxx.xxx"
|
||||
|
||||
LAN_IF="eth4"
|
||||
LAN_NET="10.1.0.0/16"
|
||||
|
||||
WLAN_IF="eth0"
|
||||
|
||||
DMZ_IF="eth3"
|
||||
DMZ_NET="10.0.0.0/16"
|
||||
|
||||
HOST_XMPP="10.0.0.3"
|
||||
HOST_SSH="10.0.0.4"
|
||||
HOST_MAIL="10.0.0.3"
|
||||
|
||||
iptables -t nat -F
|
||||
iptables -t nat -X
|
||||
|
||||
iptables -t mangle -F
|
||||
iptables -t mangle -X
|
||||
|
||||
iptables -F
|
||||
iptables -X
|
||||
|
||||
iptables -P INPUT DROP
|
||||
iptables -P OUTPUT ACCEPT
|
||||
iptables -P FORWARD ACCEPT
|
||||
|
||||
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
|
||||
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
|
||||
iptables -t mangle -A PREROUTING -j MARK --set-mark 1
|
||||
iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 2
|
||||
|
||||
# Freebox 1 et 2
|
||||
iptables -t mangle -A PREROUTING -d 10.0.255.1 -j MARK --set-mark 1
|
||||
iptables -t mangle -A PREROUTING -d 10.0.255.2 -j MARK --set-mark 2
|
||||
|
||||
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
|
||||
|
||||
# Freebox 1 et 2
|
||||
iptables -t nat -A PREROUTING -d 10.0.255.1 -j DNAT --to-destination 212.27.38.253
|
||||
iptables -t nat -A PREROUTING -d 10.0.255.2 -j DNAT --to-destination 212.27.38.253
|
||||
|
||||
# Masquerade (partage des connexions Internet)
|
||||
iptables -t nat -A POSTROUTING -o $WAN_IF -j SNAT --to-source $WAN_IP
|
||||
iptables -t nat -A POSTROUTING -o $WAN2_IF -j SNAT --to-source $WAN2_IP
|
||||
|
||||
iptables -A INPUT -i lo -j ACCEPT
|
||||
|
||||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
|
||||
# Décommenter pour pouvoir pinguer cette machine
|
||||
#iptables -A INPUT -p icmp -j ACCEPT
|
||||
|
||||
# On accepte ce qui vient des réseaux internes
|
||||
iptables -A INPUT -i $LAN_IF -j ACCEPT
|
||||
iptables -A INPUT -i $WLAN_IF -j ACCEPT
|
||||
iptables -A INPUT -i $DMZ_IF -j ACCEPT
|
||||
|
||||
# Autres règles (services locaux, NAT, etc.)
|
||||
```
|
||||
|
||||
Avec deux Freebox, il fallait trouver une astuce pour accéder à leur interface de gestion et au multi-poste.
|
||||
J'ai retenu l'idée de créer une zone DNS avec des enregistrements de type _freebox1.mondomaine.lan_ et _freebox2.mondomaine.lan_, pointant respectivement sur `10.0.255.1` et `10.0.255.2`, d'où la présence de ces adresses dans ce script.
|
||||
Après avoir marqué les paquets en fonction de la destination voulue, je DNAT sur l'IP de _mafreebox.freebox.fr_ (`212.27.38.253`).
|
||||
|
||||
Le "load-balancing" se fait aux lignes suivantes:
|
||||
|
||||
```
|
||||
iptables -t mangle -A PREROUTING -j MARK --set-mark 1
|
||||
iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 2
|
||||
```
|
||||
|
||||
où l'on marque un paquet sur deux avec `--set-mark 2`.
|
||||
|
||||
Certains sites risquent de poser problème avec ça, lorsqu'ils valident l'adresse IP au cours d'une session.
|
||||
Puisqu'un paquet sur deux passe par une connexion Internet, l'IP vue par le site en question change une fois sur deux (grosso modo).
|
||||
|
||||
Pour éviter cela, il faut marquer tous les paquets à destination de l'hôte en question avec la même marque.
|
||||
Ci-dessous, l'exemple avec la console de gestion de Online (_console.online.net_ soit `62.210.16.3`):
|
||||
|
||||
```
|
||||
iptables -t mangle -A PREROUTING -d 62.210.16.3 -j MARK --set-mark 1
|
||||
```
|
||||
|
||||
Cette ligne est à placer **avant** la ligne suivante:
|
||||
|
||||
```
|
||||
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
|
||||
```
|
||||
|
||||
Où l'on enregistre le marquage des paquets.
|
||||
Répéter l'opération pour tous les sites qui posent problème (d'expérience, ils sont peu nombreux, à vrai dire seul Online a requis cet ajout en ce qui me concerne mais la situation peut être bien différente en fonction des sites que vous fréquentez).
|
||||
|
||||
A noter qu'il est possible de remplacer la ligne:
|
||||
|
||||
```
|
||||
iptables -t mangle -A PREROUTING -d 62.210.16.3 -j MARK --set-mark 1
|
||||
```
|
||||
|
||||
Par:
|
||||
|
||||
```
|
||||
iptables -t mangle -A PREROUTING -d console.online.net -j MARK --set-mark 1
|
||||
```
|
||||
|
||||
Mais en ce qui me concerne, iptables n'aime pas.
|
||||
Il semblerait qu'une option du noyau soit requise, mais j'ignore laquelle (je vous invite à me l'indiquer si vous la connaissez).
|
||||
En tout cas, cela permet de simplifier la gestion de son firewall, c'est donc une piste à suivre.
|
||||
|
||||
Il suffit maintenant d'appeler ces deux scripts au démarrage de la machine.
|
||||
Sous debian, j'ai l'habitude de lancer mes scripts depuis le fichier `/etc/rc.local`.
|
||||
|
||||
### IPv6
|
||||
|
||||
IPv6, avec le routage, fait partie des choses qui me filent la frousse.
|
||||
Je me suis mis bien trop tard par rapport à ce que j'aurai dû/pu et c'est bien dommage, parce que finalement, ce n'est pas si compliqué.
|
||||
|
||||
Il faut préciser que ce que j'ai fais fonctionne, mais ce n'est peut être pas l'idéal.
|
||||
Aussi, j'accepte volontiers vos conseils pour améliorer ma configuration.
|
||||
|
||||
J'ai opté pour la délégation de préfixe: chaque Freebox permet de déléguer jusqu'à huit préfixes.
|
||||
J'en ai choisi trois par Freebox (un par réseau interne), et je les ai configuré comme suit:
|
||||
|
||||
Dans la console de gestion de chaque Freebox, aller dans _Paramètres de la Freebox_, _Mode avancé_ puis _Configuration IPv6_.
|
||||
|
||||

|
||||
|
||||
Je ne configure pas de nexthop sur le premier préfixe parce que sinon les interfaces de Cerbere reliées aux Freebox ne reçoivent plus d'adresse IPv6.
|
||||
L'adresse _Next Hop_ correspond à l'adresse _Lien local_ affichable via un simple `ifconfig` sur l'interface reliée à la Freebox.
|
||||
|
||||
Maintenant, on installe quelques paquets:
|
||||
|
||||
```
|
||||
apt-get install wide-dhcpv6-client radvd
|
||||
```
|
||||
|
||||
Et on les configure:
|
||||
|
||||
```
|
||||
nano /etc/wide-dhcpv6/dhcp6c.conf
|
||||
```
|
||||
|
||||
```
|
||||
# Interface de la première Freebox
|
||||
interface eth1 {
|
||||
send ia-pd 0;
|
||||
send ia-pd 1;
|
||||
send ia-pd 2;
|
||||
};
|
||||
|
||||
id-assoc pd 0 {
|
||||
# LAN
|
||||
prefix-interface eth4 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d141::/64 18000;
|
||||
};
|
||||
|
||||
id-assoc pd 1 {
|
||||
# WLAN
|
||||
prefix-interface eth0 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d142::/64 18000;
|
||||
};
|
||||
|
||||
id-assoc pd 2 {
|
||||
# DMZ
|
||||
prefix-interface eth3 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d143::/64 18000;
|
||||
};
|
||||
|
||||
# Interface de la deuxième Freebox
|
||||
interface eth2 {
|
||||
send ia-pd 3;
|
||||
send ia-pd 4;
|
||||
send ia-pd 5;
|
||||
};
|
||||
|
||||
id-assoc pd 3 {
|
||||
# LAN
|
||||
prefix-interface eth4 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1591::/64 18000;
|
||||
};
|
||||
|
||||
id-assoc pd 4 {
|
||||
# WLAN
|
||||
prefix-interface eth0 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1592::/64 18000;
|
||||
};
|
||||
|
||||
id-assoc pd 5 {
|
||||
# DMZ
|
||||
prefix-interface eth3 {
|
||||
sla-id 1;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1593::/64 18000;
|
||||
};
|
||||
```
|
||||
|
||||
Puis la configuration de radvd
|
||||
|
||||
```
|
||||
nano /etc/radvd.conf
|
||||
```
|
||||
|
||||
```
|
||||
# LAN
|
||||
interface eth4
|
||||
{
|
||||
AdvManagedFlag off;
|
||||
AdvOtherConfigFlag off;
|
||||
AdvSendAdvert on;
|
||||
AdvDefaultPreference high;
|
||||
AdvLinkMTU 1280;
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d141::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1591::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
};
|
||||
|
||||
# WLAN
|
||||
interface eth0
|
||||
{
|
||||
AdvManagedFlag off;
|
||||
AdvOtherConfigFlag off;
|
||||
AdvSendAdvert on;
|
||||
AdvDefaultPreference high;
|
||||
AdvLinkMTU 1280;
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d142::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1592::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
};
|
||||
|
||||
# DMZ
|
||||
interface eth3
|
||||
{
|
||||
AdvManagedFlag off;
|
||||
AdvOtherConfigFlag off;
|
||||
AdvSendAdvert on;
|
||||
AdvDefaultPreference high;
|
||||
AdvLinkMTU 1280;
|
||||
|
||||
prefix xxxx:xxxx:xxxx:d143::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
|
||||
prefix xxxx:xxxx:xxxx:1593::/64
|
||||
{
|
||||
AdvOnLink on;
|
||||
AdvAutonomous on;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
Là encore bien remplacer les préfixes par ceux que vous avez choisi dans l'interface de gestion des Freebox (ou autre modem IPv6).
|
||||
|
||||
Vous pouvez maintenant décommenter les lignes relatives aux routes IPv6 dans le premier script fourni plus haut, relancer ce dernier, et [tester votre connexion] [2].
|
||||
|
||||
Pour référence, [cette page] [3] m'a bien aidé dans mes pérégrinations.
|
||||
De même, la [_cheat sheet_ de Jens Roesen] [4] a été fort utile.
|
||||
|
||||
C'est juste avant la création d'un script avec `ip6tables` pour sécuriser la portion IPv6 de mon réseau que j'ai abandonné, faute de temps.
|
||||
Il me manque donc cette partie de mon réseau, ainsi que la gestion de mes DNS publics en IPv6.
|
||||
Je m'y collerai dès que j'en aurai l'occasion.
|
||||
|
||||
## Remerciements
|
||||
|
||||
Je me dois de remercier mon ami [chrisk] [5] qui m'a accordé beaucoup de son temps afin de mener à bien l'installation de mon réseau.
|
||||
C'est lui qui a patché puis recompilé le noyau de Cerbere à la sauce Debian, et qui m'a donné les pistes et informations utiles au load-balancing et au fail-over.
|
||||
Un grand merci à lui.
|
||||
|
||||
[1]: https://web.archive.org/web/20150220071306/http://www.ssi.bg/~ja/
|
||||
[2]: http://test-ipv6.com/
|
||||
[3]: http://www.ipv6ve.info/project-definition/ipv6-subnet-cheat-sheet-and-ipv6-cheat-sheet-reference
|
||||
[4]: http://www.roesen.org/files/ipv6_cheat_sheet.pdf
|
||||
[5]: https://linuxfr.org/users/chrisk
|
||||
Reference in New Issue
Block a user