---
title: "Transition IPv4 → IPv6"
domain: network
subdomain: addressing
type: snippet
tags: [ipv6, transition, dual-stack, nat64, dns64, 6in4, tunnel, dhcpv6, cisco, linux]
difficulty: advanced
status: stable
updated: "2025-05-14"
---
## Mécanismes de transition — Vue d'ensemble

| Mécanisme          | Description                                                | Use case                                      | Complexité |
|--------------------|------------------------------------------------------------|-----------------------------------------------|------------|
| Dual-stack         | IPv4 + IPv6 simultanés sur chaque interface et nœud        | Méthode recommandée — migration progressive   | Faible     |
| 6in4 (manuel)      | Encapsulation IPv6 dans IPv4 (proto 41)                    | Deux sites reliés via Internet IPv4 uniquement| Moyenne    |
| 6to4 (automatique) | Préfixe 2002::/16 dérivé de l'IP publique IPv4             | Déprécié — utiliser 6in4 ou tunnel broker     | Moyenne    |
| ISATAP             | Tunnel intra-site IPv6 dans IPv4 (hosts → routeur)         | Migration interne sans changer l'infra IPv4   | Moyenne    |
| NAT64 + DNS64      | Accès IPv4 depuis des clients IPv6-only                    | Réseaux mobiles, clouds IPv6-only             | Élevée     |
| 464XLAT (CLAT+PLAT)| Double traduction IPv4↔IPv6↔IPv4                          | Terminaux mobiles IPv6-only sur réseau 4G/5G  | Élevée     |

<Warning>
6to4 (2002::/16) et Teredo sont officiellement dépréciés (RFC 7526, RFC 8190). Ne pas les déployer dans un environnement de production. Préférer un tunnel 6in4 explicite ou un service de tunnel broker (Hurricane Electric : tunnelbroker.net).
</Warning>

## Dual-Stack

```text
Principe :
  Chaque nœud et chaque interface supporte IPv4 ET IPv6 simultanément
  Deux tables de routage indépendantes (ip route / ipv6 route)
  Le choix du protocole dépend du DNS : AAAA → IPv6, A → IPv4
  (RFC 6724 : IPv6 préféré si disponible — Happy Eyeballs RFC 8305)
```

```text
! Cisco — Dual-Stack sur un routeur
conf t
ipv6 unicast-routing                          ! OBLIGATOIRE — désactivé par défaut

interface GigabitEthernet0/0
 ip address {{IPV4_ADDR}} {{IPV4_MASK}}
 ipv6 address {{IPV6_ADDR}}/{{PREFIX}}
 ipv6 address fe80::1 link-local
 no shutdown

! Vérification des deux tables
show ip route
show ipv6 route
show interfaces GigabitEthernet0/0
```

```bash
# Linux — Dual-Stack
# L'activation IPv6 est automatique si le noyau est compilé avec IPv6

# Vérifier les adresses
ip addr show
ip -4 addr show
ip -6 addr show

# Vérifier les deux tables de routage
ip -4 route show
ip -6 route show

# Activer IPv6 si désactivé (net.ipv6.conf.all.disable_ipv6=1)
sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl -w net.ipv6.conf.default.disable_ipv6=0
```

## Tunnel 6in4 Manuel (proto 41)

```text
Encapsulation directe d'IPv6 dans des paquets IPv4 (IP proto 41)
Les deux extrémités du tunnel connaissent l'IP publique IPv4 de l'autre
Pas de découverte automatique — configuration explicite des deux côtés
```

### Cisco — Tunnel 6in4

