Id2ndR » Historique » Version 11
Fabien ADAM, 28/01/2016 00:51
IPv6 et VPN
1 | 1 | Fabien ADAM | h1. Mes travaux perso relatifs à Tetaneutral |
---|---|---|---|
2 | 1 | Fabien ADAM | |
3 | 1 | Fabien ADAM | Auteur : Id2ndR |
4 | 1 | Fabien ADAM | |
5 | 1 | Fabien ADAM | h2. Virtualisation |
6 | 1 | Fabien ADAM | |
7 | 4 | Fabien ADAM | Au dessus, de libvirt, je fais tourner quelques VM sur ma machine Zbox ID18 http://www.ldlc.com/fiche/PB00158714.html : Celeron double cœurs supportant le VT, avec 8Go de RAM |
8 | 1 | Fabien ADAM | |
9 | 1 | Fabien ADAM | h2. OpenWRT |
10 | 1 | Fabien ADAM | |
11 | 1 | Fabien ADAM | Je possède un TP-Link WDR3600 gigabit et double bande N. Il tourne sous Barrier Breaker 14.04. |
12 | 1 | Fabien ADAM | |
13 | 1 | Fabien ADAM | Objectifs : |
14 | 1 | Fabien ADAM | - connecter le routeur à Internet via une connexion 4G |
15 | 1 | Fabien ADAM | - sortir sur une VM tournant sur ma machine à Tetaneutral, pour avoir un accès réseau complet (IP fixe, IPv6, téléphonie SIP, pas de bridage ni de modification du flux via les proxys transparents) |
16 | 4 | Fabien ADAM | - brancher un téléphone IP ethernet (offre Plug&Phone d'OVH) qui passe dans le VPN, et qui fonctionne normalement sans aucune configuration |
17 | 1 | Fabien ADAM | |
18 | 1 | Fabien ADAM | h3. 4G |
19 | 1 | Fabien ADAM | |
20 | 4 | Fabien ADAM | Inspiré de http://wiki.openwrt.org/doc/howto/usb.tethering |
21 | 3 | Fabien ADAM | <pre> |
22 | 3 | Fabien ADAM | root@OpenWrt:~# opkg update |
23 | 3 | Fabien ADAM | root@OpenWrt:~# opkg install kmod-usb-net-rndis |
24 | 3 | Fabien ADAM | root@OpenWrt:~# insmod usbnet |
25 | 3 | Fabien ADAM | root@OpenWrt:~# insmod cdc_ether |
26 | 3 | Fabien ADAM | root@OpenWrt:~# insmod rndis_host |
27 | 3 | Fabien ADAM | root@OpenWrt:~# ifconfig usb0 |
28 | 3 | Fabien ADAM | usb0 Link encap:Ethernet HWaddr 02:34:68:55:02:03 |
29 | 3 | Fabien ADAM | BROADCAST MULTICAST MTU:1500 Metric:1 |
30 | 3 | Fabien ADAM | RX packets:0 errors:0 dropped:0 overruns:0 frame:0 |
31 | 3 | Fabien ADAM | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 |
32 | 3 | Fabien ADAM | collisions:0 txqueuelen:1000 |
33 | 3 | Fabien ADAM | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
34 | 3 | Fabien ADAM | </pre> |
35 | 3 | Fabien ADAM | Dans Luci, Network > Interfaces : créer une interface nommée 4G exploitant l'interface usb0, en client dhcp |
36 | 1 | Fabien ADAM | |
37 | 4 | Fabien ADAM | Pinguer depuis le routeur. |
38 | 4 | Fabien ADAM | |
39 | 1 | Fabien ADAM | h3. OpenVPN |
40 | 1 | Fabien ADAM | |
41 | 1 | Fabien ADAM | Mise en place : |
42 | 1 | Fabien ADAM | * Certificat SSL du serveur (VM) : généré par CA-Cert (je n'ai jamais pu faire marcher le VPN sur OpenWRT avec un certificat auto-signé) |
43 | 1 | Fabien ADAM | * Certificat d'un certificat client : généré avec easy-rsa (build-ca, build-key-server, build-key). Remarque : il n'est pas nécessaire que ces certificats soient issues du certificat du serveur vérifié à la connexion, car le serveur connaît son référentiel de clef, indépendament du certificat serveur présenté sur le port d'écoute. |
44 | 1 | Fabien ADAM | * Configuration du serveur : |
45 | 1 | Fabien ADAM | <pre> |
46 | 1 | Fabien ADAM | id2ndr@id2ndr-vm: ~$ cat /etc/openvpn/id2ndr.conf |
47 | 1 | Fabien ADAM | ################################## |
48 | 1 | Fabien ADAM | dev tun |
49 | 1 | Fabien ADAM | proto udp |
50 | 1 | Fabien ADAM | port 1194 |
51 | 1 | Fabien ADAM | |
52 | 1 | Fabien ADAM | ca /etc/openvpn/easy-rsa/keys/class3.crt |
53 | 1 | Fabien ADAM | cert /etc/openvpn/easy-rsa/keys/id2ndr.toulan.fr.crt |
54 | 1 | Fabien ADAM | key /etc/openvpn/easy-rsa/keys/id2ndr.toulan.fr.key |
55 | 1 | Fabien ADAM | dh /etc/openvpn/easy-rsa/keys/dh1024.pem |
56 | 1 | Fabien ADAM | |
57 | 1 | Fabien ADAM | user nobody |
58 | 1 | Fabien ADAM | group nogroup |
59 | 1 | Fabien ADAM | server 10.9.0.0 255.255.255.0 |
60 | 1 | Fabien ADAM | |
61 | 1 | Fabien ADAM | persist-key |
62 | 1 | Fabien ADAM | #persist-tun |
63 | 1 | Fabien ADAM | |
64 | 4 | Fabien ADAM | keepalive 10 100 |
65 | 1 | Fabien ADAM | |
66 | 1 | Fabien ADAM | |
67 | 1 | Fabien ADAM | status /var/log/openvpn-status.log |
68 | 1 | Fabien ADAM | verb 3 |
69 | 1 | Fabien ADAM | client-to-client |
70 | 1 | Fabien ADAM | |
71 | 1 | Fabien ADAM | |
72 | 1 | Fabien ADAM | #push "redirect-gateway def1" |
73 | 1 | Fabien ADAM | #set the dns servers |
74 | 1 | Fabien ADAM | #push "dhcp-option DNS 8.8.8.8" |
75 | 1 | Fabien ADAM | #push "dhcp-option DNS 8.8.4.4" |
76 | 1 | Fabien ADAM | push "redirect-gateway def1" |
77 | 1 | Fabien ADAM | push dhcp-option DNS 91.224.149.254 |
78 | 1 | Fabien ADAM | |
79 | 1 | Fabien ADAM | |
80 | 1 | Fabien ADAM | log-append /var/log/openvpn |
81 | 1 | Fabien ADAM | comp-lzo adaptive |
82 | 1 | Fabien ADAM | </pre> |
83 | 1 | Fabien ADAM | |
84 | 1 | Fabien ADAM | * Installation du client : |
85 | 1 | Fabien ADAM | <pre> |
86 | 1 | Fabien ADAM | root@OpenWrt:~# opkg update; opkg install openvpn-openssl |
87 | 2 | Fabien ADAM | root@OpenWrt:~# uci set openvpn.custom_config.enabled=1 |
88 | 2 | Fabien ADAM | root@OpenWrt:~# uci commit |
89 | 1 | Fabien ADAM | root@OpenWrt:~# cat /etc/openvpn/my-vpn.conf |
90 | 1 | Fabien ADAM | dev tun |
91 | 1 | Fabien ADAM | client |
92 | 1 | Fabien ADAM | #proto tcp |
93 | 1 | Fabien ADAM | proto udp |
94 | 1 | Fabien ADAM | remote id2ndr.toulan.fr 1195 |
95 | 1 | Fabien ADAM | resolv-retry infinite |
96 | 1 | Fabien ADAM | nobind |
97 | 1 | Fabien ADAM | persist-key |
98 | 1 | Fabien ADAM | persist-tun |
99 | 1 | Fabien ADAM | ca /etc/openvpn/class3.crt |
100 | 1 | Fabien ADAM | cert /etc/openvpn/Id2ndR.crt |
101 | 1 | Fabien ADAM | key /etc/openvpn/Id2ndR.key |
102 | 1 | Fabien ADAM | comp-lzo no |
103 | 1 | Fabien ADAM | verb 3 |
104 | 1 | Fabien ADAM | root@OpenWrt:/etc/openvpn# wget http://www.cacert.org/certs/class3.crt |
105 | 1 | Fabien ADAM | root@OpenWrt:~# vi /etc/openvpn/Id2ndR.crt |
106 | 1 | Fabien ADAM | root@OpenWrt:~# vi /etc/openvpn/Id2ndR.key |
107 | 2 | Fabien ADAM | root@OpenWrt:~# uci set openvpn.custom_config.enabled=1 |
108 | 2 | Fabien ADAM | root@OpenWrt:~# uci commit |
109 | 2 | Fabien ADAM | root@OpenWrt:~# /etc/init.d/openvpn start |
110 | 2 | Fabien ADAM | root@OpenWrt:~# logread |
111 | 2 | Fabien ADAM | [..] |
112 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.warn openvpn(custom_config)[25584]: WARNING: file '/etc/openvpn/Id2ndR.key' is group or others accessible |
113 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice netifd: Interface 'wan_vpn' is disabled |
114 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: Socket Buffers: R=[163840->131072] S=[163840->131072] |
115 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: UDPv4 link local: [undef] |
116 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: UDPv4 link remote: [AF_INET]91.224.149.109:1195 |
117 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: TLS: Initial packet from [AF_INET]91.224.149.109:1195, sid=2e0c718b e9ec8be6 |
118 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: VERIFY OK: depth=1, O=CAcert Inc., OU=http://www.CAcert.org, CN=CAcert Class 3 Root |
119 | 2 | Fabien ADAM | Sat Dec 6 19:35:15 2014 daemon.notice openvpn(custom_config)[25584]: VERIFY OK: depth=0, CN=id2ndr.toulan.fr |
120 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key |
121 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication |
122 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key |
123 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication |
124 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: Control Channel: TLSv1.0, cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA, 2048 bit RSA |
125 | 2 | Fabien ADAM | Sat Dec 6 19:35:16 2014 daemon.notice openvpn(custom_config)[25584]: [id2ndr.toulan.fr] Peer Connection Initiated with [AF_INET]91.224.149.109:1195 |
126 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: SENT CONTROL [id2ndr.toulan.fr]: 'PUSH_REQUEST' (status=1) |
127 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 91.224.149.254,route 10.9.0.0 255.255.255.0,topology net30,ping 30,ping-restart 100,ifconfig 10.9.0.6 10.9.0.5' |
128 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: OPTIONS IMPORT: timers and/or timeouts modified |
129 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: OPTIONS IMPORT: --ifconfig/up options modified |
130 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: OPTIONS IMPORT: route options modified |
131 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified |
132 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: TUN/TAP device tun0 opened |
133 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: TUN/TAP TX queue length set to 100 |
134 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 |
135 | 1 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: /sbin/ifconfig tun0 10.9.0.6 pointopoint 10.9.0.5 mtu 1500 |
136 | 2 | Fabien ADAM | Sat Dec 6 19:35:18 2014 daemon.notice openvpn(custom_config)[25584]: /sbin/route add -net 91.224.149.109 netmask 255.255.255.255 gw 192.168.0.1 |
137 | 1 | Fabien ADAM | </pre> |
138 | 5 | Fabien ADAM | |
139 | 5 | Fabien ADAM | Résultats : |
140 | 5 | Fabien ADAM | * j'ai mesuré environ 70% d'utilisation CPU sur le routeur pour faire passer 17 méga. Ceci est cohérent avec [[Benchmark_VPN]]. |
141 | 5 | Fabien ADAM | * en 4G, avec une SIM Red, je fais passé en général 6 méga down / 1 méga up (mais parfois beaucoup plus) |
142 | 5 | Fabien ADAM | |
143 | 7 | Fabien ADAM | h3. Routage |
144 | 7 | Fabien ADAM | |
145 | 7 | Fabien ADAM | * Nat via le VPN : inspiré de http://wiki.openwrt.org/doc/howto/vpn.server.openvpn.tun Use-Case 3 |
146 | 7 | Fabien ADAM | ** Dans Luci, Network > Interfaces : créer une interface nommée wan_vpn exploitant l'interface tun0, en client dhcp |
147 | 7 | Fabien ADAM | ** Dans Luci, Network > Firewall : créer une zone wan_vpn avec l'interface wan_vpn en activant Masquerading |
148 | 7 | Fabien ADAM | ** Dans Luci, Network > Firewall : supprimer la zone lan existante. Créer la zone lan avec le forward vers la zone wan_vpn |
149 | 7 | Fabien ADAM | ** Depuis un PC derrière le routeur : traceroute google.fr doit sortir par h7.tetaneutral.net (4ème nœuds chez moi, à cause de la VM) |
150 | 7 | Fabien ADAM | |
151 | 7 | Fabien ADAM | Résultats : |
152 | 7 | Fabien ADAM | * Le VPN ajoute en général 20-25ms par rapport à une route directe (vers un autre site que tetaneutral). |
153 | 7 | Fabien ADAM | * Le VPN ne réduit pas le débit par rapport à la connexion hors VPN. |
154 | 7 | Fabien ADAM | * La VoIP (SIP) fonctionne très bien via le VPN |
155 | 7 | Fabien ADAM | |
156 | 7 | Fabien ADAM | Limites : |
157 | 7 | Fabien ADAM | * Pour les jeux en ligne, on tourne autour de 100-105ms de ping avec le VPN contre 80ms en connexion direct. |
158 | 7 | Fabien ADAM | * Pas de sélection des flux à faire passer dans le VPN, et ceux à faire passer directement en 4G : |
159 | 7 | Fabien ADAM | ** Le masquerade d'OpenWRT fait via luci fonctionne par zone, et s'il est possible d'autoriser le forward d'une zone vers plusieurs zones, seule la dernière zone est prise en compte |
160 | 7 | Fabien ADAM | ** Il n'est pas possible via Luci d'utiliser une même zone dans plusieurs règles de forward vers chacun une zone différente |
161 | 7 | Fabien ADAM | ** La table de routage du noyau linux ne permet pas de définir plusieurs passerelles par défaut. |
162 | 7 | Fabien ADAM | |
163 | 7 | Fabien ADAM | Piste à explorer pour contourner les limites ci-dessus : installer iproute2, et ajouter des étiquettes sur les différents flux, pour faire un routage plus évolué. |
164 | 7 | Fabien ADAM | |
165 | 6 | Fabien ADAM | h2. Raspberry Pi |
166 | 6 | Fabien ADAM | |
167 | 5 | Fabien ADAM | Objectifs : |
168 | 5 | Fabien ADAM | * Transformer le rPi en routeur, avec comme interface de sortie vers Internet un appareil en usb, et comme interface LAN, le port ethernet |
169 | 1 | Fabien ADAM | * Encapsuler la connexion des clients sur le LAN dans le VPN |
170 | 1 | Fabien ADAM | * Faire du filtrage pour choisir explicitement quoi router dans le VPN, et quoi faire passer en direct |
171 | 1 | Fabien ADAM | |
172 | 1 | Fabien ADAM | h3. Routage |
173 | 1 | Fabien ADAM | |
174 | 7 | Fabien ADAM | * Configurer l'interface ethernet en hotplug, avec une IP fixe; et l'usb en dhcp (Internet) |
175 | 7 | Fabien ADAM | <pre> |
176 | 7 | Fabien ADAM | auto eth0 |
177 | 7 | Fabien ADAM | allow-hotplug eth0 |
178 | 7 | Fabien ADAM | iface eth0 inet static |
179 | 7 | Fabien ADAM | address 192.168.1.1 |
180 | 7 | Fabien ADAM | netmask 255.255.255.0 |
181 | 7 | Fabien ADAM | post-up iptables-restore < /etc/network/iptables |
182 | 1 | Fabien ADAM | |
183 | 7 | Fabien ADAM | auto usb0 |
184 | 7 | Fabien ADAM | allow-hotplug usb0 |
185 | 7 | Fabien ADAM | iface usb0 inet dhcp |
186 | 7 | Fabien ADAM | </pre> |
187 | 7 | Fabien ADAM | * Installer le paquet dnsmasq, et lui donner la page d'IP à allouer en DHCP. dnsmasq fait office de relai DNS de manière automatique, et fourni également la route par défaut (il indique que le rPi fait office de passerelle vers Internet) : echo "dhcp-range=eth0,192.168.1.2,192.168.1.10,4h" | sudo tee /etc/dnsmasq.d/raspberry.conf |
188 | 7 | Fabien ADAM | * Activer le routage sur le rPi : |
189 | 8 | Fabien ADAM | ** l'ip forward : Décommenter la ligne _net.ipv4.ip_forward=1_ dans /etc/sysctl.conf, et appliquer les modifications avec _sudo sysctl -p /etc/sysctl.conf_ (vérification : sudo sysctl net.ipv4.ip_forward) |
190 | 7 | Fabien ADAM | ** le nat : sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE; sudo iptables-save | sudo tee /etc/network/iptables |
191 | 7 | Fabien ADAM | |
192 | 1 | Fabien ADAM | h3. OpenVPN |
193 | 5 | Fabien ADAM | |
194 | 5 | Fabien ADAM | * Installer le paquet openvpn. |
195 | 5 | Fabien ADAM | * Recopier la conf (4 fichier) dans /etc/openvpn |
196 | 5 | Fabien ADAM | * Redémarrer le service |
197 | 5 | Fabien ADAM | |
198 | 5 | Fabien ADAM | TODO : tester 2 connexions VPN en //, pour éventuellement faire du bounding (si FreeMobile limite le débit vers tetaneutral par flux) |
199 | 5 | Fabien ADAM | |
200 | 5 | Fabien ADAM | TODO : mettre en place de l'IPv6 |
201 | 5 | Fabien ADAM | |
202 | 5 | Fabien ADAM | h3. Routage sélectif |
203 | 5 | Fabien ADAM | |
204 | 5 | Fabien ADAM | TODO : avec iproute2 |
205 | 9 | Fabien ADAM | |
206 | 9 | Fabien ADAM | Ici le rPi : |
207 | 9 | Fabien ADAM | * prend le net via la 4G, soit en usb, soit en wifi, cela ne change rien (sauf l'IP de la passerelle utilisée ci-dessous) |
208 | 9 | Fabien ADAM | * partage le net via son port ethernet, branché sur un switch, en faisant serveur DHCP |
209 | 9 | Fabien ADAM | |
210 | 9 | Fabien ADAM | Objectif : faire transiter tous les flux dans le VPN, sauf ceux qui ne doivent pas être ralentis (ping ou bridage FreeMobile) |
211 | 9 | Fabien ADAM | Source : http://irp.nain-t.net/doku.php/100iproute:020_iproute2 |
212 | 9 | Fabien ADAM | |
213 | 9 | Fabien ADAM | Démo : ici on va faire passer le web via la 4G, et le reste dans le VPN. |
214 | 9 | Fabien ADAM | <pre> |
215 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ sudo vim.tiny /etc/iproute2/rt_tables # Ajout de la ligne "200 4G" |
216 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ sudo ip rule add fwmark 80 table 4G |
217 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ ip rule list |
218 | 9 | Fabien ADAM | 0: from all lookup local |
219 | 9 | Fabien ADAM | 32764: from all fwmark 0x50 lookup 4G |
220 | 9 | Fabien ADAM | 32765: from all fwmark 0x50 lookup 4G |
221 | 9 | Fabien ADAM | 32766: from all lookup main |
222 | 9 | Fabien ADAM | 32767: from all lookup default |
223 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ ip a s dev wlan0 |
224 | 9 | Fabien ADAM | 4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 |
225 | 9 | Fabien ADAM | link/ether 00:08:a1:ac:cf:ab brd ff:ff:ff:ff:ff:ff |
226 | 9 | Fabien ADAM | inet 192.168.43.241/24 brd 192.168.43.255 scope global wlan0 |
227 | 9 | Fabien ADAM | valid_lft forever preferred_lft forever |
228 | 9 | Fabien ADAM | inet6 fe80::208:a1ff:feac:cfab/64 scope link |
229 | 9 | Fabien ADAM | valid_lft forever preferred_lft forever |
230 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ sudo ip route add default via 192.168.43.1 table 4G |
231 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ ip r s |
232 | 9 | Fabien ADAM | 0.0.0.0/1 via 10.9.0.5 dev tun0 |
233 | 9 | Fabien ADAM | default via 192.168.43.1 dev wlan0 |
234 | 9 | Fabien ADAM | 10.9.0.0/24 via 10.9.0.5 dev tun0 |
235 | 9 | Fabien ADAM | 10.9.0.5 dev tun0 proto kernel scope link src 10.9.0.6 |
236 | 9 | Fabien ADAM | 128.0.0.0/1 via 10.9.0.5 dev tun0 |
237 | 9 | Fabien ADAM | 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 |
238 | 9 | Fabien ADAM | 192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.241 |
239 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ ip r s table 4G |
240 | 9 | Fabien ADAM | default via 192.168.43.1 dev wlan0 |
241 | 9 | Fabien ADAM | id2ndr@raspberrypi ~ $ sudo iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 80 |
242 | 9 | Fabien ADAM | </pre> |
243 | 9 | Fabien ADAM | |
244 | 9 | Fabien ADAM | En activant ou non la règle iptables à la fin, on peut comparer un speedtest passant dans le VPN ou en direct |
245 | 9 | Fabien ADAM | |
246 | 9 | Fabien ADAM | Tests : |
247 | 9 | Fabien ADAM | * sudo tcptraceroute google.fr 80 # doit sortir en direct |
248 | 9 | Fabien ADAM | * sudo tcptraceroute google.fr 100 # doit passer par tetaneutral |
249 | 10 | Fabien ADAM | |
250 | 10 | Fabien ADAM | Mise en place permanente : |
251 | 10 | Fabien ADAM | * Contenu de /home/id2ndr/scripts/4G_direct_FreeMobile.sh : |
252 | 10 | Fabien ADAM | <pre> |
253 | 10 | Fabien ADAM | #!/bin/bash |
254 | 10 | Fabien ADAM | |
255 | 10 | Fabien ADAM | sudo ip route add default via 192.168.43.1 table 4G |
256 | 10 | Fabien ADAM | sudo ip rule add fwmark 80 table 4G |
257 | 10 | Fabien ADAM | # Web |
258 | 10 | Fabien ADAM | sudo iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 80 |
259 | 10 | Fabien ADAM | # Jeu en ligne (pour le ping) : Steam |
260 | 10 | Fabien ADAM | sudo iptables -t mangle -A PREROUTING -i eth0 -p udp --dport 27000:27015 -j MARK --set-mark 80 |
261 | 10 | Fabien ADAM | sudo iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 27030:27039 -j MARK --set-mark 80 |
262 | 10 | Fabien ADAM | </pre> |
263 | 10 | Fabien ADAM | * Ajout de @ post-up /home/id2ndr/scripts/4G_direct_FreeMobile.sh@ dans /etc/network/interfaces pour eth0 |
264 | 11 | Fabien ADAM | |
265 | 11 | Fabien ADAM | h2. IPv6 et VPN |
266 | 11 | Fabien ADAM | |
267 | 11 | Fabien ADAM | Les VPN peuvent faire transiter de l'IPv6, mais ce protocole étant assez vaste par nature, le contrôle fait par les VPN pose souvent problème. |
268 | 11 | Fabien ADAM | Dans mon cas, je n'ai pas réussi à router correctement l'IPv6 au dela du VPN lorsque je spécifiais des sous-réseaux IPv6 dans la conf des VPN (OpenVPN et tinc). |
269 | 11 | Fabien ADAM | |
270 | 11 | Fabien ADAM | Le plus simple est de ne pas indiquer au VPN qu'il y a de l'IPv6, pour après faire la configuration avec iproute2. Cette solution est d'ailleurs utilisée à TTN pour faire transiter l'IPv6 à travers les ponts wifi. |
271 | 11 | Fabien ADAM | * Avec OpenVPN, il faut le lancer en ligne de commande avec les options en argument (je n'ai pas réussi à le faire fonctionner avec un fichier de configuration) ; exemple sur le client _sudo openvpn --dev tunipv6 --dev-type tun --lport 0 --proto udp --daemon --remote 91.224.149.109 65002 --secret /etc/openvpn/secret.key --keepalive 10 60 --verb 3 --log-append /tmp/tunipv6.log --mssfix 1389_ |
272 | 11 | Fabien ADAM | * Avec Tinc, il suffit de le faire fonctionner au niveau 2 (ethernet) : _Mode = switch_ dans /etc/tinc/tinc.conf |
273 | 11 | Fabien ADAM | |
274 | 11 | Fabien ADAM | h3. Routage et configuration automatique |
275 | 11 | Fabien ADAM | |
276 | 11 | Fabien ADAM | L'idée est d'apporter l'IPv6 aux clients derrière le VPN, qui sont derrière un switch physique. |
277 | 11 | Fabien ADAM | * Plan réseau : <Internet>---</56 TTN sur le serveur>---VPN---</64 sur le LAN> |
278 | 11 | Fabien ADAM | * Voici mon architecture matérielle : <Internet>---<Serveur à TTN>---4G---<smartphone>---usb---<Odroid_C1>--eth---<switch_wifi>---<PCs> |
279 | 11 | Fabien ADAM | |
280 | 11 | Fabien ADAM | Éléments techniques pour le routage : |
281 | 11 | Fabien ADAM | * Conteneur docker sur le serveur : déclare le sous-réseau en /64 à router dans le VPN |
282 | 11 | Fabien ADAM | * Pas d'IPv6 global à l'entrée et à la sortie du tunnel VPN : l'utilisation des adresses de liens permettra de pousser le /64 au delà du Odroid_C1 : sur le LAN |
283 | 11 | Fabien ADAM | * Proxy NDP pour pouvoir router le trafic unicast à travers les liens-locaux |
284 | 11 | Fabien ADAM | |
285 | 11 | Fabien ADAM | h3. Mise en place |
286 | 11 | Fabien ADAM | |
287 | 11 | Fabien ADAM | * Tinc : |
288 | 11 | Fabien ADAM | ** Serveur : |
289 | 11 | Fabien ADAM | *** mkdir /docker_volumes/tinc ; cd /docker_volumes/tinc ; echo -e "Name = tinc_ipv6\nForwarding = kernel\nMode = switch" > tinc.conf ; echo "Address = id2ndr.tetaneutral.net" > hosts/tinc_ipv6 ; echo -e "#!/bin/sh\nip link set $INTERFACE up\nip link set mtu 1400 dev $INTERFACE\nip -6 addr add fe80::81:6d03/64 dev $INTERFACE\nip -6 route add 2a01:6600:8081:6d03::/64 dev $INTERFACE" > tinc-up ; chmod +x tinc-up |
290 | 11 | Fabien ADAM | *** docker run -d --name tinc --net=host --device=/dev/net/tun --cap-add NET_ADMIN --volume /docker_volumes/tinc:/etc/tinc jenserat/tinc start -D |
291 | 11 | Fabien ADAM | *** docker exec -ti tinc tinc init |
292 | 11 | Fabien ADAM | *** docker exec -ti tinc tinc export # Récupérer la conf hosts/tinc_ipv6 |
293 | 11 | Fabien ADAM | *** docker restart tinc |
294 | 11 | Fabien ADAM | ** Client : |
295 | 11 | Fabien ADAM | *** apt install tinc |
296 | 11 | Fabien ADAM | *** cd /etc/tinc ; echo -e "Name = tinc_ipv6_odroid\nForwarding = kernel\nMode = switch" > tinc.conf ; echo -e "Name = tinc_ipv6_odroid\nInterface=vpn6\nConnectTo = tinc_ipv6" > hosts/tinc_ipv6_odroid ; echo -e "#!/bin/sh\nip link set $INTERFACE up\nip link set mtu 1400 $INTERFACE\nip -6 route add default via fe80::81:6d03 dev $INTERFACE > tinc-up ; chmod +x tinc-up ; echo "Import de hosts/tinc_ipv6" |
297 | 11 | Fabien ADAM | *** tincd # Puis dans docker, on vérifie la connexion avec : tinc dump node |
298 | 11 | Fabien ADAM | *** apt install radvd # Va indiquer le sous-réseau à utiliser pour les PC sur le LAN |
299 | 11 | Fabien ADAM | *** echo -e "interface eth0\n{\n AdvSendAdvert on;\n prefix 2a01:6600:8081:6d03::/64\n {\n AdvRouterAddr on; \n };\n}; " > /etc/radvd.conf |
300 | 11 | Fabien ADAM | *** sudo service radvd start |
301 | 11 | Fabien ADAM | *** echo "Télécharger NDPPD sur https://github.com/DanielAdolfsson/ndppd/releases" |
302 | 11 | Fabien ADAM | *** make |
303 | 11 | Fabien ADAM | *** echo -e "proxy vpn6 {\n router yes\n timeout 500 \n ttl 30000\n rule 2a01:6600:8081:6d03::/64 {\n auto\n }\n}" > /etc/ndppd.conf |
304 | 11 | Fabien ADAM | *** ./ndppd -d # A intégrer dans le tinc-up |
305 | 11 | Fabien ADAM | |
306 | 11 | Fabien ADAM | Ensuite on teste : |
307 | 11 | Fabien ADAM | * Écoute du trafic un peu partout : sudo tcpdump ip6 and icmp6 -i vpn6 -n |
308 | 11 | Fabien ADAM | * ping6 sur l'adresse de lien (odroid vers conteneur) : ping6 fe80::81:6d31%vpn6 |
309 | 11 | Fabien ADAM | * ping6 sur adresse global depuis l'odroid : ko (probablement car le proxy NDP n'agit pas car les demandes n'entrent pas réellement par l'interface eth0 |
310 | 11 | Fabien ADAM | * ping6 sur id2ndr.tetaneutral.net depuis un PC : OK |
311 | 11 | Fabien ADAM | * wget -6 google.fr |