Projet

Général

Profil

IPv6 » Historique » Version 76

Laurent GUERBY, 17/09/2012 23:41

1 56 Laurent GUERBY
{{>toc}}
2 56 Laurent GUERBY
3 1 Laurent GUERBY
h1. IPv6
4 1 Laurent GUERBY
5 34 Laurent GUERBY
Déploiement a tetaneutral.net : #35
6 1 Laurent GUERBY
7 34 Laurent GUERBY
h2. Liens
8 2 Laurent GUERBY
9 59 Laurent GUERBY
[[WorldIPv6Launch20120606]]
10 59 Laurent GUERBY
11 5 Laurent GUERBY
General
12 5 Laurent GUERBY
13 2 Laurent GUERBY
* http://en.wikipedia.org/wiki/ICMPv6
14 3 Laurent GUERBY
* http://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol
15 4 Laurent GUERBY
* http://en.wikipedia.org/wiki/Radvd
16 4 Laurent GUERBY
* http://en.wikipedia.org/wiki/DHCPv6
17 69 Laurent GUERBY
** https://wikispaces.psu.edu/display/ipv6/DHCPv6
18 43 Laurent GUERBY
* http://www.iana.org/assignments/icmpv6-parameters
19 45 Laurent GUERBY
20 45 Laurent GUERBY
Statistics
21 45 Laurent GUERBY
22 44 Laurent GUERBY
* http://bgp.he.net/ipv6-progress-report.cgi
23 45 Laurent GUERBY
* https://labs.ripe.net/Members/mirjam/content-ipv6-measurement-compilation
24 46 Laurent GUERBY
* http://www.ripe.net/internet-coordination/ipv4-exhaustion/ipv4-available-pool-graph
25 76 Laurent GUERBY
* http://www.google.com/ipv6/statistics.html
26 76 Laurent GUERBY
* http://julien.vaubourg.com/files/lothaire-yarding_ipv6.pdf
27 5 Laurent GUERBY
28 5 Laurent GUERBY
Linux
29 5 Laurent GUERBY
30 5 Laurent GUERBY
* http://madduck.net/docs/ipv6/
31 5 Laurent GUERBY
* http://tldp.org/HOWTO/Linux+IPv6-HOWTO/
32 29 Laurent GUERBY
* http://linux.die.net/man/8/rdisc6
33 38 Laurent GUERBY
* bind IPv4+IPv6 /proc/sys/net/ipv6/bindv6only http://www.kernel.org/doc/man-pages/online/pages/man7/ipv6.7.html
34 1 Laurent GUERBY
* sileht : comme arpwatch mais en ipv6 http://ndpmon.sourceforge.net/
35 49 Laurent GUERBY
* sileht : proxy NDP auto http://www.priv.nu/projects/ndppd/  et https://github.com/Tuhox/ndppd
36 20 Laurent GUERBY
37 21 Laurent GUERBY
Tunnels
38 21 Laurent GUERBY
39 21 Laurent GUERBY
* http://en.wikipedia.org/wiki/List_of_IPv6_tunnel_brokers
40 21 Laurent GUERBY
* http://tunnelbroker.net
41 21 Laurent GUERBY
* http://sonic.net/features/ipv6/
42 21 Laurent GUERBY
43 23 Laurent GUERBY
Misc
44 23 Laurent GUERBY
45 37 Laurent GUERBY
* Cool IPv6 stuff http://www.sixxs.net/misc/coolstuff/
46 23 Laurent GUERBY
* http://interviews.slashdot.org/story/11/10/25/1532213/vint-cerf-answers-your-questions-about-ipv6-and-more
47 24 Laurent GUERBY
* http://infosecblog.antonaylward.com/2010/08/05/re-opensuse-ipv6-nat-was-113-and-ssh-x-forwarding-not-working/
48 41 Laurent GUERBY
* conférence JRES 2011 http://stream.ut-capitole.fr/jres2011/57.html
49 51 Laurent GUERBY
* http://vincent.riquer.fr/blog/archives/2010/04/11/openvpn__ipv6__bind__happiness/index.html
50 53 Laurent GUERBY
* http://blog.si6networks.com/2012/02/ipv6-nids-evasion-and-improvements-in.html
51 55 Laurent GUERBY
* https://vador.fdn.fr/wiki/support:faq:ipv6
52 59 Laurent GUERBY
* http://blog.si6networks.com/2012/02/ipv6-nids-evasion-and-improvements-in.html
53 60 Laurent GUERBY
* http://www.cisco.com/en/US/docs/ios/ipv6/configuration/guide/ip6-first_hop_security.html#wp1054246
54 60 Laurent GUERBY
* http://tools.ietf.org/html/draft-ietf-v6ops-ra-guard-implementation-01
55 23 Laurent GUERBY
56 22 Laurent GUERBY
Opérateurs
57 22 Laurent GUERBY
58 22 Laurent GUERBY
* DS-Lite chez FT http://www.ietf.org/mail-archive/web/v6ops/current/msg10652.html
59 27 Laurent GUERBY
* IPv6 chez comcast http://tech.slashdot.org/story/11/11/09/174217/comcast-begins-native-ipv6-deployment-to-end-users
60 28 Laurent GUERBY
* DHCP-PD http://ipv6.internode.on.net/
61 67 Laurent GUERBY
* Ninux [[AirOS]] vs [[OpenWRT]] retour d'experience http://blog.ninux.org/2012/06/06/the-ipv6-deployment-in-the-ninux-community-network/
62 22 Laurent GUERBY
63 68 Laurent GUERBY
Tests
64 68 Laurent GUERBY
65 68 Laurent GUERBY
* http://ip6.nl/
66 68 Laurent GUERBY
67 64 Laurent GUERBY
h2. RIPE
68 64 Laurent GUERBY
69 64 Laurent GUERBY
* IPv6 Address Allocation and Assignment Policy 
70 64 Laurent GUERBY
** http://www.ripe.net/ripe/docs/ripe-552
71 64 Laurent GUERBY
* RIPE Routing Working Group Recommendations on IPv6 Route Aggregation
72 64 Laurent GUERBY
** http://www.ripe.net/ripe/docs/ripe-532
73 64 Laurent GUERBY
74 62 Laurent GUERBY
h2. Configuration d'un LAN « IPv6 only » sous debian
75 62 Laurent GUERBY
76 62 Laurent GUERBY
* [[NAT64DNS64]]
77 62 Laurent GUERBY
* [[THSF 2012]]
78 62 Laurent GUERBY
79 65 Laurent GUERBY
h2. Debian
80 65 Laurent GUERBY
81 65 Laurent GUERBY
* http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=643594
82 65 Laurent GUERBY
** ebtables: v2.0.10-1 wish for ipv6-icmp and security
83 66 Laurent GUERBY
** fixé le 5 juin 2012
84 66 Laurent GUERBY
** voir aussi [[Spoofing]]
85 65 Laurent GUERBY
86 30 Laurent GUERBY
h2. Désactiver la configuration automatique
87 30 Laurent GUERBY
88 57 Bernard Urban
Un serveur aura typiquement une configuration entièrement statique assignée par l'hébergeur, laisser la configuration dynamique activée est un risque de voir un tiers prendre le controle du routage serveur ou l'empécher de fonctionner via l'envoi d'une configuration dynamique erronée. Il est donc préférable de désactiver la configuration dynamique IPv6 sur une VM ou serveur physique hébergé chez tetaneutral.net. Si votre VM est en mode routeur (c'est à dire la commande "more /proc/sys/net/ipv6/conf/all/forwarding" renvoit 1), cette désactivation est implicite, voir dans le source du noyau Linux le fichier "Documentation/networking/ip-sysctl.txt")
89 30 Laurent GUERBY
90 33 Laurent GUERBY
En version rapide executer sur sa VM ou machine en root la ligne suivante :
91 30 Laurent GUERBY
92 1 Laurent GUERBY
<pre>
93 33 Laurent GUERBY
wget -qO - http://tetaneutral.net/ipv6/ipv6noauto.sh | bash
94 33 Laurent GUERBY
</pre>
95 33 Laurent GUERBY
96 35 Laurent GUERBY
Le détail de ce que fait ce script ci-après.
97 33 Laurent GUERBY
98 33 Laurent GUERBY
h3. Désactiver autoconf et accept_ra pour la session en cours
99 33 Laurent GUERBY
100 33 Laurent GUERBY
Executer en root la ligne suivante :
101 33 Laurent GUERBY
102 33 Laurent GUERBY
<pre>
103 30 Laurent GUERBY
for i in /proc/sys/net/ipv6/conf/*; do for j in autoconf accept_ra; do echo 0 > $i/$j; done;done
104 30 Laurent GUERBY
</pre>
105 1 Laurent GUERBY
106 33 Laurent GUERBY
h3. Le rendre permanent en cas de reboot
107 31 Laurent GUERBY
108 33 Laurent GUERBY
Editer la section inte6 de /etc/network/interfaces  pour ajouter deux "pre-up" entre la ligne "iface" et la ligne "address" :
109 30 Laurent GUERBY
110 30 Laurent GUERBY
<pre>
111 30 Laurent GUERBY
iface eth0 inet6 static
112 30 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
113 30 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
114 1 Laurent GUERBY
   address ...
115 30 Laurent GUERBY
</pre>
116 30 Laurent GUERBY
117 57 Bernard Urban
Créer un fichier pour sysctl :
118 30 Laurent GUERBY
119 30 Laurent GUERBY
<pre>
120 32 Laurent GUERBY
cat > /etc/sysctl.d/local-ipv6.conf <<EOF
121 30 Laurent GUERBY
122 30 Laurent GUERBY
# No IPV6 RA or autoconf
123 30 Laurent GUERBY
net.ipv6.conf.all.autoconf = 0
124 30 Laurent GUERBY
net.ipv6.conf.all.accept_ra = 0
125 30 Laurent GUERBY
net.ipv6.conf.default.autoconf = 0
126 1 Laurent GUERBY
net.ipv6.conf.default.accept_ra = 0
127 1 Laurent GUERBY
128 1 Laurent GUERBY
EOF
129 33 Laurent GUERBY
</pre>
130 33 Laurent GUERBY
131 33 Laurent GUERBY
132 35 Laurent GUERBY
h3. Référence : source du script ipv6noauto.sh
133 33 Laurent GUERBY
134 33 Laurent GUERBY
<pre>
135 33 Laurent GUERBY
echo deactivating autoconf and accept_ra
136 33 Laurent GUERBY
137 33 Laurent GUERBY
for i in /proc/sys/net/ipv6/conf/*; do 
138 33 Laurent GUERBY
 for j in autoconf accept_ra; do 
139 33 Laurent GUERBY
  echo $i/$j
140 33 Laurent GUERBY
  echo 0 > $i/$j
141 33 Laurent GUERBY
 done
142 33 Laurent GUERBY
done
143 33 Laurent GUERBY
144 33 Laurent GUERBY
145 33 Laurent GUERBY
F=/etc/network/interfaces
146 33 Laurent GUERBY
if ! grep accept_ra $F >& /dev/null; then
147 33 Laurent GUERBY
 echo fixing /etc/network/interfaces
148 33 Laurent GUERBY
 cp -f $F $F.save
149 33 Laurent GUERBY
 sed -e 's,iface eth0 inet6 static,iface eth0 inet6 static\n   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra\n   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf,g' < $F.save > $F
150 33 Laurent GUERBY
fi
151 33 Laurent GUERBY
152 33 Laurent GUERBY
if [ ! -f /etc/sysctl.d/local-ipv6.conf ]; then
153 33 Laurent GUERBY
 echo creating /etc/sysctl.d/local-ipv6.conf
154 33 Laurent GUERBY
155 33 Laurent GUERBY
 cat > /etc/sysctl.d/local-ipv6.conf <<EOF
156 33 Laurent GUERBY
157 33 Laurent GUERBY
# No IPV6 RA or autoconf
158 33 Laurent GUERBY
net.ipv6.conf.all.autoconf = 0
159 33 Laurent GUERBY
net.ipv6.conf.all.accept_ra = 0
160 33 Laurent GUERBY
net.ipv6.conf.default.autoconf = 0
161 33 Laurent GUERBY
net.ipv6.conf.default.accept_ra = 0
162 33 Laurent GUERBY
163 33 Laurent GUERBY
EOF
164 33 Laurent GUERBY
165 33 Laurent GUERBY
fi
166 33 Laurent GUERBY
167 33 Laurent GUERBY
echo done
168 30 Laurent GUERBY
</pre>
169 30 Laurent GUERBY
170 56 Laurent GUERBY
h2. ARP cache limits
171 30 Laurent GUERBY
172 56 Laurent GUERBY
TODO via Cyril B.
173 56 Laurent GUERBY
174 56 Laurent GUERBY
<pre>
175 56 Laurent GUERBY
net.ipv6.neigh.default.gc_thresh1 = 1024
176 56 Laurent GUERBY
net.ipv6.neigh.default.gc_thresh2 = 2048
177 56 Laurent GUERBY
net.ipv6.neigh.default.gc_thresh3 = 4096
178 56 Laurent GUERBY
</pre>
179 30 Laurent GUERBY
180 25 Laurent GUERBY
h2. Pièges
181 25 Laurent GUERBY
182 25 Laurent GUERBY
Attention a bien mettre les zéros en fin de mot :
183 1 Laurent GUERBY
184 25 Laurent GUERBY
Ne pas mettre 2a01:6600:8081:XX:: car c'est 2a01:6600:8081: *00* XX::
185 26 Laurent GUERBY
Utiliser 2a01:6600:8081: *XX00* ::
186 22 Laurent GUERBY
187 34 Laurent GUERBY
h2. Comment activer le routage sur son /56 IPv6 ?
188 7 Jérôme Nicolle
189 34 Laurent GUERBY
Chaque IPv4 livrée par tetaneutral.net est associé à un /56 IPv6, avec une équivalence /24  = 256 IPv4 <=> /48 = 256 /56 IPv6
190 7 Jérôme Nicolle
191 8 Laurent GUERBY
h2. Discussions
192 1 Laurent GUERBY
193 8 Laurent GUERBY
> J'ai fait quelques essais: VM configuré en routeur, openvpn entre la VM
194 8 Laurent GUERBY
> et ma machine, histoire de simuler des interfaces. J'ai essayé radvd
195 8 Laurent GUERBY
> comme des définitions manuelles des adresses IPv6.
196 8 Laurent GUERBY
> 
197 8 Laurent GUERBY
> Bon, ça marche depuis la VM mais pas depuis chez moi (wget
198 8 Laurent GUERBY
> http://ipv6.google.com), même si les paquets IPv6 (vu avec tcpdump)
199 8 Laurent GUERBY
> partent bien de la VM vers l'internet. Mais il n'y a pas de retour.
200 8 Laurent GUERBY
> 
201 8 Laurent GUERBY
> Après quelques cogitations et la lecture de ceci:
202 8 Laurent GUERBY
> http://www.fdn.fr/IPv6-a-la-maison.html j'en arrive à ces
203 8 Laurent GUERBY
> réflexions:
204 8 Laurent GUERBY
> 
205 8 Laurent GUERBY
> 1) Dans le blog FDN ci-dessus l'adresse IPv6 affectée au ppp0 n'est pas
206 8 Laurent GUERBY
> dans son /48; ce qui voudrait dire qu'il n'y a pas de raison d'affecter
207 8 Laurent GUERBY
> une IPv6 du /56 au eth0 des VM tetaneutral.
208 8 Laurent GUERBY
> 
209 8 Laurent GUERBY
> 2) Pour faire marcher une telle config à FDN, le routeur FDN en amont du
210 8 Laurent GUERBY
> modem/routeur de l'abonné devrait avoir une route du type:
211 8 Laurent GUERBY
> ip -6 route add range/48 dev ppp-abonné via link-local-ppp-abonné
212 8 Laurent GUERBY
> soit chez nous:
213 8 Laurent GUERBY
> ip -6 route add range/56 dev eth0-vm via link-local-eth0-vm
214 8 Laurent GUERBY
> 
215 8 Laurent GUERBY
> > du /56 via une interconnection explicite entre le routeur de
216 8 Laurent GUERBY
> > tetaneutral.net et un routeur chez le membre ?
217 8 Laurent GUERBY
> 
218 8 Laurent GUERBY
> Un lien openvpn?
219 8 Laurent GUERBY
220 8 Laurent GUERBY
Bonsoir,
221 8 Laurent GUERBY
222 8 Laurent GUERBY
On peut rajouter une regle de routage comme tu le suggere,
223 8 Laurent GUERBY
reste a choisir les details pratiques.
224 8 Laurent GUERBY
225 8 Laurent GUERBY
Pour la link-local coté routeur on a choisi fe80::31 en statique il
226 8 Laurent GUERBY
reste a choisir une regle pour attribuer le link local coté client. 
227 8 Laurent GUERBY
228 8 Laurent GUERBY
Une regle automatique basée sur l'IPv4 est en place pour
229 8 Laurent GUERBY
l'attribution du subnet IPv6 :
230 8 Laurent GUERBY
231 8 Laurent GUERBY
http://wiki.tetaneutral.net/index.php/Architecture
232 8 Laurent GUERBY
233 8 Laurent GUERBY
Une regle similaire pour le routage donnerait par exemple fe80::81:XY
234 8 Laurent GUERBY
ou XY est le dernier octet de l'IPv4 ecrit en hexadecimal
235 8 Laurent GUERBY
pour la link local coté client.
236 8 Laurent GUERBY
237 8 Laurent GUERBY
L'avantage d'une regle statique vs le SLAAC c'est que c'est un peu plus
238 8 Laurent GUERBY
flexible coté client sur le choix de l'equipement routeur.
239 8 Laurent GUERBY
240 8 Laurent GUERBY
L'avantage du routé est bien sur la flexibilité et la sécurisation
241 8 Laurent GUERBY
potentielle, l'inconvenient est qu'avec nos equipements actuels peu
242 8 Laurent GUERBY
puissant on perdra un peu en debit mais ça se corrigera avec
243 8 Laurent GUERBY
de nouveaux equipements.
244 8 Laurent GUERBY
245 8 Laurent GUERBY
Je suis vraiment curieux de savoir comment font les autres hebergeurs
246 8 Laurent GUERBY
dans le monde IPv6, ceux auxquels j'ai acces ne proposent pas de
247 8 Laurent GUERBY
routage, simplement ce que propose tetaneutral.net actuellement.
248 8 Laurent GUERBY
249 8 Laurent GUERBY
Suggestions ?
250 8 Laurent GUERBY
251 15 Bernard Urban
h2. Connectivité IPv6 complète depuis chez vous en quelques étapes simples
252 9 Bernard Urban
253 10 Bernard Urban
Connectivité complète signifie que toutes vos machines pouvant fonctionner en IPv6 peuvent accéder des sites IPv6 externes mais surtout être joignables de l'extérieur sur une adresse IPv6 propre. Pas de NAT ou autre bidouille de ce genre. Implications en terme d'autohébergement et sécurité laissées en exercice. 
254 9 Bernard Urban
255 11 Bernard Urban
Pour bien comprendre ce qui suit, il est recommandé d'avoir un peu potassé les hyperliens plus haut et mieux encore d'avoir joué avec l'IPv6 sur votre réseau local maison en utilisant par exemple des adresses ULA.
256 1 Laurent GUERBY
257 10 Bernard Urban
h3. Etape 1: obtenir une machine virtuelle Tetaneutral. 
258 10 Bernard Urban
259 10 Bernard Urban
Celle-ci (on l'appellera VM dans la suite) sera configurée par défaut comme suit dans /etc/network/interfaces du point de vue IPv6:
260 1 Laurent GUERBY
<pre>
261 1 Laurent GUERBY
iface eth0 inet6 static
262 57 Bernard Urban
   # les 2 lignes qui suivent ne seront pas nécessaires lorsque 
263 57 Bernard Urban
   # plus loin nous passerons en mode routeur
264 54 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
265 54 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
266 9 Bernard Urban
   address 2a01:6600:80XX:YY00::1
267 1 Laurent GUERBY
   netmask 56
268 1 Laurent GUERBY
   gateway fe80::31
269 1 Laurent GUERBY
</pre>
270 1 Laurent GUERBY
271 1 Laurent GUERBY
où XX et YY sont les versions hexadécimales des xx et yy décimaux de votre (unique!) adresse IPv4 de la forme 91.224.xx.yy.
272 10 Bernard Urban
273 11 Bernard Urban
Voyons ce qu'implique la prise en compte par le système de ce fragment de /etc/network/interfaces. Il dit que:
274 10 Bernard Urban
# l'adresse 2a01:6600:80XX:YY00::1 est affectée à eth0, ce qui signifie que votre VM est accessible à cette adresse depuis l'intérieur de la VM comme depuis l'extérieur par toutes les machines du même segment réseau que eth0
275 10 Bernard Urban
# les paquets passant par votre VM peuvent atteindre les adresses de la plage 2a01:6600:80XX:YY00::/56 en étant envoyés en sortie de l'interface eth0
276 10 Bernard Urban
277 10 Bernard Urban
La plage 2a01:6600:80XX:YY00::/56 a été allouée par tetaneutral à votre VM. Notre problème est d'allouer une partie de ces adresses à des machines de notre domicile en utilisant l'accès que nous avons (en IPv4!) à la VM.
278 1 Laurent GUERBY
279 1 Laurent GUERBY
Avec cette configuration, vous pouvez héberger sur la VM des milliards de serveurs avec des adresses IPv6 différentes, il suffit de les ajouter à eth0 par une commande du type:
280 10 Bernard Urban
<pre>
281 57 Bernard Urban
ip -6 address add une-adresse-ipv6-de-votre-plage/56 dev eth0
282 10 Bernard Urban
</pre>
283 11 Bernard Urban
Le /56 n'est pas absolument nécessaire, il évite juste de rajouter une route plus spécifique pour atteindre votre nouvelle adresse IPv6 depuis votre VM, route qui s'avère redondante.
284 10 Bernard Urban
285 1 Laurent GUERBY
Le lecteur attentif aura noté que cette configuration déclare que toutes les adresses de votre plage sont situées derrière eth0, en dehors de la partie contrôlée par votre VM, et il semble impossible alors d'en distraire une partie. Il y a au moins deux solutions à ce problème:
286 1 Laurent GUERBY
# S'arranger pour que les segments réseau de votre domicile fassent partie de celui partant de eth0 sur la VM. Celà revient techniquement à bridger ces segments réseaux. Cette solution a cependant des inconvénients en terme de configurabilité et de sécurité.
287 12 Bernard Urban
# Réduire la plage IPv6 allouée derrière l'eth0 de la VM et réallouer le solde à votre réseau local maison, par des techniques de routage. C'est ce qu'on va décrire dans la suite. Mais d'abord, on a besoin d'un peu de collaboration de Tetaneutral. 
288 1 Laurent GUERBY
289 11 Bernard Urban
h3. Etape 2: faire router votre plage /56 par Tetaneutral.
290 1 Laurent GUERBY
291 11 Bernard Urban
Dans la configuration par défaut des VM Tetaneutral, l'hôte des VM crée la route vers l'adresse 2a01:6600:80XX:YY00::1 (et des autres que vous rajoutez éventuellement à la main sur eth0) par l'utilisation de l'équivalent IPv6 d'ARP. Il est donc impossible de router vers une adresse qui n'existe pas sur cet eth0. 
292 11 Bernard Urban
293 11 Bernard Urban
Tetaneutral doit donc rajouter une route explicite:
294 11 Bernard Urban
<pre>
295 11 Bernard Urban
ip -6 route add 2a01:6600:80XX:YY00::/56 via fe80::XX:YY dev votre-eth0-côté-hôte
296 11 Bernard Urban
</pre>
297 11 Bernard Urban
298 1 Laurent GUERBY
Celà n'a de sens que si fe80::XX:YY une des adresses de l'eth0 côté VM. Il faut donc l'ajouter et le mieux est de le faire via une directive 'up' dans /etc/network/interfaces:
299 1 Laurent GUERBY
<pre>
300 1 Laurent GUERBY
iface eth0 inet6 static
301 57 Bernard Urban
   # les 2 lignes qui suivent ne seront pas nécessaires lorsque 
302 57 Bernard Urban
   # plus loin nous passerons en mode routeur
303 54 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
304 54 Laurent GUERBY
   pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
305 11 Bernard Urban
   address 2a01:6600:80XX:YY00::1
306 11 Bernard Urban
   netmask 64
307 11 Bernard Urban
   gateway fe80::31   
308 11 Bernard Urban
   up ip -6 add add fe80::XX:YY dev eth0
309 1 Laurent GUERBY
</pre>
310 11 Bernard Urban
311 14 Bernard Urban
Mon lecteur toujours très attentif n'aura pas manqué de noter que netmask ci-dessus est passé de 56 à 64. Nous n'allouons donc maintenant plus toutes nos adresses IPv6 sur le segment réseau partant d'eth0. En particulier, nous allons voir maintenant comment récupérer la sous-plage 2a01:6600:80XX:YY01::/64 pour notre réseau à domicile. 
312 1 Laurent GUERBY
313 14 Bernard Urban
+Remarque:+ la sous-plage doit être /64, sinon l'adressage automatique des interfaces réseau qu'on verra plus loin ne marchera pas.
314 12 Bernard Urban
315 13 Bernard Urban
h3. Etape 3: simuler un lien ethernet entre une machine à domicile et cette VM.
316 1 Laurent GUERBY
317 11 Bernard Urban
Les technologies VPN/tunnel sont le pendant réseau des machines virtuelles: elles permettent de créer des interfaces réseaux virtuelles (du point de vue hardware, mais bien réelles d'un point de vue logiciel) et de les connecter entre elles. 
318 1 Laurent GUERBY
319 12 Bernard Urban
Tout comme les machines virtuelles nécessitent quand même un minimum de support silicium, un VPN/tunnel va nécessiter de s'appuyer sur une vraie liaison entre deux vraies interfaces réseau, en l'occurence pour nous la liaison internet IPv4 entre autre utilisée pour l'administration de la VM depuis votre domicile. Plus précisément, nous allons utiliser l'outil openvpn.
320 11 Bernard Urban
321 11 Bernard Urban
La première étape va consister à installer openvpn en mode serveur sur la VM. Le fichier suivant est à créer dans /etc/openvpn/myris.conf:
322 11 Bernard Urban
<pre>
323 11 Bernard Urban
dev tap
324 11 Bernard Urban
proto udp
325 11 Bernard Urban
local 91.224.xx.yy
326 11 Bernard Urban
float
327 11 Bernard Urban
ca myris/ca.crt
328 11 Bernard Urban
cert myris/myris.crt
329 11 Bernard Urban
key myris/myris.key
330 11 Bernard Urban
dh myris/dh1024.pem
331 11 Bernard Urban
tls-server
332 11 Bernard Urban
port 1194
333 11 Bernard Urban
ping 15
334 11 Bernard Urban
ping-restart 45
335 11 Bernard Urban
# car serveur
336 11 Bernard Urban
ping-timer-rem
337 11 Bernard Urban
persist-tun
338 11 Bernard Urban
persist-key
339 11 Bernard Urban
ifconfig 10.0.0.2 255.255.255.252
340 11 Bernard Urban
route ipv4-adresse-client-openvpn-domicile 255.255.255.255 10.0.0.1
341 11 Bernard Urban
script-security 3 system
342 11 Bernard Urban
route-up "/sbin/ip -6 addr add 2a01:6600:80XX:YY01::1/64 dev tap0"
343 11 Bernard Urban
</pre>
344 11 Bernard Urban
345 11 Bernard Urban
+Remarque:+ le paramètre route-up contient le nom 'tap0' codé en dur, ce qui n'est pas portable. Cette commande est nécessaire pour créer sur la VM une route vers la bonne interface pour la plage 2a01:6600:80XX:YY01::/64. Pour que le serveur openvpn soit toujours présent, il faut ajouter
346 11 Bernard Urban
<pre>
347 11 Bernard Urban
AUTOSTART="myris"
348 11 Bernard Urban
</pre>
349 11 Bernard Urban
à /etc/default/openvpn.
350 11 Bernard Urban
351 11 Bernard Urban
Sur la machine à domicile, il faut une installation en mode client, pourquoi pas le même nom de fichier que le serveur, mais pas le même contenu:
352 11 Bernard Urban
<pre>
353 11 Bernard Urban
dev tap
354 11 Bernard Urban
proto udp
355 11 Bernard Urban
local ipv4-adresse-client-openvpn-domicile
356 11 Bernard Urban
remote 91.224.xx.yy
357 11 Bernard Urban
ca myris/ca.crt
358 11 Bernard Urban
cert myris/client.crt
359 11 Bernard Urban
key myris/client.key
360 11 Bernard Urban
tls-client
361 11 Bernard Urban
port 1194
362 11 Bernard Urban
ping 15
363 11 Bernard Urban
ping-restart 45
364 11 Bernard Urban
persist-tun
365 11 Bernard Urban
persist-key
366 1 Laurent GUERBY
ifconfig 10.0.0.1 255.255.255.252
367 11 Bernard Urban
route 0.0.0.0 0.0.0.0 10.0.0.2
368 1 Laurent GUERBY
</pre>
369 1 Laurent GUERBY
370 15 Bernard Urban
L'adresse ipv4-adresse-client-openvpn-domicile est toute adresse qui permet d'accéder Internet depuis la machine accueillant l'openvpn client; en général, ce ne sera donc pas votre adresse IP externe allouée par votre FAI, elle sera plutôt du genre 192.168.*.*. ou 10.*.*.*. Il est supposé bien sûr dans l'exemple ci-dessus que vous n'utilisez pas 10.0.0.0/30 chez vous, elle a été réservée au lien openvpn. 
371 1 Laurent GUERBY
372 14 Bernard Urban
Les répertoires /etc/openvpn/myris sur VM et machine cliente contiendront les divers certificats et clés, qu'il faut générer. Voici comment faire:
373 14 Bernard Urban
<pre>
374 14 Bernard Urban
cd un-répertoire de travail
375 14 Bernard Urban
cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/ .
376 14 Bernard Urban
cd 2.0
377 14 Bernard Urban
# Editez à votre convenance les 5 dernières variables d'environnement de type KEY_* du fichier vars
378 14 Bernard Urban
source ./vars
379 14 Bernard Urban
./clean-all
380 14 Bernard Urban
./build-dh
381 14 Bernard Urban
./pkitool --initca
382 14 Bernard Urban
./pkitool --server myris
383 14 Bernard Urban
./pkitool client
384 14 Bernard Urban
</pre>
385 14 Bernard Urban
386 14 Bernard Urban
et les fichiers recherchés se trouvent dans le sous-répertoire keys. Le seul fichier commun aux 2 extrémités du lien openvpn est ca.crt.
387 14 Bernard Urban
388 12 Bernard Urban
h3. Etape 4: passer la VM en mode routeur et annoncer des routes pour votre réseau à domicile avec radvd.
389 11 Bernard Urban
390 1 Laurent GUERBY
Pour autoriser les paquets à être routés sur la VM entre eth0 et tap0, il faut passer en mode routeur:
391 1 Laurent GUERBY
<pre>
392 58 Bernard Urban
echo 1 >/proc/sys/net/ipv6/conf/all/forwarding
393 1 Laurent GUERBY
</pre>
394 57 Bernard Urban
395 57 Bernard Urban
Il est encore mieux de conserver ce mode au reboot en rajoutant la ligne:
396 57 Bernard Urban
<pre>
397 57 Bernard Urban
net.ipv6.conf.all.forwarding=1
398 1 Laurent GUERBY
</pre>
399 58 Bernard Urban
400 57 Bernard Urban
dans le fichier "/etc/sysctl.conf"
401 57 Bernard Urban
402 57 Bernard Urban
Cette option entraine aussi que votre VM ne s'autoconfigure plus en IPv6 (i.e. les lignes "pre-up" vues plus haut dans "/etc/network/interfaces" ne sont plus nécessaires).
403 1 Laurent GUERBY
404 12 Bernard Urban
Nous allons maintenant mettre en place une configuration automatique d'adresses IPv6 de toutes les machines du segment réseau partant du tap0 de la VM (soit le tap0 du client openvpn, mais après l'étape suivante toutes les interfaces de votre réseau local). Nous utiliserons pour celà l'outil radvd, avec le fichier de configuration /etc/radvd.conf:
405 11 Bernard Urban
<pre>
406 11 Bernard Urban
interface tap0
407 11 Bernard Urban
{
408 12 Bernard Urban
  IgnoreIfMissing on;
409 11 Bernard Urban
  AdvSendAdvert on;
410 11 Bernard Urban
  AdvLinkMTU 1280;
411 11 Bernard Urban
  prefix 2a01:6600:80XX:YY01::/64
412 11 Bernard Urban
  {
413 1 Laurent GUERBY
    AdvOnLink on;
414 11 Bernard Urban
    AdvAutonomous on;
415 11 Bernard Urban
  };
416 1 Laurent GUERBY
};
417 1 Laurent GUERBY
</pre>
418 11 Bernard Urban
419 12 Bernard Urban
+Remarque:+ le fichier contient le nom 'tap0' codé en dur, ce qui n'est pas portable. Par ailleurs, il est possible d'interdire à une machine de s'autoconfigurer, mais ce n'est pas le défaut pour Linux et j'ai supposé que vous ne l'avez pas modifié. 
420 11 Bernard Urban
421 13 Bernard Urban
h3. Etape 5: bridger les interfaces réseau du client openvpn
422 1 Laurent GUERBY
423 1 Laurent GUERBY
A ce stade, la machine openvpn cliente peut accéder l'internet IPv6, car radvd aura placé une route par défaut via son tap0. Si vous bridgez maintenant ce tap0 avec son eth0 (normalement relié au reste de votre réseau local), toutes les machines de ce réseau local vont s'assigner au bout de quelques minutes une adresse tirée de la plage 2a01:6600:80XX:YY01::/64, et une route par défaut via le tap0 du client openvpn: c'est ce qu'on voulait obtenir.
424 13 Bernard Urban
425 13 Bernard Urban
Voici les incantations magiques nécessaires:
426 13 Bernard Urban
<pre>
427 13 Bernard Urban
# on suppose qu'eth0 a l'adresse 192.168.0.1/24
428 13 Bernard Urban
brctl addbr br0
429 13 Bernard Urban
brctl addif br0 eth0
430 1 Laurent GUERBY
brctl addif br0 tap0
431 1 Laurent GUERBY
# à ce stade, le machine hébergeant le client openvpn n'est plus adressable
432 1 Laurent GUERBY
# mais il est dans la plupart des cas utile de lui en redonner une, en général celle d'eth0  
433 1 Laurent GUERBY
ip addr add 192.168.0.1/24 dev br0
434 1 Laurent GUERBY
</pre>
435 14 Bernard Urban
436 16 Bernard Urban
Il peut être intéressant de bridger par défaut eth0 et un tap0 prédéfini sur br0 dès le boot par une section de ce type dans /etc/network/interfaces: 
437 14 Bernard Urban
<pre>
438 14 Bernard Urban
auto br0
439 14 Bernard Urban
iface br0 inet static
440 14 Bernard Urban
    address 192.168.1.10
441 14 Bernard Urban
    netmask 255.255.255.0
442 1 Laurent GUERBY
    broadcast 192.168.0.255
443 1 Laurent GUERBY
    gateway 192.168.1.1
444 16 Bernard Urban
    bridge_ports eth0 tap0
445 16 Bernard Urban
    pre-up tunctl -t tap0
446 15 Bernard Urban
</pre> 
447 16 Bernard Urban
où la section 'iface br0' remplace 'iface eth0'.
448 1 Laurent GUERBY
449 16 Bernard Urban
Il faut ensuite modifier le configuration cliente /etc/openvpn/myris.conf comme suit:
450 1 Laurent GUERBY
<pre>
451 16 Bernard Urban
# on définit explicitement le tap0
452 16 Bernard Urban
dev tap0
453 16 Bernard Urban
proto udp
454 16 Bernard Urban
local ipv4-adresse-client-openvpn-domicile
455 16 Bernard Urban
remote 91.224.xx.yy
456 16 Bernard Urban
ca myris/ca.crt
457 16 Bernard Urban
cert myris/client.crt
458 16 Bernard Urban
key myris/client.key
459 16 Bernard Urban
tls-client
460 16 Bernard Urban
port 1194
461 16 Bernard Urban
ping 15
462 16 Bernard Urban
ping-restart 45
463 16 Bernard Urban
persist-tun
464 16 Bernard Urban
persist-key
465 16 Bernard Urban
# ifconfig et route ont disparus et sont remplacés par ce qui suit, 
466 16 Bernard Urban
# qui fait la même chose appliqué à br0 et non pas tap0
467 1 Laurent GUERBY
script-security 3 system
468 16 Bernard Urban
up /etc/openvpn/myris-up.sh
469 16 Bernard Urban
down /etc/openvpn/myris-down.sh
470 1 Laurent GUERBY
</pre> 
471 16 Bernard Urban
472 16 Bernard Urban
où /etc/openvpn/myris-up.sh vaut:
473 16 Bernard Urban
<pre>
474 16 Bernard Urban
#! /bin/sh
475 16 Bernard Urban
/sbin/ip addr add 10.0.0.1/30 dev br0
476 16 Bernard Urban
</pre>
477 16 Bernard Urban
et /etc/openvpn/myris-down.sh vaut:
478 16 Bernard Urban
<pre>
479 16 Bernard Urban
#! /bin/sh
480 16 Bernard Urban
/sbin/ip addr del 10.0.0.1/30 dev br0
481 16 Bernard Urban
</pre>
482 16 Bernard Urban
483 16 Bernard Urban
+Remarque:+ ne pas oublier de lancer:
484 16 Bernard Urban
<pre>
485 75 Kévin Beaubestre
chmod 755 /etc/openvpn/myris-up.sh /etc/openvpn/myris-down.sh
486 16 Bernard Urban
</pre>
487 16 Bernard Urban
488 16 Bernard Urban
Il est à noter que l'apparition des adresses et routes IPv6 peut prendre un dizaine de minutes après l'établissemnt du tunnel openvpn, et de même leur disparation n'est complète qu'au bout de 24h. Tout celà est réglable via /etc/radvd.conf sur la VM.
489 8 Laurent GUERBY
490 71 Julien Aubé
h2. IPv6 sous OpenWRT
491 71 Julien Aubé
492 71 Julien Aubé
Exemple pour un routeur OpenWRT connecté au réseau L2 de Tetaneutral (radio ou autre)
493 71 Julien Aubé
494 71 Julien Aubé
h3. Demander le routage du /56.
495 71 Julien Aubé
496 71 Julien Aubé
Il vous sera donné une IP link-locale sous la forme fe80::xx:yy .
497 71 Julien Aubé
498 71 Julien Aubé
h3. /etc/config/network
499 71 Julien Aubé
500 71 Julien Aubé
La définition du fichier network d'OpenWRT
501 71 Julien Aubé
502 71 Julien Aubé
<pre>
503 71 Julien Aubé
config 'interface' 'loopback'
504 71 Julien Aubé
        option 'ifname' 'lo'
505 71 Julien Aubé
        option 'proto' 'static'
506 71 Julien Aubé
        option 'ipaddr' '127.0.0.1'
507 71 Julien Aubé
        option 'netmask' '255.0.0.0'
508 71 Julien Aubé
509 71 Julien Aubé
config 'interface' 'wan_ttn'
510 71 Julien Aubé
        option 'ifname'    'eth0.10'
511 71 Julien Aubé
        option 'proto'     'static'
512 72 Laurent GUERBY
        option 'ipaddr'    '91.224.149.ZZ'    # IPv4 publique
513 71 Julien Aubé
        option 'netmask'   '255.255.255.0'
514 71 Julien Aubé
        option 'gateway'   '91.224.149.254'
515 71 Julien Aubé
        option 'dns'       '91.224.149.254'   # Le DNS ipv4 de TTN
516 71 Julien Aubé
517 71 Julien Aubé
        option 'send_rs'   '0'                # Evite d'envoyer des annonces sur le réseau TTN
518 72 Laurent GUERBY
        option 'accept_ra  ' '0'              # Refuse les routes diffusées par le réseau TTN
519 72 Laurent GUERBY
        option 'ip6addr'   'fe80::XX:YY/64'   # L'IP link-locale pour le routage
520 71 Julien Aubé
        option 'ip6gw'     'fe80::31'         # La gw IPv6 de TTN
521 71 Julien Aubé
522 71 Julien Aubé
config 'alias'                                # Alias pour l'IPv6 publique du routeur
523 71 Julien Aubé
        option 'interface' 'wan_ttn'
524 71 Julien Aubé
        option 'proto'     'static'
525 72 Laurent GUERBY
        option 'ip6addr'   '2a01:6600:8081:YY00::1/64'
526 71 Julien Aubé
527 71 Julien Aubé
config 'interface' 'lan'                      # Interface coté LAN
528 71 Julien Aubé
        option 'proto'     'static'
529 71 Julien Aubé
        option 'ifname'    'eth0.2'
530 71 Julien Aubé
        option 'ipaddr'    '192.168.1.254'
531 71 Julien Aubé
        option 'netmask'   '255.255.255.0'
532 71 Julien Aubé
        option 'broadcast' '192.168.1.255'
533 71 Julien Aubé
        option 'send_rs'   '0'
534 72 Laurent GUERBY
        option 'ip6addr'   '2a01:6600:8081:YY02::1/64' # IP publique coté LAN
535 71 Julien Aubé
</pre>
536 71 Julien Aubé
537 71 Julien Aubé
h3. /etc/config/radvd
538 71 Julien Aubé
539 71 Julien Aubé
Ce fichier est très simple car OpenWRT calcule automatiquement les bonnes valeurs
540 71 Julien Aubé
à partir de la section "network" ci-dessus.
541 71 Julien Aubé
542 71 Julien Aubé
<pre>
543 71 Julien Aubé
config 'interface'
544 71 Julien Aubé
        option 'AdvSendAdvert' '1'
545 71 Julien Aubé
        option 'ignore' '0'
546 71 Julien Aubé
        option 'interface' 'lan'
547 71 Julien Aubé
548 71 Julien Aubé
config 'prefix'
549 71 Julien Aubé
        option 'ignore' '0'
550 71 Julien Aubé
        option 'interface' 'lan'
551 71 Julien Aubé
552 71 Julien Aubé
config 'rdnss'
553 71 Julien Aubé
        option 'interface' 'lan'
554 71 Julien Aubé
</pre>
555 71 Julien Aubé
556 71 Julien Aubé
557 75 Kévin Beaubestre
À partir de là, le routeur diffuse des "Router Advertisement" sur son interface LAN et effectuera le routage.
558 71 Julien Aubé
Toute machine sur le réseau interne récupère ainsi une IP publique, addressable en direct.
559 71 Julien Aubé
560 52 Laurent GUERBY
h2. ip6tables
561 52 Laurent GUERBY
562 52 Laurent GUERBY
Via Philippe Latu du projet http://www.inetdoc.net/
563 52 Laurent GUERBY
564 52 Laurent GUERBY
<pre>
565 52 Laurent GUERBY
*filter
566 52 Laurent GUERBY
:INPUT DROP [0:0]
567 52 Laurent GUERBY
:FORWARD DROP [0:0]
568 52 Laurent GUERBY
:OUTPUT ACCEPT [0:0]
569 52 Laurent GUERBY
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
570 52 Laurent GUERBY
# C H A I N E   I N P U T
571 52 Laurent GUERBY
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
572 52 Laurent GUERBY
# suivi de communication
573 52 Laurent GUERBY
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
574 52 Laurent GUERBY
# ICMPv6
575 52 Laurent GUERBY
-A INPUT -p icmpv6 -m state --state NEW -m limit --limit 5/sec -j ACCEPT
576 52 Laurent GUERBY
-A INPUT ! -i sixxs -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
577 52 Laurent GUERBY
-A INPUT ! -i sixxs -p icmpv6 --icmpv6-type neighbour-advertisement -j 
578 52 Laurent GUERBY
ACCEPT
579 52 Laurent GUERBY
# Filtrage paquets avec en-tête de routage de type 0
580 52 Laurent GUERBY
-A INPUT -m rt --rt-type 0 -j DROP
581 52 Laurent GUERBY
# Autorisation trafic multicast
582 52 Laurent GUERBY
-A INPUT -d ff00::/8 -j ACCEPT
583 52 Laurent GUERBY
# communication loopback
584 52 Laurent GUERBY
-A INPUT -i lo -m state --state NEW -j ACCEPT
585 52 Laurent GUERBY
# communication instances virtuelles
586 52 Laurent GUERBY
-A INPUT -i tap+ -m state --state NEW -j ACCEPT
587 52 Laurent GUERBY
# communication interne
588 52 Laurent GUERBY
-A INPUT -i bond0.+ -m state --state NEW -j ACCEPT
589 52 Laurent GUERBY
# SSH port 2222
590 52 Laurent GUERBY
-A INPUT -p tcp --syn --dport 2222 -m state --state NEW -j ACCEPT
591 52 Laurent GUERBY
# poubelle
592 52 Laurent GUERBY
-A INPUT -j LOG --log-prefix "INPUT/rejected.ip6tables: "
593 52 Laurent GUERBY
-A INPUT -m state --state INVALID -m limit --limit 5/min -j LOG --log-prefix "INPUT/invalid.ip6tables: "
594 52 Laurent GUERBY
-A INPUT -m state --state INVALID -j DROP
595 52 Laurent GUERBY
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
596 52 Laurent GUERBY
# C H A I N E   F O R W A R D
597 52 Laurent GUERBY
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
598 52 Laurent GUERBY
# suivi de communication
599 52 Laurent GUERBY
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
600 52 Laurent GUERBY
# ICMPv6
601 52 Laurent GUERBY
-A FORWARD -p ipv6-icmp -m state --state NEW -m limit --limit 5/sec -j  ACCEPT
602 52 Laurent GUERBY
# Filtrage paquets avec en-tête de routage de type 0
603 52 Laurent GUERBY
-A FORWARD -m rt --rt-type 0 -j DROP
604 52 Laurent GUERBY
# Autorisation trafic multicast
605 52 Laurent GUERBY
-A FORWARD -d ff00::/8 -j ACCEPT
606 52 Laurent GUERBY
# communication loopback
607 52 Laurent GUERBY
-A FORWARD -i lo -m state --state NEW -j ACCEPT
608 52 Laurent GUERBY
# communication instances virtuelles
609 52 Laurent GUERBY
-A FORWARD -i tap+ -m state --state NEW -j ACCEPT
610 52 Laurent GUERBY
# communication réseaux de TP
611 52 Laurent GUERBY
-A FORWARD -i bond0.+ -m state --state NEW -j ACCEPT
612 52 Laurent GUERBY
# poubelle
613 52 Laurent GUERBY
-A FORWARD -m state --state INVALID -m limit --limit 5/min -j LOG  --log-prefix "INPUT/invalid.ip6tables: "
614 52 Laurent GUERBY
-A FORWARD -m state --state INVALID -j DROP
615 52 Laurent GUERBY
COMMIT
616 52 Laurent GUERBY
</pre>
617 52 Laurent GUERBY
618 52 Laurent GUERBY
619 52 Laurent GUERBY
620 6 Laurent GUERBY
h2. FAQ
621 6 Laurent GUERBY
622 18 Laurent GUERBY
h3. Reverse DNS
623 18 Laurent GUERBY
624 19 Laurent GUERBY
En IPv6 tetaneutral.net peut deleguer le reverse du /56. Il faut configurer bind sur une ou plusieurs de vos machines, nous donner son CNAME, par exemple ns1.chezmoi.net et ns2.chezmoi.net, et mettre les fichiers suivant dans /etc/bind/ :
625 19 Laurent GUERBY
626 18 Laurent GUERBY
named.conf.local
627 18 Laurent GUERBY
<pre>
628 18 Laurent GUERBY
zone "1.8.0.8.0.0.6.6.1.0.a.2.ip6.arpa" {
629 18 Laurent GUERBY
	type master;
630 18 Laurent GUERBY
	file "/etc/bind/db.ip6-81";
631 18 Laurent GUERBY
};
632 18 Laurent GUERBY
</pre>
633 18 Laurent GUERBY
634 18 Laurent GUERBY
db.ip6-81
635 18 Laurent GUERBY
<pre>
636 18 Laurent GUERBY
; -*- mode: zone; -*-
637 18 Laurent GUERBY
;
638 18 Laurent GUERBY
; BIND reverse data file for broadcast zone
639 18 Laurent GUERBY
;
640 18 Laurent GUERBY
$TTL    3600
641 18 Laurent GUERBY
@       IN      SOA     ns1.tetaneutral.net. hostmaster.tetaneutral.net. (
642 18 Laurent GUERBY
                        2011070301      ; serial
643 18 Laurent GUERBY
                         7200         ; Refresh
644 18 Laurent GUERBY
                          3600         ; Retry
645 18 Laurent GUERBY
                        1800000         ; Expire
646 18 Laurent GUERBY
                         3600 )       ; Negative Cache TTL
647 18 Laurent GUERBY
@       IN      NS      ns1.tetaneutral.net.
648 18 Laurent GUERBY
@       IN      NS      ns2.tetaneutral.net.
649 18 Laurent GUERBY
650 1 Laurent GUERBY
; reverse
651 18 Laurent GUERBY
$ORIGIN 0.0.e.c.1.8.0.8.0.0.6.6.1.0.a.2.ip6.arpa.
652 1 Laurent GUERBY
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     www6.tetaneutral.net.
653 18 Laurent GUERBY
654 18 Laurent GUERBY
; delegations /56
655 47 Laurent GUERBY
$ORIGIN 1.8.0.8.0.0.6.6.1.0.a.2.ip6.arpa.
656 47 Laurent GUERBY
1.9 86400 IN NS   hoersch.kneissel.org.
657 47 Laurent GUERBY
1.9 86400 IN NS   serveur.kneissel.org.
658 47 Laurent GUERBY
e.8 86400 IN NS   dns.kafe-in.net.
659 18 Laurent GUERBY
</pre>
660 47 Laurent GUERBY
661 47 Laurent GUERBY
Merci a Matthieu Herrb pour la délégation de reverse /56.
662 1 Laurent GUERBY
663 70 Laurent GUERBY
Coté utilisateur dans son bind :
664 70 Laurent GUERBY
665 70 Laurent GUERBY
Dans /etc/bind/named.conf.local
666 70 Laurent GUERBY
667 70 Laurent GUERBY
<pre>
668 70 Laurent GUERBY
zone "X.Y.1.8.0.8.0.0.6.6.1.0.a.2.ip6.arpa" {
669 70 Laurent GUERBY
	type master;
670 70 Laurent GUERBY
	file "/etc/bind/db.ip6-XY";
671 70 Laurent GUERBY
};
672 70 Laurent GUERBY
673 70 Laurent GUERBY
</pre>
674 70 Laurent GUERBY
675 70 Laurent GUERBY
/etc/bind/db.ip6-XY
676 70 Laurent GUERBY
<pre>
677 70 Laurent GUERBY
; -*- mode: zone; -*-
678 70 Laurent GUERBY
;
679 70 Laurent GUERBY
; BIND reverse data file for broadcast zone
680 70 Laurent GUERBY
;
681 70 Laurent GUERBY
$TTL    3600
682 70 Laurent GUERBY
@       IN      SOA     ns1.tetaneutral.net. hostmaster.tetaneutral.net. (
683 70 Laurent GUERBY
                        2011120700      ; serial
684 70 Laurent GUERBY
                         7200         ; Refresh
685 70 Laurent GUERBY
                          3600         ; Retry
686 70 Laurent GUERBY
                        1800000         ; Expire
687 70 Laurent GUERBY
                         3600 )       ; Negative Cache TTL
688 70 Laurent GUERBY
@       IN      NS      ns1.tetaneutral.net.
689 70 Laurent GUERBY
@       IN      NS      ns2.tetaneutral.net.
690 70 Laurent GUERBY
691 70 Laurent GUERBY
$ORIGIN 0.0.X.Y.1.8.0.8.0.0.6.6.1.0.a.2.ip6.arpa.
692 70 Laurent GUERBY
693 70 Laurent GUERBY
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     a1.tetaneutral.net.
694 70 Laurent GUERBY
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     a2.tetaneutral.net.
695 70 Laurent GUERBY
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     a3.tetaneutral.net.
696 70 Laurent GUERBY
</pre>
697 70 Laurent GUERBY
698 34 Laurent GUERBY
h3. CCNA et link-local
699 18 Laurent GUERBY
700 34 Laurent GUERBY
Merci à Jérôme Nicolle:
701 17 Laurent GUERBY
702 17 Laurent GUERBY
http://www.freeccnaworkbook.com/labs/section-12-configuring-ipv6/lab-12-3-configuring-ipv6-static-routing/
703 17 Laurent GUERBY
704 17 Laurent GUERBY
> Unlike IPv4 static routing, with IPv6 you have the ability to use either the global unicast address or link-local address as the next hop in the static route statement. When working with IPv6 dynamic routing protocols which will be discussed in the next 2 labs, the next hop will be the neighbors link-local IPv6 address and not their global unique assigned ipv6 address. However when configuring a static route with a link-local IPv6 address as the next hop you must specify the egress interface. For all intensive purposes, using either/or will achieve the same desired effect.
705 17 Laurent GUERBY
706 50 Laurent GUERBY
h3. Comment éviter d'utiliser une IPv6 non routée ?
707 17 Laurent GUERBY
708 50 Laurent GUERBY
Sur un IX en général les adresses sont non routées donc il faut éviter de les utiliser, pour cela on utilise "preferred_lft 0" :
709 50 Laurent GUERBY
710 50 Laurent GUERBY
http://www.davidc.net/networking/ipv6-source-address-selection-linux
711 50 Laurent GUERBY
712 50 Laurent GUERBY
<pre>
713 50 Laurent GUERBY
ip -6 a add 2001:7f8:59:0:75::15/96 dev eth0.502 preferred_lft 0
714 50 Laurent GUERBY
</pre>
715 74 Laurent GUERBY
716 74 Laurent GUERBY
Comment linux choisi une adresse IPv6 source https://www.kafe-in.net/articles/IPv6Source/
717 74 Laurent GUERBY
718 34 Laurent GUERBY
h3. Comment pinguer une addresse link local ?
719 6 Laurent GUERBY
720 34 Laurent GUERBY
 
721 6 Laurent GUERBY
<pre>
722 6 Laurent GUERBY
ping6 fe80::31%eth0
723 1 Laurent GUERBY
</pre>
724 40 Mehdi Abaakouk
725 40 Mehdi Abaakouk
h3. zones reverses ipv6 manquante dans bind (ie: ::1)
726 40 Mehdi Abaakouk
727 40 Mehdi Abaakouk
Dans bind par défaut les zones pour ::1 sont vide pour les ajouter:
728 40 Mehdi Abaakouk
729 40 Mehdi Abaakouk
<pre>
730 40 Mehdi Abaakouk
# cat /etc/bind/db.local-::.arpa
731 40 Mehdi Abaakouk
;
732 40 Mehdi Abaakouk
; BIND reverse data file for local loopback interface
733 40 Mehdi Abaakouk
;
734 40 Mehdi Abaakouk
$TTL    604800
735 40 Mehdi Abaakouk
@       IN      SOA     localhost. root.localhost. (
736 40 Mehdi Abaakouk
                              8         ; Serial
737 40 Mehdi Abaakouk
                         604800         ; Refresh
738 40 Mehdi Abaakouk
                          86400         ; Retry
739 40 Mehdi Abaakouk
                        2419200         ; Expire
740 40 Mehdi Abaakouk
                         604800 )       ; Negative Cache TTL
741 40 Mehdi Abaakouk
;
742 40 Mehdi Abaakouk
@       IN      NS      localhost.
743 40 Mehdi Abaakouk
1       IN      PTR     localhost.
744 40 Mehdi Abaakouk
</pre>
745 40 Mehdi Abaakouk
746 40 Mehdi Abaakouk
<pre>
747 40 Mehdi Abaakouk
# cat /etc/bind/db.local-::1.arpa
748 40 Mehdi Abaakouk
;
749 40 Mehdi Abaakouk
; BIND reverse data file for local loopback interface
750 40 Mehdi Abaakouk
;
751 40 Mehdi Abaakouk
$TTL    604800
752 40 Mehdi Abaakouk
@       IN      SOA     localhost. root.localhost. (
753 40 Mehdi Abaakouk
                              8         ; Serial
754 40 Mehdi Abaakouk
                         604800         ; Refresh
755 40 Mehdi Abaakouk
                          86400         ; Retry
756 40 Mehdi Abaakouk
                        2419200         ; Expire
757 40 Mehdi Abaakouk
                         604800 )       ; Negative Cache TTL
758 40 Mehdi Abaakouk
;
759 40 Mehdi Abaakouk
@       IN      NS      localhost.
760 40 Mehdi Abaakouk
@       IN      PTR     localhost.
761 40 Mehdi Abaakouk
</pre>
762 40 Mehdi Abaakouk
763 40 Mehdi Abaakouk
<pre>
764 40 Mehdi Abaakouk
# cat /etc/bind/named.conf.default-zones.v6
765 40 Mehdi Abaakouk
766 40 Mehdi Abaakouk
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
767 40 Mehdi Abaakouk
        type master;
768 40 Mehdi Abaakouk
        file "/etc/bind/db.local-::.arpa";
769 40 Mehdi Abaakouk
};
770 40 Mehdi Abaakouk
771 40 Mehdi Abaakouk
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
772 40 Mehdi Abaakouk
        type master;
773 40 Mehdi Abaakouk
        file "/etc/bind/db.local-::1.arpa";
774 40 Mehdi Abaakouk
};
775 40 Mehdi Abaakouk
</pre>
776 40 Mehdi Abaakouk
777 40 Mehdi Abaakouk
Et on ajoute ca dans /etc/bind/named.conf: 
778 40 Mehdi Abaakouk
<pre>
779 40 Mehdi Abaakouk
include "/etc/bind/named.conf.default-zones.v6";
780 40 Mehdi Abaakouk
</pre>
781 42 Mehdi Abaakouk
782 42 Mehdi Abaakouk
h3. Envoie d'un Router Advertissement avec scapy pour virer une route auto apprise (Attention à n'utiliser que si on sait ce qu'on fait ! )
783 42 Mehdi Abaakouk
784 42 Mehdi Abaakouk
Création de trame ipv6, ipv6 src est celle du router à spoffer
785 42 Mehdi Abaakouk
786 42 Mehdi Abaakouk
<pre>
787 42 Mehdi Abaakouk
a = IPv6()
788 42 Mehdi Abaakouk
a.src = "fe80::dcad:4dff:fe0b:8a5"
789 42 Mehdi Abaakouk
a.dst = "ff02::1"
790 42 Mehdi Abaakouk
</pre>
791 42 Mehdi Abaakouk
792 42 Mehdi Abaakouk
La trame sera un RA avec un lifetime de 0, comme indiquer dans la rfc2461:
793 42 Mehdi Abaakouk
"Lifetime of 0 indicates that the router is not a default router and SHOULD NOT appear on the default router list."
794 42 Mehdi Abaakouk
795 42 Mehdi Abaakouk
<pre>
796 42 Mehdi Abaakouk
b = ICMPv6ND_RA() 
797 42 Mehdi Abaakouk
b.routerlifetime = 0
798 42 Mehdi Abaakouk
</pre>
799 42 Mehdi Abaakouk
800 42 Mehdi Abaakouk
Ensuite on fixe la adresse MAC à spoofer, celle du router original qui a envoyer le RA.
801 42 Mehdi Abaakouk
802 42 Mehdi Abaakouk
<pre>
803 42 Mehdi Abaakouk
c = ICMPv6NDOptSrcLLAddr() 
804 42 Mehdi Abaakouk
c.lladdr = "00:50:56:24:3b:c0"
805 42 Mehdi Abaakouk
</pre>
806 42 Mehdi Abaakouk
807 42 Mehdi Abaakouk
Ensuite on construire le contenu du RA, avec le prefix à annoncer (toujours celui à spoofer)
808 42 Mehdi Abaakouk
Avec le validlifetime et preferredlifetime à l'infinie, comme indiquer dans la rfc2461:
809 42 Mehdi Abaakouk
"A value of all one bits (0xffffffff) represents infinity"
810 42 Mehdi Abaakouk
811 42 Mehdi Abaakouk
<pre>
812 42 Mehdi Abaakouk
d = ICMPv6NDOptMTU() 
813 42 Mehdi Abaakouk
e = ICMPv6NDOptPrefixInfo() 
814 42 Mehdi Abaakouk
e.prefixlen = 64
815 42 Mehdi Abaakouk
e.prefix = "2a01:6600:8081:4300::"
816 42 Mehdi Abaakouk
e.validlifetime = 0xffffffff
817 42 Mehdi Abaakouk
e.preferredlifetime = 0xffffffff
818 42 Mehdi Abaakouk
</pre>
819 42 Mehdi Abaakouk
820 42 Mehdi Abaakouk
On envoie le tout:
821 42 Mehdi Abaakouk
822 42 Mehdi Abaakouk
<pre>
823 42 Mehdi Abaakouk
send(a/b/c/d/e)
824 42 Mehdi Abaakouk
</pre>
825 61 Laurent GUERBY
826 61 Laurent GUERBY
h3. PMTU
827 61 Laurent GUERBY
828 61 Laurent GUERBY
Try 'tracepath6' it will show you which hop is not returning a packet
829 61 Laurent GUERBY
too big for that path if needed. Also one can use a series of "ping6 -s
830 61 Laurent GUERBY
<size> -M do" to check if packets pass or not (if the destination allows
831 61 Laurent GUERBY
pings of course).
832 63 Laurent GUERBY
833 63 Laurent GUERBY
h2. IETF IPv6 security
834 63 Laurent GUERBY
835 63 Laurent GUERBY
From: Fernando Gont <fernando@gont.com.ar>
836 63 Laurent GUERBY
To: NANOG <nanog@nanog.org>
837 63 Laurent GUERBY
Subject: IPv6 security: New IETF I-Ds, slideware and videos of recent presentations, trainings, etc...
838 63 Laurent GUERBY
Date: Mon, 28 May 2012 22:17:33 -0300
839 63 Laurent GUERBY
840 63 Laurent GUERBY
Folks,
841 63 Laurent GUERBY
842 63 Laurent GUERBY
* We've published a new IETF I-D entitled "DHCPv6-Shield: Protecting
843 63 Laurent GUERBY
Against Rogue DHCPv6 Servers", which is meant to provide RA-Guard-like
844 63 Laurent GUERBY
protection against rogue DHCPv6 servers. The I-D is available at:
845 63 Laurent GUERBY
<http://tools.ietf.org/id/draft-gont-opsec-dhcpv6-shield-00.txt>
846 63 Laurent GUERBY
Other IPv6 security I-Ds (such as,
847 63 Laurent GUERBY
draft-ietf-v6ops-ra-guard-implementation) have been revised. Please
848 63 Laurent GUERBY
check them out at:
849 63 Laurent GUERBY
<http://www.si6networks.com/publications/ietf.html>
850 63 Laurent GUERBY
851 63 Laurent GUERBY
* The slideware (and some videos!) of some of our recent presentations
852 63 Laurent GUERBY
about IPv6 security are now available online. You can find them at:
853 63 Laurent GUERBY
<http://www.si6networks.com/presentations/index.html>
854 63 Laurent GUERBY
855 63 Laurent GUERBY
* We have also scheduled IPv6 hacking trainings in Paris (France) and
856 63 Laurent GUERBY
Ghent (Belgium). You can find more details at:
857 63 Laurent GUERBY
<http://www.si6networks.com/index.html#conferences>
858 63 Laurent GUERBY
859 63 Laurent GUERBY
Our Twitter: @SI6Networks
860 63 Laurent GUERBY
ipv6hackers mailing-list:
861 63 Laurent GUERBY
<http://lists.si6networks.com/listinfo/ipv6hackers/>
862 63 Laurent GUERBY
863 63 Laurent GUERBY
Thanks!
864 63 Laurent GUERBY
865 63 Laurent GUERBY
Best regards,
866 63 Laurent GUERBY
-- 
867 63 Laurent GUERBY
Fernando Gont
868 63 Laurent GUERBY
SI6 Networks
869 63 Laurent GUERBY
e-mail: fgont@si6networks.com
870 63 Laurent GUERBY
PGP Fingerprint: 6666 31C6 D484 63B2 8FB1 E3C4 AE25 0D55 1D4E 7492