Mise en place de l’IPv6 via un tunnel VPN IPv4

Cette article a pour objectif la mise en place de l’IPv6 au travers un tunnel VPN IPv4.

Il y a plusieurs raison pouvant amener à mettre en place de l’IPv6.

  • Votre fournisseur internet traîne…
  • Vous voulez apporter de la connectivité IPv6 à vos serveur,
  • ou bien tout autre raison…

De toute façon, il n’y a que des bonnes raisons de vouloir mettre l’IPv6 en place Ha Ha

I° – Prérequis

Nous nous appuierons sur le Serveur OPENVPN pour ces manipulations.

Nous considérons ici que le serveur OPENVPN est installé et configuré.

Le client se connecte en IPv4 sur le serveur VPN :

SERVEUR VPN (ip 10.10.30.1)  ———- CLIENT VPN (ip 10.10.30.254)

Nous disposons du bloc IPv6 suivant pour l »exemple :  2001:0e0b:21a1::/48

Nous allons donc créer un Point 2 Point IPv6 de la manière suivante :

SERVEUR VPN (ip 2001:0e0b:21a1:30::1/64)  ———- CLIENT VPN (ip 2001:0e0b:21a1:30::ffff/64)

Ce bloc est fournit pour ONLINE pour ceux que ça intéresse.

II° – Configuration OPENVPN IPv4

a – Coté serveur

 

Voici le fichier de configuration utilisé. Je vous laisse soin de gérer la PKI, qui ne sera pas abordé ici.

# Conf Serveur
port 1195
proto udp
dev tap
dev-type tap
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
tls-auth keys/ta.key 0
dh keys/dh1024.pem
server 10.10.30.0 255.255.255.0
ifconfig-pool-persist ipp.txt
float
keepalive 10 120
cipher AES-256-CBC
max-clients 2
user nobody
group nogroup
client-config-dir ccd
persist-key
persist-tun
status-version 2
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20

 

à adapter selon vos besoin :)

Note : j’ai utilisé la directive ifconfig-pool-persist ipp.txt pour fixer l’adresse IP du client en 10.10.30.254

b – Coté client

 

Voici la configuration cliente utilisée :

client
dev tap1
proto udp
remote monippublique 1195
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
tls-client
ca keys/ca-v6.crt
cert keys/client-v6.crt
key keys/client-v6.key
ns-cert-type server
tls-auth keys/ta-v6.key 1
cipher AES-256-CBC
verb 3
status /var/log/openvpn-status-v6.log
log-append /var/log/openvpn-v6.log

 

Normalement, les 2 extremités du tunnel doivent se pinger :

 

root@serveur:/etc/openvpn# ping 10.10.30.254 -c2
PING 10.10.30.2 (10.10.30.2) 56(84) bytes of data.
64 bytes from 10.10.30.2: icmp_req=1 ttl=64 time=21.1 ms
64 bytes from 10.10.30.2: icmp_req=2 ttl=64 time=17.2 ms

--- 10.10.30.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 17.245/19.185/21.125/1.940 ms

 

Et du client :

root@client:/etc/openvpn# ping 10.10.30.1 -c2
PING 10.10.30.1 (10.10.30.1) 56(84) bytes of data.
64 bytes from 10.10.30.1: icmp_req=1 ttl=64 time=35.7 ms
64 bytes from 10.10.30.1: icmp_req=2 ttl=64 time=18.2 ms

--- 10.10.30.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 18.278/27.008/35.738/8.730 ms

 

Jusqu’ici tout va bien :) Sinon, je vous laisse corriger pour que cela fonctionne ! Hit with Brick

III° – Mise en place de l’IPv6

 

Nous allons monter maintenant les interfaces IPv6 sur le routeur puis sur le client.

Nous allons faire cela manuellement dans un 1er temps. Cela pourra être scripté ultérieurement.

Nous allons utilisé la plage  d’IPv6 suivante : 2001:0e0b:21a1:300::1/64

Je sais.. ça fait beaucoup d’IP pour 2 adresses utilisés mais bon… libre à vous de les réduire ;)

a – Coté serveur

 

De coté la, nous allons mettre en place un tunnel grâce au driver SIT : Simple Internet Transition . Ce driver est utilisé pour faire passer le trafic IPv6 dans le tunnel à travers un réseau IPv4

Pur ce faire, 2 petites commandes sont à passer pour monter le tunnel IPv4 dans lequel l’IPv6 va passer.

Les éléments en gras seront à adapter :

/sbin/ip tunnel add site300v6 mode sit ttl 255 remote 10.10.30.254 local 10.10.30.1
/sbin/ip link set dev site300v6 up

 

  • site300v6 : nom de l’interface
  • remote 10.10.30.254 : adresse IPv4 coté client
  • local 10.10.30.1 : adresse IPv4 coté serveur

