Projet

Général

Profil

Mise en place d'un LAN « IPv6 only » sous debian

Principe

                                           DNS (dns64)
                                            ________  
                                           |==|=====| 
                       ipv4.example.com    |  |     | 
                  .----------------------->|  |     | 
                  |                        |  |     | 
                  |                        |  |     | 
                  |                        |  |====°| 
                  |                        |__|_____| 
              ____   __                         |
             |    | |==|                        |
             |____| |  |<-----------------------'
             /::::/ |__|  2001:910:109c:ffff::5be0:958e
                  |
                  |
                  |                                                                         .--.               
                  |                           .---.                                     _ -(    )- _           
                  |                          /   /|                                .--,(            ),--.      
                  |                         .---. |                            _.-(                       )-._ 
                  '------------------------>|   | ' ------------------------->(           INTERNET            )
           2001:910:109c:ffff::5be0:958e    |   |/          91.224.149.142     '-._(                     )_.-' 
                                            '---'                                   '__,(            ),__'     
                                            Routeur                                      - ._(__)_. -          
                                            (nat 64)

Installation/configuration de bind (DNS64)

DNS64 n'est supporté qu'à partir de debian « wheezy ».

# cat 'APT::Default-Release "squeeze";' > /etc/apt/apt.conf.d/90default
# cat 'deb http://apt.kafe-in.net:3142/debian wheezy main contrib' > /etc/apt/sources.list.d/wheezy.list
# aptitude update
# aptitude -t wheezy install bind9

La configuration se fait au niveau du groupe « options » de /etc/bind/named.conf :

options {
(...)
        listen-on-v6 { any; };
        dns64 2001:910:109c:ffff::/96 {
                clients { any; };
                recursive-only yes;
        };
(...)
}

Installation/configuration de tayga (NAT64)

# aptitude install tayga
# echo << EOF > /etc/tayga.conf
tun-device nat64
ipv4-addr 192.168.255.1
prefix 2001:910:109c:ffff::/96
dynamic-pool 192.168.255.0/24
data-dir /var/spool/tayga
EOF
# echo "net.ipv4.conf.all.forwarding=1" > /etc/sysctl.d/99forwarding
# echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.d/99forwarding
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# /sbin/iptables -A FORWARD -i eth0 -o nat64 -m state --state RELATED,ESTABLISHED -j ACCEPT
# /sbin/iptables -A FORWARD -i nat64 -o eth0 -j ACCEPT
# sed -i -e 's/^RUN="no"/RUN="yes"/' /etc/default/tayga
# /etc/init.d/tayga start

Ajout d'un NAT en entrée IPv4 vers IPv6

Le problème du « IPv6 only » dans le cas où l'on héberge un serveur (sur le LAN) est qu'il faut forwarder les requêtes venant d'une IPv4 vers le serveur qui écoute sur une IPv6.
Il semble compliqué de se contenter de ne recevoir les mails que via IPv6...

Tayga permet de « mapper » des IPv4 complètement virtuelles (utilisées sur aucune interfaces) vers des IPv6.
Admettons qu'on veut forwarder les requêtes entrantes sur le port TCP 25 dans l'interface eth0 vers l'IPv6 2001:910:109c:1::25.

# echo "map 192.168.255.25 2001:910:109c:1::25" >> /etc/tayga.conf
# /sbin/iptables -t nat -A PREROUTING -p tcp --dport 25 -i eth0 --to 192.168.255.25:25 -j DNAT 
# /sbin/iptables -A FORWARD -i eth0 -o nat64 -d 192.168.255.25 -p tcp --dport 25 -j ACCEPT
# /sbin/ip6tables -A FORWARD -i nat64 -d 2001:910:109c:1::25 -p tcp --dport 25 -j ACCEPT
# /etc/init.d/tayga restart

Problèmes liés à cette architecture

  • Peu de serveurs DNS répondent sur IPv6. Le serveur DNS doit avoir une connectivité IPv4 car il interroge des IP et non des domains donc pas de DNS64.
  • A priori, bind pert les pédales en cas d'un enregistrement CNAME vers un CNAME vers un A. Exemple :
    $ host -t aaaa fr.wikipedia.org
    Host fr.wikipedia.org not found: 3(NXDOMAIN)
    $ host -t a fr.wikipedia.org
    fr.wikipedia.org is an alias for wikipedia-lb.wikimedia.org.
    wikipedia-lb.wikimedia.org is an alias for wikipedia-lb.esams.wikimedia.org.
    wikipedia-lb.esams.wikimedia.org has address 91.198.174.225
    $ host -t aaaa wikipedia-lb.wikimedia.org
    wikipedia-lb.wikimedia.org is an alias for wikipedia-lb.esams.wikimedia.org.
    wikipedia-lb.esams.wikimedia.org has IPv6 address 2001:910:109c:ffff::5bc6:aee1