8. Créer des interfaces de type dummy

Dans cette section, on créé une interface de type dummy et on installe un service Web uniquement en écoute sur les adresses IPv4 et IPv6 de cette interface. Enfin, on publie ce nouveau réseau factice via le protocole de routage dynamique OSPF.

Q21.

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

Cette nouvelle interface apparaît automatiquement dans la console unifiée vtysh des démons de routage de la suite Quagga.

R1# sh interface dummy0
Interface dummy0 is up, line protocol is up
  Link ups:       1  last: Mon, 15 Oct 2018 12:01:14 +0000
  Link downs:     0  last: (never)
  vrf: 0
  index 4 metric 0 mtu 1500
  flags: <UP,BROADCAST,RUNNING,NOARP>
  Type: Unknown
  HWaddr: d2:57:b1:cb:be:32
  inet 10.1.1.1/29 broadcast 10.1.1.7
  inet6 fe80::d057:b1ff:fecb:be32/64
  inet6 2001:678:3fc:b::1/64

Q22.

Comment publier les préfixes réseau correspondant à l'interface dummy0 via OSPF avec un débit binaire de lien à 100Mbps ?

Une fois la console vtysh ouverte, accéder en mode configuration de l'interface puis des deux démons de routage.

interface dummyX
bandwidth
router ospf
network A.B.C.D/MM area 0
router ospf6
interface dummyX area 0.0.0.0

On commence par la définition du débit binaire au niveau de l'interface.

R1# conf t
R1(config)# int dummy0
R1(config-if)# bandwidth 100000
R1(config-if)# ^Z

On peut ensuite publier les préfixes réseau IPv4 et IPv6 au niveau de chaque instance de protocole de routage OSPF.

R1# conf t
R1(config)# router ospf
R1(config-router)# network 10.1.1.0/29 area 0
R1(config-router)# ^Z
R1# conf t
R1(config)# router ospf6
R1(config-ospf6)# interface dummy0 area 0.0.0.0
R1(config-ospf6)# ^Z

Enfin, on vérifie la présence des deux préfixes réseau dans les bases OSPF.

R1# sh ip route 10.1.1.0/29
Routing entry for 10.1.1.0/29
  Known via "ospf", distance 110, metric 10, tag 0, vrf 0
  Last update 00:03:45 ago
  >  directly connected, dummy0

Routing entry for 10.1.1.0/29
  Known via "connected", distance 0, metric 0, tag 0, vrf 0, best, fib
  >* directly connected, dummy0
R1# sh ipv6 route 2001:678:3fc:b::/64
Routing entry for 2001:678:3fc:b::/64
  Known via "ospf6", distance 110, metric 10, tag 0, vrf 0
  Last update 00:04:20 ago
  >  directly connected, dummy0

Routing entry for 2001:678:3fc:b::/64
  Known via "connected", distance 0, metric 0, tag 0, vrf 0, best, fib
  >* directly connected, dummy0

Q23.

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                [::]:*

Q24.

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 -c2 10.1.1.1
    PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
    64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.648 ms
    64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.090 ms
    
    --- 10.1.1.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 26ms
    rtt min/avg/max/mdev = 0.090/0.369/0.648/0.279 ms
    R2:~# ping -c2 2001:678:3fc:b::1
    PING 2001:678:3fc:b::1(2001:678:3fc:b::1) 56 data bytes
    64 bytes from 2001:678:3fc:b::1: icmp_seq=1 ttl=64 time=0.567 ms
    64 bytes from 2001:678:3fc:b::1: icmp_seq=2 ttl=64 time=0.086 ms
    
    --- 2001:678:3fc:b::1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 24ms
    rtt min/avg/max/mdev = 0.086/0.326/0.567/0.241 ms
  • Test HTTP au niveau application :

    R2:~# wget -O /dev/null http://10.1.1.1
    --2018-10-15 17:00:47--  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-10-15 17:00:47 (298 MB/s) — « /dev/null » sauvegardé [3378/3378]
    R2:~# wget -O /dev/null http://[2001:678:3fc:b::1]
    --2018-10-15 17:02:17--  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-10-15 17:02:17 (154 MB/s) — « /dev/null » sauvegardé [3378/3378]