Dans les logs vous devriez avoir quelque chose comme ça :

dmesg  | grep "IPv6 over IPv4 tunneling driver"
[ 1641.145791] IPv6 over IPv4 tunneling driver

 

Il ne reste plus qu’à attribuer l’adresse IPv6 à notre nouvelle interface et la route pour joindre le client :

/sbin/ip -6 addr add  2001:0e0b:21a1:30::1/64 dev site300v6
/sbin/ip -6 route add  2001:0e0b:21a1:30::/64 via  2001:0e0b:21a1:30::ffff dev site300v6 metric 1

 

Vérifions :

# ifconfig site300v6
site300v6 Link encap:IPv6-dans-IPv4  
          adr inet6: fe80::6464:1e01/128 Scope:Lien
          adr inet6: 2001:0e0b:21a1:30::1/64 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

L’interface est UP et l’IPv6 est configué pour la partie serveur.

b – Coté client

1° – Sous linux

Ba tout comme sur le serveur, nous allons monter l’interface avec le driver SIT (les élément en gras sont à adapter selon votre config)  :

/sbin/ip tunnel add site300v6 mode sit ttl 255 remote 10.10.30.1 local 10.10.30.254
/sbin/ip link set dev site300v6 up

 

Dans les logs vous devriez avoir quelque chose comme ça :

dmesg  | grep "IPv6 over IPv4 tunneling driver"
[ 1641.145791] IPv6 over IPv4 tunneling driver

 

Il ne reste plus qu’à attribuer l’adresse IPv6 à notre nouvelle interface et la route par défaut pour joindre le serveur et les autres IPv6 on the net :

/sbin/ip -6 addr add 2001:0e0b:21a1:30::ffff/64 dev site300v6
/sbin/ip route add ::/0 via 2001:0e0b:21a1:30::1

 

Vérifions l’interface :

# ifconfig site300v6
site300v6 Link encap:IPv6-dans-IPv4  
          adr inet6: 2001:0e0b:21a1:30::ffff/64 Scope:Global
          POINTOPOINT NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

2° – Sous FreeBSD

Ba la c’est le même principe.

Sous BSD l’équivalent est l’interface gif0, qui créer un tunnel IPv4 => IPv6

 

ifconfig gif0 create
ifconfig gif0 tunnel 10.10.30.254 10.10.30.1
ifconfig gif0 inet6 2001:0e0b:21a1:30::ffff/64
route -n add -inet6 default 2001:0e0b:21a1:30::1
ifconfig gif0 up

 

IV° – Conclusion et suite

Ça semble bon tout ça !
Maintenant, testons le ping en IPv6 !

Pingons la gateway à partir du client :

# ping6 -c 4 2001:0e0b:21a1:30::1 
PING 2001:0e0b:21a1:30::1(2001:0e0b:21a1:30::1) 56 data bytes
64 bytes from 2001:0e0b:21a1:30::1: icmp_seq=1 ttl=64 time=12.4 ms
64 bytes from 2001:0e0b:21a1:30::1: icmp_seq=2 ttl=64 time=10.2 ms
64 bytes from 2001:0e0b:21a1:30::1: icmp_seq=3 ttl=64 time=13.4 ms
64 bytes from 2001:0e0b:21a1:30::1: icmp_seq=4 ttl=64 time=20.5 ms

--- 2001:0e0b:21a1:30::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 10.241/14.144/20.524/3.856 ms

 

Pingons en v6 notre ami google :

# ping6 -nc 4 ipv6.google.com
PING ipv6.google.com(2a00:1450:4009:803::1011) 56 data bytes
64 bytes from 2a00:1450:4009:803::1011: icmp_seq=1 ttl=53 time=26.8 ms
64 bytes from 2a00:1450:4009:803::1011: icmp_seq=2 ttl=53 time=27.2 ms
64 bytes from 2a00:1450:4009:803::1011: icmp_seq=3 ttl=53 time=26.5 ms
64 bytes from 2a00:1450:4009:803::1011: icmp_seq=4 ttl=53 time=28.1 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 26.540/27.203/28.160/0.640 ms

 

Oulala !! ça ping en V6 !!!! Que d’émotion !!

DribbleToo Sad

 

Voila, vous devriez avoir un tunnel IPv6 fonctionnel !

Il ne reste plus qu’à attribuer une autre plage d’IPv6 sur l’autre patte de votre client VPN (ba oui c’est un routeur nan ?), monter un petit DHCPv6 et mettre en place les routes qui vont bien et hop ! un réseau IPv6 fonctionnel !!

Amusez vous bien !


Article lu 4954 fois

Laisser un commentaire