Salut à tous.
J'ai une question Linux.
J'ai une interface réseau configurée avec une adresse IPv6 ULA.
J'ai activé le MASQUERADE pour l'adresse IPv6 ULA (pour pouvoir accéder à Internet via le réseau v6) ; je sort bien avec l'adresse IPv6 du routeur.
Si maintenant j'ajoute une autre IPv6, une GUA, sans ajouter de "voisin proxifiant"
je n'arrive plus à accéder à Internet v6.
Je ne trouve pas çà normal. Qu'en pensez-vous !?
----
En ligne de commandes çà peut mieux vous parler

La machine (un container LXC) :
root@dc0:~ # ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.126.42.2 netmask 255.255.255.0 broadcast 0.0.0.255
inet6 fe80::216:3eff:fef3:56b prefixlen 64 scopeid 0x20<link>
inet6 fc01::10:126:42:dc0 prefixlen 112 scopeid 0x0<global>
inet6 2a01:cb1d:12:1c00:1ab3:126:42:dc0 prefixlen 112 scopeid 0x0<global>
ether 00:16:3e:f3:05:6b txqueuelen 1000 (Ethernet)
RX packets 17 bytes 1266 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24 bytes 2360 (2.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Le MASQUERADE sur l'hôte.
root@host:~ # ip6tables -t nat -A POSTROUTING -o netbr0 -s fc01::10:126:42:0/112 ! -d fc00::/7 -j MASQUERADE
Donc ; sans l'adresse GUA (
2a01:cb1d:12:1c00:1ab3:126:42:dc0) - j'arrive bien à accéder à Internet v6 - je sort avec l'adresse GUA (
2a01:cb1d:12:1c00:beef::cafe) du routeur.
Donc ; dès que j'ajoute l'adresse GUA (
2a01:cb1d:12:1c00:1ab3:126:42:dc0) sur l'interface réseau de mon conteneur, je n'arrive plus à accéder à Internet v6.
Infos : Pour déclarer que l'adresse GUA du Container puisse "sortir" et surtout qu'on puisse y "entrer", la ligne de commande est la suivante :
Sur l'hôte "ajouter l'adresse GUA comme voisine" à l'interface réseau connectée :
root@host:~ # ip -6 neighbor add proxy 2a01:cb1d:12:1c00:1ab3:126:42:dc0 dev netbr0
----
En passant, j'ai même modifier la fichier "/etc/gai.conf" ; des préférences IP de Linux.
# ----------------------------------------
# MyPrefer
# lo (localhost)
precedence ::1/128 50
# Default Unicast
precedence ::/0 48
# ULA Unique Local Address (LAN IPv6)
precedence fc00::/7 45
# SLAN Site-Local Address Network (Secure)
precedence fec0::/10 44
# 6to4
precedence 2002::/16 30
# Teredo tunneling
precedence 2001::/32 25
# 6bone (returned)
precedence 3ffe::/16 24
# IPv4-compatible addresses (deprecated)
precedence ::/96 20
# IPv4-mapped IPv6 address
precedence ::ffff:0:0/96 10
# ----------------------------------------
J'ajoute ce lien vers
RFC 6724:
Default Address Selection for Internet Protocol version 6 (IPv6) de Stéphane Bortzmeyer.
Bonne soirée, bonne journée.
----
Je ne trouve pas çà normal. Qu'en pensez-vous !?
Si je cherche à pinguer google.fr "2607:f8b0:4006:80c::2003", mon adresse IPv6 GUA "2a01:cb1d:12:1c00:1ab3:126:42:dc0" est celle qui se rapproche plus, mais quelle est la règle de sélection ? Est-ce la règle 2, est-ce bien cela ?
J'ajoute le texte en français de cette page :
"Sélection de l'adresse source IPv6 sous Linux (11/05/2009)" :
Il est parfois souhaitable que l'adresse IPv6 sortante d'une interface soit sélectionnée de manière déterministe. Toutes choses étant égales par ailleurs, Linux utilisera par défaut la dernière adresse ajoutée à l'interface comme adresse source. Ce n'est généralement pas ce à quoi vous vous attendez ou que vous souhaitez. Cet article décrit comment influencer la sélection de l'adresse source sous Linux.
Algorithme de sélection :
Linux implémente la RFC 3484 , « Sélection d'adresse par défaut pour le protocole Internet version 6 (IPv6). En bref, l'algorithme consiste à créer une liste de candidats d'adresses sources potentielles, puis à suivre ces règles dans l'ordre :
- Préférez la même adresse. (c'est-à-dire que la destination est la machine locale)
- Préférez la portée appropriée. (c'est-à-dire la plus petite portée partagée avec la destination)
- Évitez les adresses obsolètes.
- Privilégiez les adresses personnelles.
- Préférer l'interface sortante. (c'est-à-dire préférer une adresse sur l'interface à partir de laquelle nous envoyons)
- Préférez l'étiquette correspondante.
- Préférez les adresses publiques.
- Utiliser le préfixe correspondant le plus long.
« Si les huit règles ne parviennent pas à choisir une adresse unique, un critère de départage non spécifié doit être utilisé. » Linux choisit d'utiliser la dernière adresse ajoutée.
Influencer l'algorithme :
Il est donc nécessaire de rompre toute égalité en influençant l'une de ces règles. La solution consiste à marquer les adresses sources indésirables comme « obsolètes », ce qui les fait échouer à la règle 3.
La méthode pour implémenter cela sous Linux consiste à définir "preferred_lft" sur 0 , ce qui entraîne le marquage de l'adresse comme obsolète. Notez que l'obsolescence ne rend pas l'adresse invalide, vous pouvez donc toujours recevoir des paquets destinés à cette adresse, mais elle ne sera simplement pas utilisée comme adresse source.
----
Note de Moi-même à 02h50 GMT+2 :
J'essaie de mettre un «
preferred_lft 0 » sur ma GUA pour savoir ; tiens je ne connaissais pas la commande « ip a change » ; et de plus la commande "ifconfig" n'affiche pas le « preferred life time »
root@dc0:~ # ip -6 address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fc01::10:126:42:dc0/112 scope global
valid_lft forever preferred_lft forever
inet6 2a01:cb1d:12:1c00:1ab3:126:42:dc0/112 scope global
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fef3:56b/64 scope link
valid_lft forever preferred_lft forever
root@dc0:~ # ip -6 addr change 2a01:cb1d:12:1c00:1ab3:126:42:dc0/1128 dev eth0 preferred_lft 0
root@dc0:~ # ip -6 address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fc01::10:126:42:dc0/112 scope global
valid_lft forever preferred_lft forever
inet6 2a01:cb1d:12:1c00:1ab3:126:42:dc0/112 scope global deprecated
valid_lft forever preferred_lft 0sec
inet6 fe80::216:3eff:fef3:56b/64 scope link
valid_lft forever preferred_lft forever
Et parfait çà fonctionne
oh yeahh !!root@dc0:~ # ping6 -n lab3w.fr -c4
PING zw3b.fr(2607:5300:60:9389::1) 56 data bytes
64 bytes from 2607:5300:60:9389::1: icmp_seq=1 ttl=47 time=102 ms
64 bytes from 2607:5300:60:9389::1: icmp_seq=2 ttl=47 time=102 ms
64 bytes from 2607:5300:60:9389::1: icmp_seq=3 ttl=47 time=102 ms
64 bytes from 2607:5300:60:9389::1: icmp_seq=4 ttl=47 time=102 ms
--- lab3w.fr ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 101.677/101.834/101.923/0.097 ms
root@lab3w:~ # tcpd_icmpv6 vmbr0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vmbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
02:40:34.468020 IP6 2a01:cb1d:12:1c00:beef::cafe > 2607:5300:60:9389::1: ICMP6, echo request, seq 20, length 64
02:40:34.468054 IP6 2607:5300:60:9389::1 > 2a01:cb1d:12:1c00:beef::cafe: ICMP6, echo reply, seq 20, length 64
02:40:35.468775 IP6 2a01:cb1d:12:1c00:beef::cafe > 2607:5300:60:9389::1: ICMP6, echo request, seq 21, length 64
02:40:35.468815 IP6 2607:5300:60:9389::1 > 2a01:cb1d:12:1c00:beef::cafe: ICMP6, echo reply, seq 21, length 64
02:40:36.470010 IP6 2a01:cb1d:12:1c00:beef::cafe > 2607:5300:60:9389::1: ICMP6, echo request, seq 22, length 64
02:40:36.470045 IP6 2607:5300:60:9389::1 > 2a01:cb1d:12:1c00:beef::cafe: ICMP6, echo reply, seq 22, length 64
02:40:37.471138 IP6 2a01:cb1d:12:1c00:beef::cafe > 2607:5300:60:9389::1: ICMP6, echo request, seq 23, length 64
02:40:37.471172 IP6 2607:5300:60:9389::1 > 2a01:cb1d:12:1c00:beef::cafe: ICMP6, echo reply, seq 23, length 64
je vous ajoute 4 alias IPv4/6 qui me servent bien

alias tcpd_icmpv6="tcpdump -s0 -n 'icmp6 and (ip6[40+0]&0xFE == 128)' and port ! 22 -i ${1}"
alias tcpd_icmpv4="tcpdump -s0 -n 'icmp' and port ! 22 -i ${1}"
alias tcpd_ipv6="tcpdump -s0 -t -n ip6 or proto ipv6 and port ! 22 -i ${1}"
alias tcpd_ipv4="tcpdump -s0 -t port ! 22 -i ${1}"