```text
conf t
interface Tunnel0
 description Tunnel IPv6-in-IPv4 vers {{REMOTE_SITE}}
 tunnel mode ipv6ip                           ! mode 6in4 (proto 41)
 tunnel source {{LOCAL_WAN_IP}}               ! IP publique locale
 tunnel destination {{REMOTE_WAN_IP}}         ! IP publique distante
 ipv6 address 2001:db8:tunnel::1/64
 ipv6 address fe80::1 link-local
 no shutdown

! Route IPv6 vers le site distant via le tunnel
ipv6 route 2001:db8:remote::/48 Tunnel0

! Côté distant (R2)
interface Tunnel0
 tunnel mode ipv6ip
 tunnel source {{REMOTE_WAN_IP}}
 tunnel destination {{LOCAL_WAN_IP}}
 ipv6 address 2001:db8:tunnel::2/64
 ipv6 address fe80::2 link-local
 no shutdown

ipv6 route 2001:db8:local::/48 Tunnel0

! Vérifications
show interface Tunnel0
show ipv6 route
ping ipv6 2001:db8:tunnel::2 source Tunnel0
```

### Linux — Tunnel 6in4 (SIT)

```bash
# Créer le tunnel SIT (Simple Internet Transition)
ip tunnel add tun0 mode sit remote {{REMOTE_V4}} local {{LOCAL_V4}} ttl 64
ip link set tun0 up
ip -6 addr add 2001:db8:tunnel::1/64 dev tun0

# Route vers le réseau distant
ip -6 route add 2001:db8:remote::/48 dev tun0

# Vérifications
ip tunnel show tun0
ip -6 addr show dev tun0
ip -6 route show
ping6 2001:db8:tunnel::2

# Persistance (fichier /etc/network/interfaces ou systemd-networkd)
# Voir la documentation de la distribution
```

## DHCPv6 Stateful

### Cisco — Serveur DHCPv6

```text
conf t
! Définir le pool DHCPv6
ipv6 dhcp pool {{POOL_NAME}}
 address prefix 2001:db8:1::/64 lifetime infinite infinite
 dns-server 2001:4860:4860::8888            ! Google DNS IPv6
 dns-server 2001:4860:4860::8844
 domain-name {{DOMAIN_NAME}}
 !sip-server ipv6 2001:db8:1::10            ! optionnel

! Activer le serveur DHCPv6 sur l'interface
interface GigabitEthernet0/0
 ipv6 address 2001:db8:1::1/64
 ipv6 dhcp server {{POOL_NAME}}
 ipv6 nd managed-config-flag                ! M=1 → DHCPv6 stateful
 ipv6 nd other-config-flag                  ! O=1 → DNS via DHCPv6 (stateless)
 no shutdown

! Vérifications DHCPv6
show ipv6 dhcp pool
show ipv6 dhcp binding
show ipv6 dhcp interface
```

### Cisco — Relais DHCPv6

```text
conf t
! Sur l'interface du réseau client (entre clients et serveur DHCPv6)
interface GigabitEthernet0/1
 ipv6 dhcp relay destination {{DHCPV6_SERVER_ADDR}}
 ipv6 nd managed-config-flag
 no shutdown
```

### Linux — Client DHCPv6

```bash
# dhclient (ISC)
dhclient -6 {{INTERFACE}}

# wide-dhcpv6-client
dhcp6c -c /etc/wide-dhcpv6/dhcp6c.conf {{INTERFACE}}

# systemd-networkd — fichier /etc/systemd/network/10-eth0.network
# [Network]
# DHCP=yes   (ou ipv6 pour DHCPv6 uniquement)
# IPv6AcceptRA=yes
```

## NAT64 + DNS64

