Problème d'IPv6 forwarding

Tags: #<Tag:0x00007fd3c71a3658>

Bonjour,

J’ai un problème d’IPv6 forwarding à travers mon routeur.

Voici ma configuration IPv6 sur mon routeur :

root@nanopi:~# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: lan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2a01:e0a:abcd:d3a1:b0::254/80 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::c8fe:ff:feba:be00/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: wan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2a01:e0a:abcd:d3a0::426d:3e2a/128 scope global dynamic noprefixroute 
       valid_lft 69515sec preferred_lft 69515sec
    inet6 2a01:e0a:abcd:d3a0::fada:dad/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::fada:dad/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::b4dc:bff:fe7a:bf8a/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
4: wifi0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2a01:e0a:abcd:d3a1:b1::254/80 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b2b0:ff:feca:face/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 state UNKNOWN qlen 500
    inet6 2a01:e0a:abcd:d3a1:b3::1/80 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::f857:e104:4eb5:1383/64 scope link stable-privacy proto kernel_ll 
       valid_lft forever preferred_lft forever

et le routage IPv6 :

root@nanopi:~# ip -6 r
2a01:e0a:abcd:d3a0::/64 dev wan0 proto ra metric 10 expires 86362sec pref medium
2a01:e0a:abcd:d3a0::/64 dev wan0 proto kernel metric 256 pref medium
2a01:e0a:abcd:d3a1:b0::/80 dev lan0 proto kernel metric 256 pref medium
2a01:e0a:abcd:d3a1:b1::/80 dev wifi0 proto kernel metric 256 pref medium
2a01:e0a:abcd:d3a1:b3::/80 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev wan0 proto kernel metric 256 pref medium
fe80::/64 dev lan0 proto kernel metric 256 pref medium
fe80::/64 dev wifi0 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
default nhid 1022893797 via fe80::3627:92ff:fe62:ff0c dev wan0 proto ra metric 10 expires 1762sec pref medium

L’IP forward est bien activé :

root@nanopi:~# sysctl net.ipv6 --pattern forward
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.mc_forwarding = 0
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.default.mc_forwarding = 0
net.ipv6.conf.lan0.forwarding = 1
net.ipv6.conf.lan0.mc_forwarding = 0
net.ipv6.conf.lo.forwarding = 1
net.ipv6.conf.lo.mc_forwarding = 0
net.ipv6.conf.tun0.forwarding = 1
net.ipv6.conf.tun0.mc_forwarding = 0
net.ipv6.conf.wan0.forwarding = 1
net.ipv6.conf.wan0.mc_forwarding = 0
net.ipv6.conf.wifi0.forwarding = 1
net.ipv6.conf.wifi0.mc_forwarding = 0

Si un poste client côté LAN du routeur arrive bien à contacter un serveur sur internet, par exemple :

bob@pc1:~$ ping6 -c3 debian.org
PING debian.org(2a04:4e42::644 (2a04:4e42::644)) 56 data bytes
64 bytes from 2a04:4e42::644 (2a04:4e42::644): icmp_seq=1 ttl=58 time=3.85 ms
64 bytes from 2a04:4e42::644 (2a04:4e42::644): icmp_seq=2 ttl=58 time=4.50 ms
64 bytes from 2a04:4e42::644 (2a04:4e42::644): icmp_seq=3 ttl=58 time=4.25 ms

--- debian.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.847/4.199/4.498/0.268 ms

les requêtes vers l’autre interface du routeur (WIFI) sur l’adresse de la passerelle n’aboutissent pas :

bob@pc1:~$ ping6 -c3 2a01:e0a:abcd:d3a1:b1::254
PING 2a01:e0a:abcd:d3a1:b1::254(2a01:e0a:abcd:d3a1:b1::254) 56 data bytes
From 2a01:e0a:abcd:d3a1:b0::1 icmp_seq=1 Destination unreachable: Address unreachable
From 2a01:e0a:abcd:d3a1:b0::1 icmp_seq=2 Destination unreachable: Address unreachable
From 2a01:e0a:abcd:d3a1:b0::1 icmp_seq=3 Destination unreachable: Address unreachable

— 2a01:e0a:abcd:d3a1:b1::254 ping statistics —
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2040ms

J’ai désactivé les règles de filtrage au niveau du firewall (# nft flush ruleset) pour voir si ça venait de là, mais ça ne change rien.

Voici la configuration du poste client :

bob@pc1:~$ ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2a01:e0a:abcd:d3a1:b0::1/128 scope global dynamic noprefixroute
valid_lft 3339sec preferred_lft 2339sec
inet6 fe80::c060:aa93:f75b:65ca/64 scope link noprefixroute
valid_lft forever preferred_lft forever
bob@pc1:~$
bob@pc1:~$ ip -6 r
2a01:e0a:abcd:d3a1:b0::1 dev enp4s0 proto kernel metric 100 pref medium
2a01:e0a:abcd:d3a1::/64 dev enp4s0 proto ra metric 100 pref medium
fe80::/64 dev enp4s0 proto kernel metric 1024 pref medium
default via fe80::c8fe:ff:feba:be00 dev enp4s0 proto ra metric 100 pref medium

Je ne comprends pas ce qui ne fonctionne pas.
Pouvez-vous m’aider ?

J’ai trouvé la réponse à mon problème. :grinning:

Le fichier /etc/radvd.conf était mal configuré.
Je pensais que RADVD n’acceptait que les préfixes /64, mais il supporte très bien les préfixes /80 qui me sont nécessaires.

La bonne configuration du fichier /etc/radvd.conf est donc la suivante :

interface lan0 {
        AdvSendAdvert on;       # Le routeur envoie les avertissements
        AdvManagedFlag on;      # Le client recevra l'adresse IPv6 d'un serveur DHCP
        AdvOtherConfigFlag on;  # Le client recevra également des informations non liées à l'adresse IPv6 par le serveur DHCP.
        prefix 2a01:e0a:abcd:d3a1:b0::/80 {  # Segment complet
               AdvOnLink on;         # Ce prefix peut être utilisé pour la détermination en ligne.
               AdvAutonomous off;    # Ce prefix ne peut pas être utilisé pour l'auto-configuration de l'adresse IPv6
               AdvRouterAddr on;    # "on" uniquement pour le Mobile IPv6
        };
};
interface wifi0 {
        AdvSendAdvert on;       # Le routeur envoie les avertissements
        AdvManagedFlag on;      # Le client recevra l'adresse IPv6 d'un serveur DHCP
        AdvOtherConfigFlag on;  # Le client recevra également des informations non liées à l'adresse IPv6 par le serveur DHCP.
        prefix 2a01:e0a:abcd:d3a1:b1::/80 {  # Segment complet
               AdvOnLink on;         # Ce prefix peut être utilisé pour la détermination en ligne.
               AdvAutonomous off;    # Ce prefix ne peut pas être utilisé pour l'auto-configuration de l'adresse IPv6
               AdvRouterAddr on;    # "on" uniquement pour le Mobile IPv6
        };
};

et après un « systemctl restart radvd.service », tout fonctionne parfaitement. :+1: