Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
guide:installation_serveur_agregation_connexion_2014 [2014/06/09 19:05] – vivi | guide:installation_serveur_agregation_connexion_2014 [2021/04/18 20:24] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Installation serveurs agrégation connexion 2014 ====== | ||
+ | |||
+ | Mis en place en 2014. | ||
+ | |||
- | **Installation serveurs agrégation connexion 2014** | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | L' | + | L' |
Tout sera connecté au serveur chez moi qui fournira une connexion internet unifiée. Même combat côté internet, mon serveur installé servira de point de sortie unifié vers le net. | Tout sera connecté au serveur chez moi qui fournira une connexion internet unifiée. Même combat côté internet, mon serveur installé servira de point de sortie unifié vers le net. | ||
- | Concernant la connexion ADSL, j' | + | Concernant la connexion ADSL, j' |
**Vocabulaire :** | **Vocabulaire :** | ||
- | * Je parlerai de __**serveur maison**__// | + | * Je parlerai de __**serveur maison**__// |
- | * Je parlerai de __**serveur dédié**__// | + | * Je parlerai de __**serveur dédié**__// |
+ | |||
+ | |||
+ | |||
+ | ====== 1. Installation du serveur dédié ====== | ||
- | ====== 1. Installation du serveur sur le net ====== | ||
===== 1.1. Installation initiale du serveur ===== | ===== 1.1. Installation initiale du serveur ===== | ||
Ligne 28: | Ligne 35: | ||
**TODO SCREENS** | **TODO SCREENS** | ||
+ | |||
+ | |||
===== 1.2. Préparation de la configuration ===== | ===== 1.2. Préparation de la configuration ===== | ||
- | Pour cette recette, il vous faudra utiliser les **3 ingrédients** | + | Pour cette recette, il vous faudra utiliser les **3 ingrédients** |
* OpenVPN //(voir // // | * OpenVPN //(voir // // | ||
* Le système de bridging //(voir // // | * Le système de bridging //(voir // // | ||
* Le module de bonding //(voir // // | * Le module de bonding //(voir // // | ||
+ | |||
+ | |||
==== 1.2.1. Installation d' | ==== 1.2.1. Installation d' | ||
Ligne 43: | Ligne 54: | ||
</ | </ | ||
- | Nous utiliserons OpenVPN pour monter **2 tunnels VPN** l'un avec notre première connexion internet (la 4G) pour moi et l' | + | Nous utiliserons OpenVPN pour monter **2 tunnels VPN** l'un avec notre première connexion internet (la 4G) pour moi et l' |
+ | |||
==== 1.2.2. Installation du système de bridging ==== | ==== 1.2.2. Installation du système de bridging ==== | ||
Ligne 50: | Ligne 63: | ||
sudo apt-get install bridge-utils | sudo apt-get install bridge-utils | ||
</ | </ | ||
+ | |||
+ | |||
==== 1.2.3. Activation du module de bonding ==== | ==== 1.2.3. Activation du module de bonding ==== | ||
Ligne 71: | Ligne 86: | ||
rtc | rtc | ||
bonding | bonding | ||
+ | dummy | ||
</ | </ | ||
Ligne 78: | Ligne 94: | ||
sudo modprobe bonding | sudo modprobe bonding | ||
</ | </ | ||
+ | |||
+ | |||
==== 1.2.4. Activation de l'ip forwarding ==== | ==== 1.2.4. Activation de l'ip forwarding ==== | ||
Ligne 92: | Ligne 110: | ||
net.ipv4.ip_forward=1 | net.ipv4.ip_forward=1 | ||
</ | </ | ||
+ | |||
+ | ==== 1.2.6. Activation du NAT ==== | ||
+ | |||
+ | C'est le nat qui va permettre le routage final. | ||
+ | |||
+ | Une bonne idée est de s' | ||
+ | |||
+ | Ce qui va donner chez moi ce genre de chose: | ||
+ | |||
+ | <code bash> | ||
+ | nano nat.sh | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Configure here your interfaces | ||
+ | # | ||
+ | EXTIF=" | ||
+ | INTIF=" | ||
+ | |||
+ | # | ||
+ | # Commands path | ||
+ | # | ||
+ | DEPMOD=/ | ||
+ | MODPROBE=/ | ||
+ | |||
+ | # | ||
+ | # General information | ||
+ | # | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | # | ||
+ | # Checking requested linux kernel modules | ||
+ | # | ||
+ | echo " | ||
+ | $DEPMOD -a | ||
+ | echo " | ||
+ | $MODPROBE ip_tables | ||
+ | echo " | ||
+ | $MODPROBE nf_conntrack | ||
+ | echo " | ||
+ | $MODPROBE nf_conntrack_ftp | ||
+ | echo " | ||
+ | $MODPROBE nf_conntrack_irc | ||
+ | echo " | ||
+ | $MODPROBE iptable_nat | ||
+ | echo " | ||
+ | $MODPROBE nf_nat_ftp | ||
+ | |||
+ | # | ||
+ | # Enabling ip forwarding | ||
+ | # | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | |||
+ | # | ||
+ | # Setting iptables rules | ||
+ | # | ||
+ | echo " | ||
+ | iptables-restore << | ||
+ | *nat | ||
+ | -A POSTROUTING -o " | ||
+ | COMMIT | ||
+ | *filter | ||
+ | :INPUT ACCEPT [0:0] | ||
+ | :FORWARD DROP [0:0] | ||
+ | :OUTPUT ACCEPT [0:0] | ||
+ | -A FORWARD -i " | ||
+ | -A FORWARD -i " | ||
+ | -A FORWARD -j LOG | ||
+ | COMMIT | ||
+ | EOF | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | After configuring the 2 variables, save the script below as nat.sh and make it executable by doing | ||
+ | |||
+ | <code bash> | ||
+ | chmod a+x nat.sh | ||
+ | </ | ||
+ | |||
+ | Now, test the script by running as root | ||
+ | |||
+ | <code bash> | ||
+ | sudo sh nat.sh | ||
+ | </ | ||
+ | |||
+ | Investigate the messages from the console output to see if any error happened. If everything looks fine, use another host in the internal network to test if it can access the external network (presumably the Internet). A quick way to test is pinging Google public DNS from the console. | ||
+ | |||
+ | <code bash> | ||
+ | ping -c 3 -W 10 8.8.8.8 | ||
+ | </ | ||
+ | |||
+ | If ping responds, make our new script bootable so we don't have to run the script every time we restart. | ||
+ | |||
+ | <code bash> | ||
+ | sudo mv nat.sh / | ||
+ | </ | ||
+ | |||
+ | See : https:// | ||
+ | |||
+ | <code bash> | ||
+ | sudo systemctl enable rc-local.service | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | # Executing nat script | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | As a final test, restart your computer and test to see if you still have the same functionality. If so then congratulations! If not then make sure you followed the above correctly so the script is bootable. | ||
+ | |||
+ | |||
+ | Mais pour mémoire le point important est celui-ci: | ||
+ | |||
+ | <code bash> | ||
+ | iptables -A POSTROUTING -t nat -j MASQUERADE | ||
+ | </ | ||
+ | |||
+ | Pour ne pas perdre le NAT, lancer cette commande à chaque boot par exemple en l' | ||
==== 1.2.5. Récupérer des ip / mac online.net ==== | ==== 1.2.5. Récupérer des ip / mac online.net ==== | ||
Ligne 97: | Ligne 244: | ||
Dans le montage choisi, j' | Dans le montage choisi, j' | ||
- | Evidemment, on ne peut pas aller sur le réseau d'un hébergeur avec l'ip de son choix, il faut donc passer par l' | + | Evidemment, on ne peut pas aller sur le réseau d'un hébergeur avec l'ip de son choix, il faut donc passer par l' |
**Au final pour ma configuration il faut 3 ipfailover :** | **Au final pour ma configuration il faut 3 ipfailover :** | ||
- | * 1 pour monter le tunnel VPN 1 sur mon serveur dédié | + | * 1 pour monter le tunnel VPN 1 sur mon serveur dédié |
- | * 1 pour monter le tunnel VPN 2 sur mon serveur dédié | + | * 1 pour monter le tunnel VPN 2 sur mon serveur dédié |
- | * 1 pour mon serveur à la maison | + | * 1 pour mon serveur à la maison |
Je prends uniquement des IP failover pour les VPN pour me permettre de les brancher facilement sur d' | Je prends uniquement des IP failover pour les VPN pour me permettre de les brancher facilement sur d' | ||
Ligne 110: | Ligne 257: | ||
Dernier détail important, comme online.net (et probablement n' | Dernier détail important, comme online.net (et probablement n' | ||
+ | |||
+ | |||
===== 1.3. Configurer OpenVPN ===== | ===== 1.3. Configurer OpenVPN ===== | ||
+ | |||
+ | |||
==== 1.3.1. Introduction ==== | ==== 1.3.1. Introduction ==== | ||
Ligne 117: | Ligne 268: | ||
On est toujours sur le serveur à ce stade, il s'agit maintenant de préparer la **configuration serveur pour 2 tunnels VPN**. | On est toujours sur le serveur à ce stade, il s'agit maintenant de préparer la **configuration serveur pour 2 tunnels VPN**. | ||
- | __**Note importante :**__ il est essentiel de comprendre que l' | + | __**Note importante :**__ il est essentiel de comprendre que l' |
+ | |||
- | ==== 1.3.1. Le serveur 1 ==== | + | ==== 1.3.2. Préparation de la configuration |
On crée le dossier de logs pour nos tunnels (j'ai fait comme j'ai trouvé à droite à gauche mais il y a sans doute mieux à faire) : | On crée le dossier de logs pour nos tunnels (j'ai fait comme j'ai trouvé à droite à gauche mais il y a sans doute mieux à faire) : | ||
Ligne 141: | Ligne 294: | ||
Le contenu du fichier : | Le contenu du fichier : | ||
- | <code bash> | + | <code bash># |
- | #!/bin/sh | + | |
DEV=$1 | DEV=$1 | ||
Ligne 150: | Ligne 302: | ||
</ | </ | ||
- | Le fichier de configuration du premier serveur ressemble à cela chez moi : | + | On crée ensuite le script complémentaire : |
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Et le contenu du fichier : | ||
+ | |||
+ | <code bash># | ||
+ | |||
+ | DEV=$1 | ||
+ | |||
+ | /sbin/ip link set " | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | ==== 1.3.3. Le fichier de configuration OpenVPN (enfin !) ==== | ||
+ | |||
+ | On cree le fichier de configuration du premier serveur pour le premier tunnel : | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Le fichier de configuration du premier serveur ressemble à cela chez moi //(les parties à adapter à votre configuration commencent par TO_CHANGE)// | ||
< | < | ||
Ligne 166: | Ligne 342: | ||
# Main configuration | # Main configuration | ||
# | # | ||
- | local IP_FAILOVER_DEDIE_1 | + | local TO_CHANGE_IP_FAILOVER_DEDIE_1 |
- | port PORT_1 | + | port TO_CHANGE_PORT_1 |
proto tcp-server | proto tcp-server | ||
dev tap1 | dev tap1 | ||
Ligne 201: | Ligne 377: | ||
verb 4 | verb 4 | ||
</ | </ | ||
+ | |||
+ | Eléments importants : | ||
+ | |||
+ | * **keepalive 1 5** permet de régler le maintient d' | ||
+ | * **up-restart** | ||
+ | * **down ** | ||
+ | * **ipchange ** | ||
+ | **Pour le deuxième serveur on part du premier :** | ||
+ | |||
+ | < | ||
+ | sudo cp -av / | ||
+ | </ | ||
+ | |||
+ | Et pour le contenu il suffit d' | ||
+ | |||
+ | * TO_CHANGE_IP_FAILOVER_DEDIE_1 => TO_CHANGE_IP_FAILOVER_DEDIE_2 | ||
+ | * TO_CHANGE_PORT_1 => TO_CHANGE_PORT_2 | ||
+ | * tap1 => tap2 | ||
+ | |||
+ | |||
+ | |||
+ | ==== 1.3.4. up-restart down et ipchange sont dans un bateau ==== | ||
+ | |||
+ | Un petit aparté sur ces éléments et les scripts qui vont avec. C'est un truc très très con que j'ai du fouiller et bricoler au fur et a mesure. | ||
+ | |||
+ | En fait, les interfaces montées avec OpenVPN (ici tap1 et tap2) ne sont pas mises à jour correctement du point de vue link. C'est à dire que **quand le tunnel VPN tombe, l' | ||
+ | |||
+ | Bref, par défaut vous allez monter votre bonding avec 2 liens en répartition de charge et si un tunnel tombe, votre bonding continuera à envoyer du traffic sur le lien mort ce qui vous fera une perte de 50% des paquets. Bref, l' | ||
+ | |||
+ | Donc voilà, avec les petites ruses précédentes, | ||