Projet

Général

Profil

OpenVPN » Historique » Version 7

Jocelyn Dealande, 02/05/2012 00:40

1 3 Laurent GUERBY
{{>toc}}
2 3 Laurent GUERBY
3 1 Laurent GUERBY
h1. OpenVPN
4 1 Laurent GUERBY
5 3 Laurent GUERBY
h2. point a point
6 1 Laurent GUERBY
7 1 Laurent GUERBY
<pre>
8 1 Laurent GUERBY
openvpn --genkey --secret tst.key
9 1 Laurent GUERBY
10 1 Laurent GUERBY
#server
11 1 Laurent GUERBY
openvpn --mktun --dev-type tap --dev taptst
12 1 Laurent GUERBY
ip link set taptst up
13 1 Laurent GUERBY
openvpn --dev-type tap --dev tapstg --comp-lzo yes --cipher none --proto udp --daemon --keepalive 10 30 --secret tst.key --port 1234
14 1 Laurent GUERBY
15 1 Laurent GUERBY
#client
16 1 Laurent GUERBY
openvpn --mktun --dev-type tap --dev taptst
17 1 Laurent GUERBY
ip link set taptst up
18 1 Laurent GUERBY
openvpn --dev-type tap --dev tapstg --comp-lzo yes --cipher none --proto udp --daemon --keepalive 10 30 --secret tst.key --remote A.B.C.D 1234
19 1 Laurent GUERBY
</pre>
20 2 Laurent GUERBY
21 3 Laurent GUERBY
h2. server
22 3 Laurent GUERBY
23 2 Laurent GUERBY
Pour ignorer les push IP et route du serveur coté client openvpn il suffit de mettre "tls-client" a la place de "client"
24 2 Laurent GUERBY
l'option --client est un raccourci pour --tls-client  --pull et --pull est ce qui accepte les directives serveur.
25 3 Laurent GUERBY
26 5 Jocelyn Dealande
h2. Point-à-point avec routage d'un bloc d'IP.
27 5 Jocelyn Dealande
28 5 Jocelyn Dealande
Le but est d'utiliser OpenVPN pour du *partage de connexion ADSL*. La collecte ADSL n'étant 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.
29 5 Jocelyn Dealande
30 5 Jocelyn Dealande
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…
31 5 Jocelyn Dealande
32 5 Jocelyn Dealande
Ce qui ne concerne pas cette documentation : 
33 5 Jocelyn Dealande
* la manière dont le routeur term_distante effectue le routage du bloc vers internet.
34 5 Jocelyn Dealande
* la manière dont le trafic est collecté sur le réseau local du côté eth1 de term_locale.
35 7 Jocelyn Dealande
* la manière dont sont distribuée les adresses du bloc aux machines sur le réseau local (DHCP, statique…)
36 5 Jocelyn Dealande
37 5 Jocelyn Dealande
h3. Préparation
38 5 Jocelyn Dealande
39 7 Jocelyn Dealande
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_.
40 7 Jocelyn Dealande
41 5 Jocelyn Dealande
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_.
42 5 Jocelyn Dealande
43 5 Jocelyn Dealande
<pre>
44 5 Jocelyn Dealande
openvpn --genkey --secret trifouillis.key
45 5 Jocelyn Dealande
</pre>
46 1 Laurent GUERBY
47 7 Jocelyn Dealande
h3. Configuration d'OpenVPN
48 1 Laurent GUERBY
49 7 Jocelyn Dealande
h4. Configuration OpenVPN client (machine term_locale)
50 7 Jocelyn Dealande
51 5 Jocelyn Dealande
_/etc/openvpn/trifouillis.conf_ : 
52 5 Jocelyn Dealande
<pre>
53 5 Jocelyn Dealande
dev             tap0
54 5 Jocelyn Dealande
dev-type        tap
55 5 Jocelyn Dealande
comp-lzo        yes
56 5 Jocelyn Dealande
cipher          none
57 5 Jocelyn Dealande
proto           udp
58 5 Jocelyn Dealande
verb            3
59 5 Jocelyn Dealande
60 5 Jocelyn Dealande
daemon
61 5 Jocelyn Dealande
log-append      /var/log/openvpn-trifouillis.log
62 5 Jocelyn Dealande
63 5 Jocelyn Dealande
remote          5.5.5.5 9999
64 5 Jocelyn Dealande
secret          /etc/openvpn/trifouillis/vpn-trifouillis.key
65 5 Jocelyn Dealande
66 5 Jocelyn Dealande
up              /etc/openvpn/trifouillis/vpn.up.sh
67 5 Jocelyn Dealande
down            /etc/openvpn/trifouillis/vpn.down.sh
68 5 Jocelyn Dealande
69 5 Jocelyn Dealande
keepalive       10 30
70 5 Jocelyn Dealande
71 5 Jocelyn Dealande
persist-tun
72 5 Jocelyn Dealande
73 5 Jocelyn Dealande
# nobind permet de prendre un port aléatoire à chaque démarrage d'openVPN évitera
74 5 Jocelyn Dealande
# les bugs liés aux NAT lorsque certaines box changent d'IP publique...
75 5 Jocelyn Dealande
76 5 Jocelyn Dealande
nobind
77 1 Laurent GUERBY
</pre>
78 5 Jocelyn Dealande
79 7 Jocelyn Dealande
h4. Configuration OpenVPN serveur (machine term_distante)
80 5 Jocelyn Dealande
81 5 Jocelyn Dealande
_/etc/openvpn/trifouillis.conf_ : 
82 5 Jocelyn Dealande
<pre>
83 5 Jocelyn Dealande
dev             tap0
84 5 Jocelyn Dealande
dev-type        tap
85 5 Jocelyn Dealande
comp-lzo        yes
86 5 Jocelyn Dealande
cipher          none
87 5 Jocelyn Dealande
proto           udp
88 5 Jocelyn Dealande
verb            3
89 5 Jocelyn Dealande
90 5 Jocelyn Dealande
daemon
91 5 Jocelyn Dealande
log-append      /var/log/openvpn-trifouillis.log
92 5 Jocelyn Dealande
93 5 Jocelyn Dealande
port            9999
94 5 Jocelyn Dealande
secret          /etc/openvpn/trifouillis/vpn-trifouillis.key
95 5 Jocelyn Dealande
96 5 Jocelyn Dealande
keepalive       10 30
97 5 Jocelyn Dealande
98 1 Laurent GUERBY
persist-tun
99 1 Laurent GUERBY
</pre>
100 1 Laurent GUERBY
101 7 Jocelyn Dealande
102 7 Jocelyn Dealande
h3. Routage
103 7 Jocelyn Dealande
104 7 Jocelyn Dealande
h4. Sur le serveur (machine term_distante)
105 7 Jocelyn Dealande
106 7 Jocelyn Dealande
Sort du cadre de ce tutoriel. Simplement le bloc (_1.2.3.1/28_ dans notre exemple) doit être routé vers _term_distante_.
107 7 Jocelyn Dealande
108 7 Jocelyn Dealande
h4. Sur le client (machine term_locale)
109 7 Jocelyn Dealande
110 7 Jocelyn Dealande
L'idée ici est la suivante : 
111 7 Jocelyn Dealande
# 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.
112 7 Jocelyn Dealande
# Les paquets provenant d'eth1 et avec une adresse source dans _1.2.3.1/28_
113 7 Jocelyn Dealande
114 7 Jocelyn Dealande
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 : 
115 7 Jocelyn Dealande
116 7 Jocelyn Dealande
* IP_ADVANCED_ROUTER 
117 7 Jocelyn Dealande
* IP_MULTIPLE_TABLES 
118 7 Jocelyn Dealande
* IPV6_MULTIPLE_TABLES
119 7 Jocelyn Dealande
* IPV6_SUBTREES
120 7 Jocelyn Dealande
121 7 Jocelyn Dealande
À vérifier dans /boot/config-$(uname -r) ou /proc/config.gz une Debian Wheezy récente est ok.
122 7 Jocelyn Dealande
123 7 Jocelyn Dealande
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 : 
124 7 Jocelyn Dealande
125 7 Jocelyn Dealande
_/etc/openvpn/trifouillis/vpn.up.sh_
126 7 Jocelyn Dealande
127 7 Jocelyn Dealande
<pre>
128 7 Jocelyn Dealande
#!/bin/sh
129 7 Jocelyn Dealande
130 7 Jocelyn Dealande
## On gère via une table perso (250) uniquement les IP du bloc /28 et l'IP du endpoint VPN local.
131 7 Jocelyn Dealande
## Les autres passent par la table default du système
132 7 Jocelyn Dealande
133 7 Jocelyn Dealande
# source-routing des IPs du bloc
134 7 Jocelyn Dealande
ip rule add prio 200 from 1.2.3.0/28 lookup 250
135 7 Jocelyn Dealande
# endpoint local (tap0)
136 7 Jocelyn Dealande
ip rule add prio 200 from 9.9.9.9 lookup 250
137 7 Jocelyn Dealande
138 7 Jocelyn Dealande
139 7 Jocelyn Dealande
## Fonctionnement de la table 250
140 7 Jocelyn Dealande
141 7 Jocelyn Dealande
# Ce qui est à destination des IPs du bloc va sur eth0
142 7 Jocelyn Dealande
# (internet -> bloc)
143 7 Jocelyn Dealande
ip route add 1.2.3.0/28 dev eth1 table 250
144 7 Jocelyn Dealande
145 7 Jocelyn Dealande
# Ce qui vient du bloc vers internet va dans le tunnel
146 7 Jocelyn Dealande
# (bloc -> internet)
147 7 Jocelyn Dealande
ip route add default via 9.9.9.8 dev tap0 table 250
148 7 Jocelyn Dealande
149 7 Jocelyn Dealande
</pre>
150 7 Jocelyn Dealande
151 7 Jocelyn Dealande
_/etc/openvpn/trifouillis/vpn.down.sh_
152 7 Jocelyn Dealande
153 7 Jocelyn Dealande
<pre>
154 7 Jocelyn Dealande
#!/bin/sh
155 7 Jocelyn Dealande
156 7 Jocelyn Dealande
# On supprime toutes les règles de routage du *.up.sh
157 7 Jocelyn Dealande
ip rule del prio 200 from 1.2.3.0/28 lookup 250
158 7 Jocelyn Dealande
ip rule del prio 200 from 9.9.9.9 lookup 250
159 7 Jocelyn Dealande
ip route del default via 9.9.9.8 dev taprhi table 250
160 7 Jocelyn Dealande
ip route del 1.2.3.0/28 dev eth0 table 250
161 7 Jocelyn Dealande
</pre>
162 7 Jocelyn Dealande
163 7 Jocelyn Dealande
h3. On lance
164 7 Jocelyn Dealande
165 7 Jocelyn Dealande
De chaque côté pour que la magie opère :
166 7 Jocelyn Dealande
167 7 Jocelyn Dealande
<pre>
168 7 Jocelyn Dealande
/etc/init.d/openvpn restart
169 7 Jocelyn Dealande
</pre>
170 7 Jocelyn Dealande
171 7 Jocelyn Dealande
172 7 Jocelyn Dealande
h3. …et on débugue
173 7 Jocelyn Dealande
Quelques commandes pour tester/debuguer (sur term_locale)
174 7 Jocelyn Dealande
175 7 Jocelyn Dealande
Interface tap existe ?
176 7 Jocelyn Dealande
<pre>
177 7 Jocelyn Dealande
ifconfig tap
178 7 Jocelyn Dealande
</pre>
179 7 Jocelyn Dealande
180 7 Jocelyn Dealande
Tunnel monté et fonctionnel (depuis local_endpoint) ?
181 7 Jocelyn Dealande
<pre>
182 7 Jocelyn Dealande
ping 9.9.9.8
183 7 Jocelyn Dealande
</pre>
184 7 Jocelyn Dealande
185 7 Jocelyn Dealande
Source-routing du blocpasse bien par le tunnel ?
186 7 Jocelyn Dealande
<pre>
187 7 Jocelyn Dealande
ip route get 8.8.8.8 from  
188 7 Jocelyn Dealande
189 7 Jocelyn Dealande
# Réponse attendue :
190 7 Jocelyn Dealande
8.8.8.8 from  via  dev tap0
191 7 Jocelyn Dealande
</pre>
192 7 Jocelyn Dealande
193 7 Jocelyn Dealande
Ping fonctionne depuis le réseau routé à travers le VPN ?
194 7 Jocelyn Dealande
195 7 Jocelyn Dealande
<pre>
196 7 Jocelyn Dealande
ping -I 1.2.3.1/28 www.ffdn.org
197 7 Jocelyn Dealande
</pre>
198 7 Jocelyn Dealande
199 7 Jocelyn Dealande
200 7 Jocelyn Dealande
Afficher les règles de routage de la table 250
201 7 Jocelyn Dealande
<pre>
202 7 Jocelyn Dealande
ip route show table 250
203 7 Jocelyn Dealande
</pre>
204 7 Jocelyn Dealande
205 7 Jocelyn Dealande
Afficher les règles de consultation des tables :
206 7 Jocelyn Dealande
<pre>
207 7 Jocelyn Dealande
ip rule show
208 7 Jocelyn Dealande
</pre>
209 5 Jocelyn Dealande
210 3 Laurent GUERBY
h2. Proxmox
211 3 Laurent GUERBY
212 3 Laurent GUERBY
http://www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet
213 4 Laurent GUERBY
http://blog.developpeur-neurasthenique.fr/auto-hebergement-configurer-un-cluster-proxmox-2-sans-multicast.html