Partage ADSL OpenVPN » Historique » Version 6
Baptiste Jonglez, 31/05/2014 04:06
1 | 6 | Baptiste Jonglez | h1. Partage ADSL OpenVPN avec bloc d'IP routé. |
---|---|---|---|
2 | 1 | Jocelyn Dealande | |
3 | 6 | Baptiste Jonglez | Le but est d'utiliser OpenVPN pour du *partage de connexion ADSL*. La collecte ADSL n'est pas maitrisée mais étant celle d'un opérateur tiers et quelconque. Les options et le fonctionnement sont très similaires à la configuration point-à-point. Sauf que tout démarre avec un script d'init et qu'il y a en plus la question du routage du bloc d'adresses. IP. |
4 | 1 | Jocelyn Dealande | |
5 | 6 | Baptiste Jonglez | Le but est d'ammener des adresses IP publiques, via le VPN jusque chez les utilisateurs finaux (barbus du schémas). Là où par défaut, ils ne pourraient que se mettre derrière la *box et recevoir des adresses privées. Ce montage permet également de "neutraliser" un accès internet qui l'est peu… |
6 | 1 | Jocelyn Dealande | |
7 | 6 | Baptiste Jonglez | Comme un schéma vaut mieux qu'un pavé… |
8 | 1 | Jocelyn Dealande | |
9 | 2 | Jocelyn Dealande | p=. !vpn_partage.png! |
10 | 1 | Jocelyn Dealande | |
11 | 1 | Jocelyn Dealande | |
12 | 1 | Jocelyn Dealande | |
13 | 3 | Jocelyn Dealande | Ce que ne couvre pas cette documentation. |
14 | 6 | Baptiste Jonglez | * la manière dont le routeur term_distante effectue le routage du bloc vers internet. |
15 | 6 | Baptiste Jonglez | * la manière dont le trafic est collecté sur le réseau local du côté eth1 de term_locale. |
16 | 6 | Baptiste Jonglez | * la manière dont sont distribuée les adresses du bloc aux machines sur le réseau local (DHCP, statique…) |
17 | 1 | Jocelyn Dealande | |
18 | 6 | Baptiste Jonglez | h2. Préparation |
19 | 1 | Jocelyn Dealande | |
20 | 6 | Baptiste Jonglez | On utilise ici le fonctionnement Debian d'OpenVPN : chaque /etc/openvpn/<nom_tunnel>.conf est une instance d'openvpn différente qui sera démarrée par le script d'init (voir /etc/default/openvpn). Ici notre instance s'appelle _trifouillis_. |
21 | 1 | Jocelyn Dealande | |
22 | 6 | Baptiste Jonglez | On génère une clé symétrique et on la copie dans _/etc/openvpn/trifouillis/vpn-trifouillis.key_ sur _term_locale_ et _term_distante_. |
23 | 1 | Jocelyn Dealande | |
24 | 1 | Jocelyn Dealande | <pre> |
25 | 1 | Jocelyn Dealande | openvpn --genkey --secret trifouillis.key |
26 | 1 | Jocelyn Dealande | </pre> |
27 | 1 | Jocelyn Dealande | |
28 | 6 | Baptiste Jonglez | h2. Interfaces réseau virtuelles |
29 | 1 | Jocelyn Dealande | |
30 | 6 | Baptiste Jonglez | Il faut créer, via OpenVPN des interfaces virtuelles (tap). On peut faire ça proprement dans le fichier _/etc/network/interfaces_ en ajoutant le contenu suivant (côté _term_locale_) : |
31 | 1 | Jocelyn Dealande | |
32 | 1 | Jocelyn Dealande | <pre> |
33 | 1 | Jocelyn Dealande | auto tap0 |
34 | 1 | Jocelyn Dealande | iface tap0 inet static |
35 | 1 | Jocelyn Dealande | pre-up /usr/sbin/openvpn --mktun --dev-type tap --dev tap0 |
36 | 1 | Jocelyn Dealande | post-down /usr/sbin/openvpn --rmtun --dev-type tap --dev tap0 |
37 | 1 | Jocelyn Dealande | address 9.9.9.9 |
38 | 1 | Jocelyn Dealande | netmask 255.255.255.254 |
39 | 1 | Jocelyn Dealande | </pre> |
40 | 1 | Jocelyn Dealande | |
41 | 6 | Baptiste Jonglez | C'est identique côté serveur (_term_distante_), on change juste 9.9.9.9 en 9.9.9.8 |
42 | 1 | Jocelyn Dealande | |
43 | 6 | Baptiste Jonglez | Puis de chaque côté, un petit |
44 | 1 | Jocelyn Dealande | |
45 | 1 | Jocelyn Dealande | <pre> |
46 | 1 | Jocelyn Dealande | ifup tap0 |
47 | 1 | Jocelyn Dealande | </pre> |
48 | 1 | Jocelyn Dealande | |
49 | 1 | Jocelyn Dealande | h2. Configuration d'OpenVPN |
50 | 1 | Jocelyn Dealande | |
51 | 1 | Jocelyn Dealande | h3. Configuration OpenVPN client (machine term_locale) |
52 | 1 | Jocelyn Dealande | |
53 | 6 | Baptiste Jonglez | _/etc/openvpn/trifouillis.conf_ : |
54 | 1 | Jocelyn Dealande | <pre> |
55 | 1 | Jocelyn Dealande | dev tap0 |
56 | 1 | Jocelyn Dealande | dev-type tap |
57 | 1 | Jocelyn Dealande | comp-lzo yes |
58 | 1 | Jocelyn Dealande | cipher none |
59 | 1 | Jocelyn Dealande | proto udp |
60 | 1 | Jocelyn Dealande | verb 3 |
61 | 1 | Jocelyn Dealande | |
62 | 1 | Jocelyn Dealande | daemon |
63 | 1 | Jocelyn Dealande | log-append /var/log/openvpn-trifouillis.log |
64 | 1 | Jocelyn Dealande | |
65 | 1 | Jocelyn Dealande | remote 5.5.5.5 9999 |
66 | 1 | Jocelyn Dealande | secret /etc/openvpn/trifouillis/vpn-trifouillis.key |
67 | 1 | Jocelyn Dealande | |
68 | 1 | Jocelyn Dealande | up /etc/openvpn/trifouillis/vpn.up.sh |
69 | 1 | Jocelyn Dealande | down /etc/openvpn/trifouillis/vpn.down.sh |
70 | 1 | Jocelyn Dealande | |
71 | 1 | Jocelyn Dealande | keepalive 10 30 |
72 | 1 | Jocelyn Dealande | |
73 | 1 | Jocelyn Dealande | persist-tun |
74 | 1 | Jocelyn Dealande | |
75 | 6 | Baptiste Jonglez | # nobind permet de prendre un port aléatoire à chaque démarrage d'openVPN évitera |
76 | 6 | Baptiste Jonglez | # les bugs liés aux NAT lorsque certaines box changent d'IP publique... |
77 | 1 | Jocelyn Dealande | |
78 | 1 | Jocelyn Dealande | nobind |
79 | 1 | Jocelyn Dealande | </pre> |
80 | 1 | Jocelyn Dealande | |
81 | 1 | Jocelyn Dealande | h3. Configuration OpenVPN serveur (machine term_distante) |
82 | 1 | Jocelyn Dealande | |
83 | 6 | Baptiste Jonglez | _/etc/openvpn/trifouillis.conf_ : |
84 | 1 | Jocelyn Dealande | <pre> |
85 | 1 | Jocelyn Dealande | dev tap0 |
86 | 1 | Jocelyn Dealande | dev-type tap |
87 | 1 | Jocelyn Dealande | comp-lzo yes |
88 | 1 | Jocelyn Dealande | cipher none |
89 | 1 | Jocelyn Dealande | proto udp |
90 | 1 | Jocelyn Dealande | verb 3 |
91 | 1 | Jocelyn Dealande | |
92 | 1 | Jocelyn Dealande | daemon |
93 | 1 | Jocelyn Dealande | log-append /var/log/openvpn-trifouillis.log |
94 | 1 | Jocelyn Dealande | |
95 | 1 | Jocelyn Dealande | port 9999 |
96 | 1 | Jocelyn Dealande | secret /etc/openvpn/trifouillis/vpn-trifouillis.key |
97 | 1 | Jocelyn Dealande | |
98 | 1 | Jocelyn Dealande | keepalive 10 30 |
99 | 1 | Jocelyn Dealande | |
100 | 1 | Jocelyn Dealande | persist-tun |
101 | 1 | Jocelyn Dealande | </pre> |
102 | 1 | Jocelyn Dealande | |
103 | 1 | Jocelyn Dealande | h2. Routage |
104 | 1 | Jocelyn Dealande | |
105 | 1 | Jocelyn Dealande | h3. Sur le serveur (machine term_distante) |
106 | 1 | Jocelyn Dealande | |
107 | 6 | Baptiste Jonglez | Sort du cadre de cette documentation. Simplement le bloc (_1.2.3.1/28_ dans notre exemple) doit être routé vers _term_distante_. |
108 | 1 | Jocelyn Dealande | |
109 | 1 | Jocelyn Dealande | h3. Sur le client (machine term_locale) |
110 | 1 | Jocelyn Dealande | |
111 | 6 | Baptiste Jonglez | L'idée ici est la suivante : |
112 | 6 | Baptiste Jonglez | # Les paquets provenant de l'interface tap OpenVPN et correspondant au bloc _1.2.3.1/28_ doivent-être routés vers l'interface eth1. |
113 | 1 | Jocelyn Dealande | # Les paquets provenant d'eth1 et avec une adresse source dans _1.2.3.1/28_ |
114 | 1 | Jocelyn Dealande | |
115 | 6 | Baptiste Jonglez | Le 1. est trivial, le 2. correspond à du *source-routing*. Il faut tout d'abord vérifier que le source-routing est disponible dans le kernel. Cela correspond aux options du kernel Linux suivantes : |
116 | 1 | Jocelyn Dealande | |
117 | 1 | Jocelyn Dealande | * IP_ADVANCED_ROUTER |
118 | 1 | Jocelyn Dealande | * IP_MULTIPLE_TABLES |
119 | 1 | Jocelyn Dealande | * IPV6_MULTIPLE_TABLES |
120 | 1 | Jocelyn Dealande | * IPV6_SUBTREES |
121 | 1 | Jocelyn Dealande | |
122 | 6 | Baptiste Jonglez | À vérifier dans /boot/config-$(uname -r) ou /proc/config.gz une Debian Wheezy récente est ok. |
123 | 1 | Jocelyn Dealande | |
124 | 6 | Baptiste Jonglez | Les règles de routage sont ensuite mises en places/retirées au démarrage/arrêt d'OpenVPN (cf partie précédente, options _up_ et _down_). Le contenu des scripts est le suivant : |
125 | 1 | Jocelyn Dealande | |
126 | 1 | Jocelyn Dealande | _/etc/openvpn/trifouillis/vpn.up.sh_ |
127 | 1 | Jocelyn Dealande | |
128 | 1 | Jocelyn Dealande | <pre> |
129 | 1 | Jocelyn Dealande | #!/bin/sh |
130 | 1 | Jocelyn Dealande | |
131 | 6 | Baptiste Jonglez | ## On gère via une table perso (250) uniquement les IP du bloc /28 et l'IP du endpoint VPN local. |
132 | 6 | Baptiste Jonglez | ## Les autres passent par la table default du système |
133 | 1 | Jocelyn Dealande | |
134 | 1 | Jocelyn Dealande | # source-routing des IPs du bloc |
135 | 1 | Jocelyn Dealande | ip rule add prio 200 from 1.2.3.0/28 lookup 250 |
136 | 1 | Jocelyn Dealande | # endpoint local (tap0) |
137 | 1 | Jocelyn Dealande | ip rule add prio 200 from 9.9.9.9 lookup 250 |
138 | 1 | Jocelyn Dealande | |
139 | 1 | Jocelyn Dealande | |
140 | 1 | Jocelyn Dealande | ## Fonctionnement de la table 250 |
141 | 1 | Jocelyn Dealande | |
142 | 6 | Baptiste Jonglez | # Ce qui est à destination des IPs du bloc va sur eth0 |
143 | 1 | Jocelyn Dealande | # (internet -> bloc) |
144 | 1 | Jocelyn Dealande | ip route add 1.2.3.0/28 dev eth1 table 250 |
145 | 1 | Jocelyn Dealande | |
146 | 1 | Jocelyn Dealande | # Ce qui vient du bloc vers internet va dans le tunnel |
147 | 1 | Jocelyn Dealande | # (bloc -> internet) |
148 | 1 | Jocelyn Dealande | ip route add default via 9.9.9.8 dev tap0 table 250 |
149 | 1 | Jocelyn Dealande | |
150 | 1 | Jocelyn Dealande | </pre> |
151 | 1 | Jocelyn Dealande | |
152 | 1 | Jocelyn Dealande | _/etc/openvpn/trifouillis/vpn.down.sh_ |
153 | 1 | Jocelyn Dealande | |
154 | 1 | Jocelyn Dealande | <pre> |
155 | 1 | Jocelyn Dealande | #!/bin/sh |
156 | 1 | Jocelyn Dealande | |
157 | 6 | Baptiste Jonglez | # On supprime toutes les règles de routage du *.up.sh |
158 | 1 | Jocelyn Dealande | ip rule del prio 200 from 1.2.3.0/28 lookup 250 |
159 | 1 | Jocelyn Dealande | ip rule del prio 200 from 9.9.9.9 lookup 250 |
160 | 1 | Jocelyn Dealande | ip route del default via 9.9.9.8 dev taprhi table 250 |
161 | 1 | Jocelyn Dealande | ip route del 1.2.3.0/28 dev eth0 table 250 |
162 | 1 | Jocelyn Dealande | </pre> |
163 | 1 | Jocelyn Dealande | |
164 | 3 | Jocelyn Dealande | h2. OpenVPN, lis-mes scripts ! |
165 | 3 | Jocelyn Dealande | |
166 | 6 | Baptiste Jonglez | Il convient d'ajuster une variable pour autoriser OpenVPN à utiliser nos scripts d'up/down. |
167 | 3 | Jocelyn Dealande | |
168 | 3 | Jocelyn Dealande | _/etc/default/openvpn_ |
169 | 3 | Jocelyn Dealande | |
170 | 3 | Jocelyn Dealande | <pre> |
171 | 6 | Baptiste Jonglez | … |
172 | 3 | Jocelyn Dealande | OPTARGS="--script-security 2" |
173 | 6 | Baptiste Jonglez | … |
174 | 3 | Jocelyn Dealande | </pre> |
175 | 3 | Jocelyn Dealande | |
176 | 1 | Jocelyn Dealande | h2. On lance |
177 | 1 | Jocelyn Dealande | |
178 | 6 | Baptiste Jonglez | De chaque côté pour que la magie opère : |
179 | 1 | Jocelyn Dealande | |
180 | 1 | Jocelyn Dealande | <pre> |
181 | 1 | Jocelyn Dealande | /etc/init.d/openvpn restart |
182 | 1 | Jocelyn Dealande | </pre> |
183 | 1 | Jocelyn Dealande | |
184 | 1 | Jocelyn Dealande | |
185 | 6 | Baptiste Jonglez | h2. …et on débugue |
186 | 3 | Jocelyn Dealande | |
187 | 1 | Jocelyn Dealande | Quelques commandes pour tester/debuguer (sur term_locale) |
188 | 1 | Jocelyn Dealande | |
189 | 1 | Jocelyn Dealande | Interface tap existe ? |
190 | 1 | Jocelyn Dealande | <pre> |
191 | 1 | Jocelyn Dealande | ifconfig tap |
192 | 1 | Jocelyn Dealande | </pre> |
193 | 1 | Jocelyn Dealande | |
194 | 6 | Baptiste Jonglez | Tunnel monté et fonctionnel (depuis local_endpoint) ? |
195 | 1 | Jocelyn Dealande | <pre> |
196 | 1 | Jocelyn Dealande | ping 9.9.9.8 |
197 | 1 | Jocelyn Dealande | </pre> |
198 | 1 | Jocelyn Dealande | |
199 | 1 | Jocelyn Dealande | Source-routing du blocpasse bien par le tunnel ? |
200 | 1 | Jocelyn Dealande | <pre> |
201 | 1 | Jocelyn Dealande | ip route get 8.8.8.8 from |
202 | 1 | Jocelyn Dealande | |
203 | 6 | Baptiste Jonglez | # Réponse attendue : |
204 | 1 | Jocelyn Dealande | 8.8.8.8 from via dev tap0 |
205 | 1 | Jocelyn Dealande | </pre> |
206 | 1 | Jocelyn Dealande | |
207 | 6 | Baptiste Jonglez | Ping fonctionne depuis le réseau routé à travers le VPN ? |
208 | 1 | Jocelyn Dealande | |
209 | 1 | Jocelyn Dealande | <pre> |
210 | 1 | Jocelyn Dealande | ping -I 1.2.3.1/28 www.ffdn.org |
211 | 1 | Jocelyn Dealande | </pre> |
212 | 1 | Jocelyn Dealande | |
213 | 1 | Jocelyn Dealande | Visualiser les paquets passant dans le tunnel, dans _/etc/openvpn/trifouillis.conf_ |
214 | 3 | Jocelyn Dealande | |
215 | 1 | Jocelyn Dealande | <pre> |
216 | 6 | Baptiste Jonglez | … |
217 | 3 | Jocelyn Dealande | verb 5 |
218 | 6 | Baptiste Jonglez | … |
219 | 3 | Jocelyn Dealande | </pre> |
220 | 3 | Jocelyn Dealande | |
221 | 3 | Jocelyn Dealande | |
222 | 6 | Baptiste Jonglez | Afficher les règles de routage de la table 250 |
223 | 1 | Jocelyn Dealande | <pre> |
224 | 1 | Jocelyn Dealande | ip route show table 250 |
225 | 1 | Jocelyn Dealande | </pre> |
226 | 1 | Jocelyn Dealande | |
227 | 6 | Baptiste Jonglez | Afficher les règles de consultation des tables : |
228 | 1 | Jocelyn Dealande | <pre> |
229 | 1 | Jocelyn Dealande | ip rule show |
230 | 1 | Jocelyn Dealande | </pre> |
231 | 1 | Jocelyn Dealande | |
232 | 1 | Jocelyn Dealande | |
233 | 6 | Baptiste Jonglez | h2. Pour aller plus loin… |
234 | 3 | Jocelyn Dealande | |
235 | 6 | Baptiste Jonglez | h3. Et IPv6 dans tout ça ? |
236 | 1 | Jocelyn Dealande | |
237 | 1 | Jocelyn Dealande | Le tunnel est de niveau 2, ce qui signifie qu'il peut faire passer aussi bien IPv4 qu'IPv6 dedans. Il faut simplement adapter le routage : |
238 | 1 | Jocelyn Dealande | |
239 | 6 | Baptiste Jonglez | * Ajouter des règles _ip route_ et _ip rule_ similaires à celles pour les blocs IPv4 dans les scripts *.up.sh et *.down.sh |
240 | 1 | Jocelyn Dealande | * Configurer l'interface tap0 en IPv6. Exemple d'etc/network/interfaces : |
241 | 1 | Jocelyn Dealande | <pre> |
242 | 1 | Jocelyn Dealande | iface tap0 inet6 static |
243 | 1 | Jocelyn Dealande | address 2607:f0d0:2001:000a:0000:0000:0000:0010 |
244 | 1 | Jocelyn Dealande | netmask 64 |
245 | 1 | Jocelyn Dealande | gateway 2607:f0d0:2001:000a:0000:0000:0000:0001 |
246 | 1 | Jocelyn Dealande | </pre> |
247 | 1 | Jocelyn Dealande | |
248 | 3 | Jocelyn Dealande | h2. Voir aussi |
249 | 3 | Jocelyn Dealande | |
250 | 3 | Jocelyn Dealande | * [[OpenVPN]] |
251 | 3 | Jocelyn Dealande | * [[Bufferbloat#QoS]] |
252 | 6 | Baptiste Jonglez | * [[Benchmark_VPN]] |
253 | 3 | Jocelyn Dealande | * "LARTC simple source policy routing":http://lartc.org/howto/lartc.rpdb.html |