```text
Objectif : permettre aux clients IPv6-only d'accéder aux serveurs IPv4-only

Architecture :
  Client IPv6 → DNS64 (resolver) → NAT64 (routeur de bordure) → Serveur IPv4

Préfixe bien connu NAT64 : 64:ff9b::/96
  Synthèse d'adresse IPv6 : 64:ff9b::{{IPv4}}
  Exemple : 8.8.8.8 → 64:ff9b::808:808
             (8.8.8.8 en hex = 0x08080808 → 808:808)

  Calcul manuel :
    IP : 8.8.8.8 → décimal → hexadécimal
    8 = 08, donc 8.8 → 0808 → 0x0808
    64:ff9b::0808:0808 → 64:ff9b::808:808

DNS64 (RFC 6147) :
  Resolver synthétise une réponse AAAA si :
    1. Pas d'enregistrement AAAA natif pour le FQDN
    2. Enregistrement A présent → AAAA synthétisée = 64:ff9b::A
  Les clients IPv6-only peuvent alors contacter 64:ff9b::A
  Le NAT64 traduit la destination vers l'adresse IPv4 réelle

Préfixe personnalisé (RFC 7050) :
  Un opérateur peut utiliser son propre préfixe /96 à la place de 64:ff9b::/96
  Le préfixe est annoncé aux clients via DHCP option 108 ou RDNSS
```

### NAT64 sur Linux (Jool)

```bash
# Installation Jool (kernel module NAT64)
modprobe jool
jool instance add --iptables --pool6 64:ff9b::/96

# Configurer le pool IPv4 pour la traduction
jool pool4 add --tcp {{PUBLIC_IPV4}}/32 1-65535
jool pool4 add --udp {{PUBLIC_IPV4}}/32 1-65535
jool pool4 add --icmp {{PUBLIC_IPV4}}/32 1-65535

# Vérification
jool instance display
jool pool4 display
jool session display
```

## OSPFv3 — Routage IPv6

```text
OSPFv3 = OSPF pour IPv6 (RFC 5340)
  Utilise les LLA (fe80::/10) comme adresses source des paquets Hello
  Router-ID obligatoirement en format IPv4 (32 bits) — souvent = loopback IPv4
  Instances séparées de OSPFv2 (processus indépendants)
```

```text
conf t
! Activer OSPFv3
ipv6 router ospf 1
 router-id {{ROUTER_ID}}                     ! ex: 1.1.1.1 — format IPv4 obligatoire
 log-adjacency-changes detail

! Activer OSPFv3 par interface
interface GigabitEthernet0/0
 ipv6 ospf 1 area 0
 ipv6 ospf cost 10                           ! optionnel

interface GigabitEthernet0/1
 ipv6 ospf 1 area 1

! Vérifications OSPFv3
show ipv6 ospf neighbor
show ipv6 ospf neighbor detail
show ipv6 ospf database
show ipv6 route ospf
show ipv6 ospf interface brief
```

## Checklist déploiement dual-stack

<Checklist
  storageKey="net-ipv6-deploy"
  items={[
    "ipv6 unicast-routing activé sur tous les routeurs Cisco",
    "Préfixe /48 alloué (FAI ou ULA fd::/8 pour usage interne)",
    "Sous-réseaux /64 planifiés et documentés pour chaque VLAN",
    "LLA fe80::X forcé manuellement sur tous les routeurs",
    "Décision SLAAC vs DHCPv6 stateful documentée par segment",
    "OSPFv3 ou BGP IPv6 configuré et voisinages vérifiés",
    "ACLv6 équivalentes aux ACLv4 existantes créées et appliquées",
    "Enregistrements DNS AAAA ajoutés pour tous les services",
    "Tests ping6 / traceroute6 de bout en bout validés",
    "Monitoring étendu aux métriques IPv6 (NDP, DHCPv6, OSPFv3)",
    "Filtre bogon IPv6 appliqué sur interface WAN",
    "Plan de rollback documenté si régression IPv4"
  ]}
/>

<Tip>
Activer IPv6 progressivement segment par segment — ne jamais désactiver IPv4 avant d'avoir validé la connectivité IPv6 de bout en bout sur le segment cible. En dual-stack, si IPv6 est cassé, les clients basculent automatiquement sur IPv4 (Happy Eyeballs) sans interruption visible — ce qui peut masquer des problèmes IPv6 en production pendant des semaines.
</Tip>
