« Routeur Linux » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
 
(85 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Routeur IPv4 ==
= Topologie =


=== Routage des paquets IPv4 ===
* Voici les '''paramètres IPv4''' de notre réseau :
** Notre '''réseau''' est adressé sur la plage IP '''192.168.1.0/24'''.
** La '''routeur Linux''' a pour adresse IPv4 fixe '''192.168.1.254'''.
** Le '''serveur DNS''' local a pour adresse IPv4 fixe '''192.168.1.8'''.
** Le '''serveur Web''' local a pour adresse IPv4 fixe '''192.168.1.49'''.
** La plage IPv4 '''192.168.1.100 à 192.168.1.130''' sera attribuée dynamique via '''DHCP'''.


* Dé-commenter la ligne suivante dans le fichier '''/etc/sysctl.conf''' :
* Voici les paramètres '''IPv6''' de notre réseau :
** Notre prefixe '''IPv6''' attribué par notre opérateur est '''2001:3615:c0c0:c100::/56'''.
** Le réseau '''IPv6''' utilisé pour adresser nos machines est '''2001:3615:c0c0:c101::/64'''.
** Le réseau '''IPv6''' utilisé pour adresser nos machines localement est '''fc00:192:168:1::/64'''.
 
= Session PPP =
 
* L'établissement de la connexion Internet via le FAI s'établit par l'intermédiaire du protocole '''PPP ''(Point-to-Point Protocol)'''''. Pour établir cette liaison, l'opérateur fournit au client final '''des identifiants de session PPP''' qu'il devra configurer sur son '''modem/routeur''' si ce dernier n'est pas automatiquement configuré.
 
== Régler le routeur/modem ADSL en mode "bridge" ==
 
Pour que le routeur Linux puisse établir la session '''PPP''' et récupérer les paramètres '''IP''', cette fonction doit être au préalable désactivée sur le '''modem ADSL''' / box de l'opérateur ''( c.f. : [[Linksys_AM200#Mode_.22bridge.22_ou_mode_.22pont.22|Exemple pour le modem Linksys AM200]])''.
 
== Connexion PPP ==
 
* Le modem étant configuré en mode '''''"bridge"''''', le routeur devra de ce fait initialiser la session '''PPP'''. Pour cela, il sera nécessaire d'avoir les identifiants d'accès fournis par le fournisseur d'accès à Internet.
 
* Dans un premier temps, il faut lancer l'utilitaire '''pppoeconf''' dans un terminal et se laisser guider par l'assistant.
 
{{ Box Console | objet=sudo pppoeconf }}
 
* Une fois l'assistant terminé, il est possible de voir si la session '''ppp''' a été correctement initialisée en vérifiant l'état des interfaces :
 
{{ Box Console | objet=ifconfig }}
 
* Il doit en résulter l'apparition d'une interface nommée '''ppp0''', comme ceci par exemple :
 
[[Image:IPV6_IFCONFIG_PPP.JPG]]
 
<div style="width:100%;background-color:#dddddd;margin-top:15px; margin-bottom:15px">
<div style="width:100%;background-color:#CCCCCC;font-family:cursive;font-size:16px;height:25px;text-align:center">Support IPv6</div>
 
<div style="width:99%;padding:5px;">
 
{{ Box Attention | objet=Vous devez au préalable avoir installer et configuré  [[Routeur_Linux#Configuration_du_client_DHCPv6|DHCPv6 Client]]}}
 
* Afin de récupérer l''''IPv6''' affecté par le '''FAI''' depuis la session '''PPP''', il faudra éditer le fichier de configuration '''/etc/ppp/peers/dsl-provider''' et d'y ajouter à la fin la ligne suivante :
 
+ipv6 ipv6cp-use-ipaddr
 
* Puis de '''réinitialiser''' la session avec les commandes suivantes :
 
{{ Box Console | objet=poff dsl-provider<br />
pon dsl-provider }}
 
* En vérifiant avec la commande '''ifconfig''', on observe l'apparition de l''''adresse globale''' IPv6 affectée à l'interface '''ppp''' :
 
[[Image:IPV6_IFCONFIG6_PPP.JPG]]
 
{{ Box Remarque | objet=Il est possible d'affecter une IP manuellement grâce à la commande ifconfig ppp0 add 2000:a:b:c::1/64 par exemple.}}
 
</div>
</div>
 
== Activation du routage IPv6 ==
 
* Une fois la session ppp établie, on redémarre le service '''radvd''' ou '''wide-dhcpv6-client''' ''(selon votre configuration)''.
 
{{ Box Console | objet=service radvd restart }}
 
<br />
 
{{ Box Console | objet=service wide-dhcpv6-client restart }}
 
* Si tout fonctionne bien, le routeur doit récupérer son '''préfixe IPv6'''. On peut vérifier ce dernier dans une nouvelle entrée dans la table de routage :
 
{{ Box Console | objet=ip -6 route<br />
<span style="color:red">2001:3615:c0c0:c101::/64 dev eth0  proto kernel  metric 256</span><br />
fe80::/64 dev eth0  proto kernel  metric 256 <br />
fe80::/10 dev ppp0  metric 1 <br />
fe80::/10 dev ppp0  proto kernel  metric 256
}}
 
* Pour activer le '''routage IPv6''', il suffit de saisir la commande suivante dans le terminal.
 
{{ Box_Console | objet=sudo sysctl -w net.ipv6.conf.all.forwarding=1 }}
 
* On ajoute aussi la route par défaut pour sortir sur l'interface '''ppp0'''.
 
{{ Box Console | objet=ip -6 route add ::/0 dev ppp0}}
 
* Pour tester la validité du routage il suffit d'effectuer un ping vers '''ipv6.google.com''' par exemple :
 
{{ Box Console | objet=ping6 ipv6.google.com}}
 
= Configuration IP =
 
* Il est nécessaire de paramétrer une IP statique sur le routeur. Si ce dernier dispose de plusieurs interfaces, il sera nécessaire d'attribuer une IP statique pour chaque interface.
** Pour '''Ubuntu''' <span style="color:green">version >= 18.04 LTS</span> voir [[:NetPlan]].
** Pour '''Ubuntu''' <span style="color:red">version < 18.04 LTS</span> voir [[:Network]].
 
= Routage IPv4 =
 
* Le routage IPv4 permet aux machines du LAN de communiquer sur Internet.
 
== Routage des paquets IPv4 ==
 
* Dé-commenter la ligne suivante dans le fichier '''/etc/sysctl.conf'''.


  net.ipv4.ip_forward=1
  net.ipv4.ip_forward=1


{{ Box Information | objet=Les modifications sont prises en compte après redémarrage de la machine. }}
* Et saisir la commande suivante pour que la configuration s'applique immédiatement.
 
{{ Box Console | objet=sudo sysctl -w net.ipv4.ip_forward=1 }}


=== Translation d'adresse ===
== Translation d'adresse ==


* Activation de la translation d’adresse pour les machines du réseau '''192.168.1.0/24''' :
* Activation de la translation d’adresse pour les machines du réseau '''192.168.1.0/24''' :


{{ Box Console | objet=iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE }}
{{ Box Console | objet=iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE }}
 
* Il est également possible de choisir son adresse '''IPv4 de sortie''' si l'on dispose de plusieurs '''IPs publiques''' :
 
{{ Box Console | objet=iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source <ip_publique> }}


* Il est également possible de choisir son adresse IPv4 de sortie si l'on dispose de plusieurs IPs publiques :
<br />


{{ Box Console | objet=iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ppp0 -j SNAT --to-source <ip_publique> }}
{{ Box Information | objet=Les machines du LAN sont dès à présent en mesure de pouvoir se connecter à Internet. }}


=== Redirection de port DNAT ===
== FTP derrière NAT ==


*  
* Pour activer le '''NAT''' pour les connexions '''ftp''' :


{{ Box Console | objet=iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip_publique> -i ppp0 --dport 25 -j DNAT --to-destination 192.168.1.49:25 }}
{{ Box Console | objet=modprobe nf_nat_ftp }}


== Routage IPv6 ==
== Redirection de port DNAT ==


=== Configuration sans état Stateless ===
* La redirection de port '''DNAT''' permet de rendre accessible depuis le réseau '''Internet''', une machine sur le '''LAN''' pour un protocole donnée. Par exemple, nous souhaitons rendre accessible notre '''serveur web 192.168.1.49''' depuis l'Internet.


* Basée sur l'adresse '''MAC''' qui utilise le '''Neighbor Discovery Protocol''' '''''(NDP)'''''. '''Radvd''' envoi la configuration IPv6 à intervalle régulier ''(route par défaut et préfixe)'' sans se soucier sur les machines distantes sont configurées.
* Nous créons une première règles '''DNAT''' qui va rediriger tous les paquets à destination de notre '''IP publique''' sur le port '''TCP HTTP 80 ''(web)''''' vers notre serveur web ayant pour adresse '''IP 192.168.1.49'''.


* Installation de radvd
{{ Box Console | objet=iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip_publique> -i ppp0 --dport 80 -j DNAT --to-destination 192.168.1.49:80 }}


* Configuration de radvd
== Sauvegarde des règles iptables ==
 
* Par défaut, les règles de filtrage sont gérées via l'utilitaire '''UFW''' ''(surcouche administrative d'iptables)''. Bien que plus simple, l'utilitaire reste néanmoins moins complet que '''iptables'''.
 
* Procéder à l'installation des paquets '''iptables-persistent''' et '''netfilter-persistent'''.
 
{{ Box_Console | objet=apt-get install iptables-persistent netfilter-persistent }}
 
* Pour sauvegarder les règles, il suffit d'exécuter cette commande :
 
{{ Box_Console | objet=netfilter-persistent save}}
 
* Les règles sont alors enregistrées dans :
** '''/etc/iptables/rules.v4''' pour les règles basées sur IPv4.
** '''/etc/iptables/rules.v6''' pour les règles basées sur IPv6.
 
* Il est possible d'effacer l'ensemble des règles '''iptables''' :
 
{{ Box_Console | objet=netfilter-persistent flush}}
 
* Ou encore de relire les fichiers des règles '''iptables''' :
 
{{ Box Console | objet=netfilter-persistent reload}}
 
<br />
 
{{ Box_Attention | objet=une règle incorrecte peut vous faire perdre la main sur votre machine !}}
 
<div style="width:100%;background-color:#dddddd;margin-top:15px; margin-bottom:15px">
<div style="width:100%;background-color:#CCCCCC;font-family:cursive;font-size:16px;height:25px;text-align:center">Ubuntu versions < 18.04</div>
 
<div style="width:99%;padding:5px;">
 
* Lors du prochain redémarrage, vos règles iptables seront perdues. Pour sauvegarder les règles iptables en vigueur, on utilisera la commande '''iptables-save''' :
 
{{ Box Console | objet=iptables-save > /etc/iptables.up.rules }}
 
* Les règles étant sauvegardées dans le fichier '''iptables.up.rules''', il est possible de recharger les règles manuellement grâce à la commande '''iptables-restore''' :
 
{{ Box Console | objet=iptables-restore < /etc/iptables.up.rules }}
 
* On peut aussi appliquer le chargement de ces règles à chaque démarrage / redémarrage de l'interface réseau en ajoutant la ligne suivante dans le fichier '''/etc/network/interfaces''' :
 
post-up iptables-restore < /etc/iptables.up.rules
 
</div>
</div>
 
== Serveur DHCP ==
 
* Configuration d'un serveur '''DHCP''' avec [[ISC-DHCP-SERVER]].
 
= Routage IPv6 =
 
== Routage des paquets IPv6 ==
 
* Dé-commenter la ligne suivante dans le fichier '''/etc/sysctl.conf''' :
 
net.ipv6.conf.all.forwarding=1
 
== Configuration sans état Stateless ==
 
* Basée sur l'adresse '''MAC''' qui utilise le '''Neighbor Discovery Protocol''' '''''(NDP)'''''. '''Radvd''' envoi la configuration '''IPv6''' à intervalle régulier ''(route par défaut et préfixe)'' sans se soucier si les machines distantes parviennent à se configurer automatiquement.
 
* Ce démon peut être déployé en installant le paquet '''radvd''' sur le routeur.
 
{{ Box Console | objet=apt-get install radvd }}
 
* La configuration de '''radvd''' est enregistrée dans le fichier '''/etc/radvd.conf'''. Nous renseignerons ce fichier avec les éléments suivants :


  interface eth0
  interface eth0
Ligne 44 : Ligne 220 :
               AdvRouterAddr on;
               AdvRouterAddr on;
       };
       };
       RDNSS fe80::b42e:1bff:fe13:aa4c {
       RDNSS 2001:3615:c0c0:c100::8 {
       };
       };
  };
  };


=== Configuration avec état Stateful ===
* Avec :
** '''eth0''' qui est l'interface '''LAN''' du routeur.
** '''prefix 2001:3615:c0c0:c100::/64''' qui est notre '''pool IPv6''' attribué par notre FAI.
** '''RDNSS 2001:3615:c0c0:c100::8''' qui est notre '''serveur DNS IPv6''' ''(peut être un serveur DNS tiers)''.
 
{{ Box Remarque | objet=Cette configuration doit coïncidé avec celle de RADVD : association interface et préfixe IPv6 utilisé. }}
 
== Configuration avec état Stateful ==


==== Configuration de Radvd ====
=== Configuration de Radvd ===


* '''Radvd''' n'est ici utilisé uniquement pour annoncer le routeur de sortie ''(route par défaut)''.
* '''Radvd''' n'est ici utilisé uniquement pour annoncer le routeur de sortie ''(route par défaut)''.
Ligne 67 : Ligne 250 :
  };
  };


'''AdvSendAdvert :''' Activation du daemon.
* Avec :
'''AdvManagedFlag :''' Configuration IP gérée en Statefull / DHCPv6.
** '''AdvSendAdvert :''' Activation du daemon.
'''AdvOtherConfigFlag :''' Autre informations fournis en Statefull / DHCPv6 (DNS, baux DHCP, domaine de recherche, ...).
** '''AdvManagedFlag :''' Configuration IP gérée en Statefull / DHCPv6.
'''AdvAutonomous :''' Annonce du préfixe - désactivé dans le cas d'une configuration Statefull car géré par DHCPv6.
** '''AdvOtherConfigFlag :''' Autre informations fournis en Statefull / DHCPv6 (DNS, baux DHCP, domaine de recherche, ...).
'''AdvRouterAddr :''' Annonce de la passerelle de sortie / route par défaut.
** '''AdvAutonomous :''' Annonce du préfixe - désactivé dans le cas d'une configuration Statefull car géré par DHCPv6.
** '''AdvRouterAddr :''' Annonce de la passerelle de sortie / route par défaut.
 
=== Configuration du client DHCPv6 ===
 
* Le client '''DHCPv6''' permet de récupérer le '''préfixe IPv6''' attribué par l'opérateur.
 
* L'installation du client '''dhcpv6''' s'effectue en installant le paquet '''wide-dhcpv6-client'''.
 
{{ Box Console | objet=sudo apt-get install wide-dhcpv6-client }}
 
* Le fichier de configuration du service se trouve dans '''/etc/wide-dhcpv6/''' et s'appelle '''dhcp6c.conf'''.
 
interface ppp0 {
    send ia-pd 0;
};
id-assoc pd 0 {
    prefix-interface eth0 {
        sla-len 8;
        sla-id 1;
    };
};
 
{{ Box Remarque | objet=La valeur de SLA-LEN se calcul de la manière suivante : 64-longueur du préfixe. Dans notre cas, l'opérateur nous attribut un /56 ce qui donne 64-56 = 8.}}
 
* Pour que les modifications soient prises en compte, il faut redémarrer le service.
 
{{ Box Console | objet=service wide-dhcpv6-client restart }}
 
* Pour valider le bon fonctionnement, on vérifie la présence du préfixe dans la table de routage.
 
{{ Box Console | objet=ip -6 route<br />
<span style="color:green">2001:3615:c0c0:c101::/64 dev eth0  proto kernel  metric 256</span><br />
fe80::/64 dev eth0  proto kernel  metric 256<br />
fe80::/10 dev ppp0  metric 1<br />
fe80::/10 dev ppp0  proto kernel  metric 256<br />
default dev ppp0  metric 1024  }}
 
=== Configuration du serveur DHCPv6 ===
 
* L'installation du '''serveur dhcpv6''' s'effectue en installant le paquet '''wide-dhcpv6-client'''.
 
{{ Box Console | objet=sudo apt-get install wide-dhcpv6-server }}
 
* La configuration du service doit être définie dans le fichier '''/etc/wide-dhcpv6/dhcp6c.conf'''. Si ce dernier n'existe pas, il faudra le créer.
 
option domain-name-servers fc00:10:46::46;
option domain-name "net.glx";
interface eth0 {
        address-pool pool1 3600;
};
pool pool1 {
        range 2001:3615:c0c0:c100::200 to 2001:3615:c0c0:c100::400;
};
 
* Avec :
** '''domain-name-servers :''' indiquant '''le serveur DNS''' local de notre réseau ''(peut un serveur DNS tierce)''.
** '''domain-name :''' indiquant notre '''préfixe DNS''' ''(optionnel)''.
** '''address-pool :''' définissant un '''pool dynamique d'attribution d'IP''' ici nommé '''pool1''' et ayant pour durée de vie '''3600 secondes'''.
** '''range :''' qui définit la plage d'IP attribuable par le '''pool1'''.
 
* Pour que les modifications soient prises en compte, il faut redémarrer le service.
 
{{ Box Console | objet=service wide-dhcpv6-server restart }}
 
= Définition d'un second réseau IPv6 =
 
* Sur notre routeur, nous disposons d'une seconde interface réseau '''eth1''' sur laquelle nous souhaitons activer un second réseau '''IPv6'''. Notre bloc IPv6 '''/56''' nous permet d'utiliser jusqu'à '''64 réseaux''' différents.
 
* Dans notre cas, nous attribueront le bloc IPv6 '''2001:3615:c0c0:c102/64''' à l'interface '''eth1'''.
 
== Configuration avec état Stateful ==
 
=== Configuration de radvd ===
 
* Nous définissons l'interface '''eth1''' dans le fichier de configuration de '''radvd''' pour l'annonce du préfixe IPv6 associé.
 
interface eth1
{
      AdvSendAdvert on;
      AdvManagedFlag on;
      AdvOtherConfigFlag on;
      prefix 2001:3615:c0c0:c101::/64 {
              AdvAutonomous off;
              AdvRouterAddr on;
              MinRtrAdvInterval 3;
              MaxRtrAdvInterval 10;
      };
};
 
=== Configuration du client DHCPv6 ===
 
* Après la définition de notre premier réseau IPv6 sur l'interface réseau '''eth0''' :
 
prefix-interface eth0 {
      sla-len 8;
      sla-id 1;
};
 
* Nous ajoutons la configuration pour l'interface '''eth1''' :
 
prefix-interface eth1 {
      sla-len 8;
      sla-id 2;
};


==== Configuration DHCPv6 ====
* Ici, nous affectons la valeur 2 au paramètre sla-id ''('''S'''ite-'''L'''evel '''A'''ggregation '''Id'''entifier)''. Cela permet d'indiquer que nous utilisons le second réseau '''/64''' du bloc IPv6 qui nous a été attribué.


* Installation de dhcpv6
[[Category:Routage]]

Dernière version du 27 septembre 2023 à 16:10

Topologie

  • Voici les paramètres IPv4 de notre réseau :
    • Notre réseau est adressé sur la plage IP 192.168.1.0/24.
    • La routeur Linux a pour adresse IPv4 fixe 192.168.1.254.
    • Le serveur DNS local a pour adresse IPv4 fixe 192.168.1.8.
    • Le serveur Web local a pour adresse IPv4 fixe 192.168.1.49.
    • La plage IPv4 192.168.1.100 à 192.168.1.130 sera attribuée dynamique via DHCP.
  • Voici les paramètres IPv6 de notre réseau :
    • Notre prefixe IPv6 attribué par notre opérateur est 2001:3615:c0c0:c100::/56.
    • Le réseau IPv6 utilisé pour adresser nos machines est 2001:3615:c0c0:c101::/64.
    • Le réseau IPv6 utilisé pour adresser nos machines localement est fc00:192:168:1::/64.

Session PPP

  • L'établissement de la connexion Internet via le FAI s'établit par l'intermédiaire du protocole PPP (Point-to-Point Protocol). Pour établir cette liaison, l'opérateur fournit au client final des identifiants de session PPP qu'il devra configurer sur son modem/routeur si ce dernier n'est pas automatiquement configuré.

Régler le routeur/modem ADSL en mode "bridge"

Pour que le routeur Linux puisse établir la session PPP et récupérer les paramètres IP, cette fonction doit être au préalable désactivée sur le modem ADSL / box de l'opérateur ( c.f. : Exemple pour le modem Linksys AM200).

Connexion PPP

  • Le modem étant configuré en mode "bridge", le routeur devra de ce fait initialiser la session PPP. Pour cela, il sera nécessaire d'avoir les identifiants d'accès fournis par le fournisseur d'accès à Internet.
  • Dans un premier temps, il faut lancer l'utilitaire pppoeconf dans un terminal et se laisser guider par l'assistant.

sudo pppoeconf

  • Une fois l'assistant terminé, il est possible de voir si la session ppp a été correctement initialisée en vérifiant l'état des interfaces :

ifconfig

  • Il doit en résulter l'apparition d'une interface nommée ppp0, comme ceci par exemple :

IPV6 IFCONFIG PPP.JPG

Support IPv6

Vous devez au préalable avoir installer et configuré DHCPv6 Client

  • Afin de récupérer l'IPv6 affecté par le FAI depuis la session PPP, il faudra éditer le fichier de configuration /etc/ppp/peers/dsl-provider et d'y ajouter à la fin la ligne suivante :
+ipv6 ipv6cp-use-ipaddr
  • Puis de réinitialiser la session avec les commandes suivantes :

poff dsl-provider
pon dsl-provider

  • En vérifiant avec la commande ifconfig, on observe l'apparition de l'adresse globale IPv6 affectée à l'interface ppp :

IPV6 IFCONFIG6 PPP.JPG

Il est possible d'affecter une IP manuellement grâce à la commande ifconfig ppp0 add 2000:a:b:c::1/64 par exemple.

Activation du routage IPv6

  • Une fois la session ppp établie, on redémarre le service radvd ou wide-dhcpv6-client (selon votre configuration).

service radvd restart


service wide-dhcpv6-client restart

  • Si tout fonctionne bien, le routeur doit récupérer son préfixe IPv6. On peut vérifier ce dernier dans une nouvelle entrée dans la table de routage :

ip -6 route
2001:3615:c0c0:c101::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/10 dev ppp0 metric 1
fe80::/10 dev ppp0 proto kernel metric 256

  • Pour activer le routage IPv6, il suffit de saisir la commande suivante dans le terminal.

sudo sysctl -w net.ipv6.conf.all.forwarding=1

  • On ajoute aussi la route par défaut pour sortir sur l'interface ppp0.

ip -6 route add ::/0 dev ppp0

  • Pour tester la validité du routage il suffit d'effectuer un ping vers ipv6.google.com par exemple :

ping6 ipv6.google.com

Configuration IP

  • Il est nécessaire de paramétrer une IP statique sur le routeur. Si ce dernier dispose de plusieurs interfaces, il sera nécessaire d'attribuer une IP statique pour chaque interface.
    • Pour Ubuntu version >= 18.04 LTS voir NetPlan.
    • Pour Ubuntu version < 18.04 LTS voir Network.

Routage IPv4

  • Le routage IPv4 permet aux machines du LAN de communiquer sur Internet.

Routage des paquets IPv4

  • Dé-commenter la ligne suivante dans le fichier /etc/sysctl.conf.
net.ipv4.ip_forward=1
  • Et saisir la commande suivante pour que la configuration s'applique immédiatement.

sudo sysctl -w net.ipv4.ip_forward=1

Translation d'adresse

  • Activation de la translation d’adresse pour les machines du réseau 192.168.1.0/24 :

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

  • Il est également possible de choisir son adresse IPv4 de sortie si l'on dispose de plusieurs IPs publiques :

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source <ip_publique>


Les machines du LAN sont dès à présent en mesure de pouvoir se connecter à Internet.

FTP derrière NAT

  • Pour activer le NAT pour les connexions ftp :

modprobe nf_nat_ftp

Redirection de port DNAT

  • La redirection de port DNAT permet de rendre accessible depuis le réseau Internet, une machine sur le LAN pour un protocole donnée. Par exemple, nous souhaitons rendre accessible notre serveur web 192.168.1.49 depuis l'Internet.
  • Nous créons une première règles DNAT qui va rediriger tous les paquets à destination de notre IP publique sur le port TCP HTTP 80 (web) vers notre serveur web ayant pour adresse IP 192.168.1.49.

iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip_publique> -i ppp0 --dport 80 -j DNAT --to-destination 192.168.1.49:80

Sauvegarde des règles iptables

  • Par défaut, les règles de filtrage sont gérées via l'utilitaire UFW (surcouche administrative d'iptables). Bien que plus simple, l'utilitaire reste néanmoins moins complet que iptables.
  • Procéder à l'installation des paquets iptables-persistent et netfilter-persistent.

apt-get install iptables-persistent netfilter-persistent

  • Pour sauvegarder les règles, il suffit d'exécuter cette commande :

netfilter-persistent save

  • Les règles sont alors enregistrées dans :
    • /etc/iptables/rules.v4 pour les règles basées sur IPv4.
    • /etc/iptables/rules.v6 pour les règles basées sur IPv6.
  • Il est possible d'effacer l'ensemble des règles iptables :

netfilter-persistent flush

  • Ou encore de relire les fichiers des règles iptables :

netfilter-persistent reload


une règle incorrecte peut vous faire perdre la main sur votre machine !

Ubuntu versions < 18.04
  • Lors du prochain redémarrage, vos règles iptables seront perdues. Pour sauvegarder les règles iptables en vigueur, on utilisera la commande iptables-save :

iptables-save > /etc/iptables.up.rules

  • Les règles étant sauvegardées dans le fichier iptables.up.rules, il est possible de recharger les règles manuellement grâce à la commande iptables-restore :

iptables-restore < /etc/iptables.up.rules

  • On peut aussi appliquer le chargement de ces règles à chaque démarrage / redémarrage de l'interface réseau en ajoutant la ligne suivante dans le fichier /etc/network/interfaces :
post-up iptables-restore < /etc/iptables.up.rules

Serveur DHCP

Routage IPv6

Routage des paquets IPv6

  • Dé-commenter la ligne suivante dans le fichier /etc/sysctl.conf :
net.ipv6.conf.all.forwarding=1

Configuration sans état Stateless

  • Basée sur l'adresse MAC qui utilise le Neighbor Discovery Protocol (NDP). Radvd envoi la configuration IPv6 à intervalle régulier (route par défaut et préfixe) sans se soucier si les machines distantes parviennent à se configurer automatiquement.
  • Ce démon peut être déployé en installant le paquet radvd sur le routeur.

apt-get install radvd

  • La configuration de radvd est enregistrée dans le fichier /etc/radvd.conf. Nous renseignerons ce fichier avec les éléments suivants :
interface eth0
{
      AdvSendAdvert on;
      prefix 2001:3615:c0c0:c100::/64
      {
              AdvOnLink on;
              AdvAutonomous on;
              AdvRouterAddr on;
      };
      RDNSS 2001:3615:c0c0:c100::8 {
      };
};
  • Avec :
    • eth0 qui est l'interface LAN du routeur.
    • prefix 2001:3615:c0c0:c100::/64 qui est notre pool IPv6 attribué par notre FAI.
    • RDNSS 2001:3615:c0c0:c100::8 qui est notre serveur DNS IPv6 (peut être un serveur DNS tiers).
Cette configuration doit coïncidé avec celle de RADVD : association interface et préfixe IPv6 utilisé.

Configuration avec état Stateful

Configuration de Radvd

  • Radvd n'est ici utilisé uniquement pour annoncer le routeur de sortie (route par défaut).
interface eth0
{
       AdvSendAdvert on;
       AdvManagedFlag on;
       AdvOtherConfigFlag on;
       prefix 2001:3615:c0c0:c100::/64 {
               AdvAutonomous off;
               AdvRouterAddr on;
               MinRtrAdvInterval 3;
               MaxRtrAdvInterval 10;
       };
};
  • Avec :
    • AdvSendAdvert : Activation du daemon.
    • AdvManagedFlag : Configuration IP gérée en Statefull / DHCPv6.
    • AdvOtherConfigFlag : Autre informations fournis en Statefull / DHCPv6 (DNS, baux DHCP, domaine de recherche, ...).
    • AdvAutonomous : Annonce du préfixe - désactivé dans le cas d'une configuration Statefull car géré par DHCPv6.
    • AdvRouterAddr : Annonce de la passerelle de sortie / route par défaut.

Configuration du client DHCPv6

  • Le client DHCPv6 permet de récupérer le préfixe IPv6 attribué par l'opérateur.
  • L'installation du client dhcpv6 s'effectue en installant le paquet wide-dhcpv6-client.

sudo apt-get install wide-dhcpv6-client

  • Le fichier de configuration du service se trouve dans /etc/wide-dhcpv6/ et s'appelle dhcp6c.conf.
interface ppp0 {
   send ia-pd 0;
};


id-assoc pd 0 {
   prefix-interface eth0 {
       sla-len 8;
       sla-id 1;
   };
};
La valeur de SLA-LEN se calcul de la manière suivante : 64-longueur du préfixe. Dans notre cas, l'opérateur nous attribut un /56 ce qui donne 64-56 = 8.
  • Pour que les modifications soient prises en compte, il faut redémarrer le service.

service wide-dhcpv6-client restart

  • Pour valider le bon fonctionnement, on vérifie la présence du préfixe dans la table de routage.

ip -6 route
2001:3615:c0c0:c101::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/10 dev ppp0 metric 1
fe80::/10 dev ppp0 proto kernel metric 256
default dev ppp0 metric 1024

Configuration du serveur DHCPv6

  • L'installation du serveur dhcpv6 s'effectue en installant le paquet wide-dhcpv6-client.

sudo apt-get install wide-dhcpv6-server

  • La configuration du service doit être définie dans le fichier /etc/wide-dhcpv6/dhcp6c.conf. Si ce dernier n'existe pas, il faudra le créer.
option domain-name-servers fc00:10:46::46;
option domain-name "net.glx";

interface eth0 {
       address-pool pool1 3600;
};

pool pool1 {
       range 2001:3615:c0c0:c100::200 to 2001:3615:c0c0:c100::400;
};
  • Avec :
    • domain-name-servers : indiquant le serveur DNS local de notre réseau (peut un serveur DNS tierce).
    • domain-name : indiquant notre préfixe DNS (optionnel).
    • address-pool : définissant un pool dynamique d'attribution d'IP ici nommé pool1 et ayant pour durée de vie 3600 secondes.
    • range : qui définit la plage d'IP attribuable par le pool1.
  • Pour que les modifications soient prises en compte, il faut redémarrer le service.

service wide-dhcpv6-server restart

Définition d'un second réseau IPv6

  • Sur notre routeur, nous disposons d'une seconde interface réseau eth1 sur laquelle nous souhaitons activer un second réseau IPv6. Notre bloc IPv6 /56 nous permet d'utiliser jusqu'à 64 réseaux différents.
  • Dans notre cas, nous attribueront le bloc IPv6 2001:3615:c0c0:c102/64 à l'interface eth1.

Configuration avec état Stateful

Configuration de radvd

  • Nous définissons l'interface eth1 dans le fichier de configuration de radvd pour l'annonce du préfixe IPv6 associé.
interface eth1
{
      AdvSendAdvert on;
      AdvManagedFlag on;
      AdvOtherConfigFlag on;
      prefix 2001:3615:c0c0:c101::/64 {
              AdvAutonomous off;
              AdvRouterAddr on;
              MinRtrAdvInterval 3;
              MaxRtrAdvInterval 10;
      };
};

Configuration du client DHCPv6

  • Après la définition de notre premier réseau IPv6 sur l'interface réseau eth0 :
prefix-interface eth0 {
      sla-len 8;
      sla-id 1;
};
  • Nous ajoutons la configuration pour l'interface eth1 :
prefix-interface eth1 {
      sla-len 8;
      sla-id 2;
};
  • Ici, nous affectons la valeur 2 au paramètre sla-id (Site-Level Aggregation Identifier). Cela permet d'indiquer que nous utilisons le second réseau /64 du bloc IPv6 qui nous a été attribué.