NAT64DNS64 » Historique » Version 2
Version 1 (Fabien Dupont, 28/05/2012 21:00) → Version 2/9 (Fabien Dupont, 28/05/2012 21:08)
h1. Mise en place d'un LAN « IPv6 only » sous debian
h2. Principe
<pre> 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)</pre>
h2. Installation/configuration de bind (DNS64)
DNS64 n'est supporté qu'à partir de debian « wheezy ».
<pre># 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
</pre>
La configuration se fait au niveau du groupe « options » :
<pre>options {
(...)
listen-on-v6 { any; };
dns64 2001:910:109c:ffff::/96 {
clients { any; };
recursive-only yes;
};
(...)
}</pre>
h2. Installation/configuration de tayga (NAT64)
<pre># 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
# sed -i -e 's/^RUN="no"/RUN="yes"/' /etc/default/tayga
# /etc/init.d/tayga start</pre>
h2. Ajout d'un NAT 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.
<pre>
# 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</pre>
h2. 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 :
<pre>$ 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</pre>
h2. Principe
<pre> 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)</pre>
h2. Installation/configuration de bind (DNS64)
DNS64 n'est supporté qu'à partir de debian « wheezy ».
<pre># 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
</pre>
La configuration se fait au niveau du groupe « options » :
<pre>options {
(...)
listen-on-v6 { any; };
dns64 2001:910:109c:ffff::/96 {
clients { any; };
recursive-only yes;
};
(...)
}</pre>
h2. Installation/configuration de tayga (NAT64)
<pre># 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
# sed -i -e 's/^RUN="no"/RUN="yes"/' /etc/default/tayga
# /etc/init.d/tayga start</pre>
h2. Ajout d'un NAT 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.
<pre>
# 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</pre>
h2. 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 :
<pre>$ 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</pre>