9. Créer des interfaces de type dummy

Q22.

Comment créer et configurer une interface réseau virtuelle de type dummy ?

Consulter les pages de manuels de la commande ip au niveau liaison man ip-link et rechercher les information sur le type dummy.

Vérifier la présence d'une nouvelle entrée dans la table de routage au niveau système.

Sur le routeur R1, on créé une nouvelle interface avec des adresses appartenant à deux nouveaux préfixes réseau définis les tableaux du plan d'adressage.

# ip link add dummy0 type dummy
# ip link set dev dummy0 up
# ip addr add 10.1.1.1/29 brd + dev dummy0
# ip -6 addr add 2001:678:3fc:b::1/64 dev dummy0
R1:~# ip route ls dev dummy0
10.1.1.0/29 proto kernel scope link src 10.1.1.1
R1:~# ip -6 route ls dev dummy0
2001:678:3fc:b::/64 proto kernel metric 256 pref medium
fe80::/64 proto kernel metric 256 pref medium

Q23.

Comment publier les deux nouveaux préfixes réseau correspondant à l'interface dummy0 dans l'aire OSPF ?

Il faut activer l'interface dummy0 dans la configuration des deux démons de routage OSPF : bird et bird6.

Il faut consulter la section OSPF du guide BIRD User's Guide. Les instructions utiles pour cette question sont les suivantes.

interface
stub

La partie OSPFv2 du fichier de configuration sur R1 devient :

R1:~# sed -n '/protocol ospf OSPFv2R1 {/,/^}/p' /etc/bird/bird.conf
protocol ospf OSPFv2R1 {
        rfc1583compat yes;
        ecmp yes;
        export filter export_OSPF;
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
                interface "dummy0" {
                        stub yes;
                };
        };
}

Les mêmes instrcutions sont placées dans le fichier de configuration du protocole OSPFv3.

R1:~# sed -n '/protocol ospf OSPFv3R1 {/,/^}/p' /etc/bird/bird6.conf
protocol ospf OSPFv3R1 {
        ecmp yes;
        export filter export_OSPF;
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
                interface "dummy0" {
                        stub yes;
                };
        };
}

On vérifie ensuite que les entrées sont bien intégrées dans les routes OSPF des deux démons.

R1:~# birdc show route 10.1.1.0/29
BIRD 1.6.4 ready.
10.1.1.0/29        dev dummy0 [OSPFv2R1 15:03:22] * I (150/10) [0.0.1.4]
R1:~# birdc6 show route 2001:678:3fc:b::/64
BIRD 1.6.4 ready.
2001:678:3fc:b::/64 dev dummy0 [OSPFv3R1 15:03:28] * I (150/10) [0.0.1.6]

Q24.

Comment installer un service Web en écoute exclusivement sur les adresses IPv4 et IPv6 de l'interface dummy0 ?

Installer le paquet lighttpd et modifier sa configuration pour que le service ne soit accessible que sur les adresses de l'interface dummy0.

# aptitude install lighttpd
<snipped/>

On modifie ensuite le fichier de configuration /etc/lighttpd/lighttpd.conf de façon à limiter l'accès aux adresses voulues.

--- lighttpd.conf.orig  2018-10-15 15:42:12.345480008 +0000
+++ lighttpd.conf       2018-10-15 15:43:50.091036311 +0000
@@ -22,6 +22,9 @@
 compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )

 # default listening port for IPv6 falls back to the IPv4 port
-include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
+#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
 include_shell "/usr/share/lighttpd/create-mime.assign.pl"
 include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
+
+server.bind = "10.1.1.1"
+$SERVER["socket"] == "[2001:678:3fc:b::1]:80" { server.use-ipv6 = "enable" }

Après avoir redémarré l'instance de serveur Web, on vérifie que la nouvelle configuration est bien en place.

# systemctl restart lighttpd
<snipped>
# ss -nlt '( src :80 )'
State       Recv-Q Send-Q       Local Address:Port      Peer Address:Port
LISTEN      0      128               10.1.1.1:80             0.0.0.0:*
LISTEN      0      128    [2001:678:3fc:b::1]:80                [::]:*

Q25.

Comment valider l'accès à ce service Web depuis les autres réseaux ?

En respectant l'ordre des protocoles de la pile TCP/IP, on commence par valider la connectivité au niveau réseau avant de passer à la couche application.

À partir du routeur R2, on utilise la séquence suivante :

  • Test ICMP au niveau réseau :

    R2:~# ping -qc2 10.1.1.1
    PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
    
    --- 10.1.1.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 10ms
    rtt min/avg/max/mdev = 0.062/0.293/0.524/0.231 ms
    R2:~# ping -qc2 2001:678:3fc:b::1
    PING 2001:678:3fc:b::1(2001:678:3fc:b::1) 56 data bytes
    
    --- 2001:678:3fc:b::1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 2ms
    rtt min/avg/max/mdev = 0.083/0.478/0.873/0.395 ms
  • Test HTTP au niveau application :

    R2:~# wget -O /dev/null http://10.1.1.1
    --2018-11-02 15:44:44--  http://10.1.1.1/
    Connexion à 10.1.1.1:80… connecté.
    requête HTTP transmise, en attente de la réponse… 200 OK
    Taille : 3378 (3,3K) [text/html]
    Sauvegarde en : « /dev/null »
    
    /dev/null   100%[===============================>]   3,30K  --.-KB/s    ds 0s
    
    2018-11-02 15:44:44 (116 MB/s) — « /dev/null » sauvegardé [3378/3378]
    R2:~# wget -O /dev/null http://[2001:678:3fc:b::1]
    --2018-11-02 15:48:28--  http://[2001:678:3fc:b::1]/
    Connexion à [2001:678:3fc:b::1]:80… connecté.
    requête HTTP transmise, en attente de la réponse… 200 OK
    Taille : 3378 (3,3K) [text/html]
    Sauvegarde en : « /dev/null »
    
    /dev/null   100%[===============================>]   3,30K  --.-KB/s    ds 0s
    
    2018-11-02 15:48:28 (150 MB/s) — « /dev/null » sauvegardé [3378/3378]