OpenVPN » Historique » Version 41
julien Bresciani, 08/03/2021 13:35
1 | 3 | Laurent GUERBY | {{>toc}} |
---|---|---|---|
2 | 3 | Laurent GUERBY | |
3 | 1 | Laurent GUERBY | h1. OpenVPN |
4 | 1 | Laurent GUERBY | |
5 | 13 | Laurent GUERBY | h2. Port sharing |
6 | 12 | Laurent GUERBY | |
7 | 12 | Laurent GUERBY | Apache and nginx |
8 | 12 | Laurent GUERBY | http://www.davidwesterfield.net/2012/08/openvpn-sharing-a-tcp-port-with-ssl-on-nginx-and-apache-yeah-its-possible/ |
9 | 12 | Laurent GUERBY | |
10 | 12 | Laurent GUERBY | port-share 127.0.0.1 4443 |
11 | 12 | Laurent GUERBY | |
12 | 14 | Laurent GUERBY | http://www.greenie.net/ipv6/openvpn.html |
13 | 14 | Laurent GUERBY | https://community.openvpn.net/openvpn/wiki/ChangesInOpenvpn23 |
14 | 14 | Laurent GUERBY | |
15 | 35 | Laurent GUERBY | https://community.openvpn.net/openvpn/wiki/Gigabit_Networks_Linux |
16 | 35 | Laurent GUERBY | |
17 | 15 | Laurent GUERBY | h2. Certificats |
18 | 15 | Laurent GUERBY | |
19 | 34 | Baptiste Jonglez | Via mherrb : la page de man 'ssl(8)' d'OpenBSD explique bien comment faire un certificat auto-signé qui marchera pour OpenVPN: |
20 | 15 | Laurent GUERBY | http://www.openbsd.org/cgi-bin/man.cgi?query=ssl&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html |
21 | 15 | Laurent GUERBY | |
22 | 9 | Laurent GUERBY | h2. Server |
23 | 1 | Laurent GUERBY | |
24 | 9 | Laurent GUERBY | <pre> |
25 | 9 | Laurent GUERBY | # cat /etc/default/openvpn |
26 | 9 | Laurent GUERBY | ... |
27 | 9 | Laurent GUERBY | AUTOSTART="ttnn-tap ttnn-tap6 ttnn-tap-tcp ttnn-tap-tcp6" |
28 | 9 | Laurent GUERBY | ... |
29 | 9 | Laurent GUERBY | # cat /etc/openvpn/ttnn-tap.conf |
30 | 9 | Laurent GUERBY | dev tap0udp |
31 | 9 | Laurent GUERBY | port 11195 |
32 | 9 | Laurent GUERBY | proto udp |
33 | 9 | Laurent GUERBY | |
34 | 9 | Laurent GUERBY | ca ttnn/ca.crt |
35 | 9 | Laurent GUERBY | cert ttnn/h1.crt |
36 | 9 | Laurent GUERBY | key ttnn/h1.key # This file should be kept secret |
37 | 9 | Laurent GUERBY | dh ttnn/dh1024.pem |
38 | 9 | Laurent GUERBY | |
39 | 9 | Laurent GUERBY | mode server |
40 | 9 | Laurent GUERBY | tls-server |
41 | 9 | Laurent GUERBY | |
42 | 9 | Laurent GUERBY | persist-key |
43 | 9 | Laurent GUERBY | persist-tun |
44 | 9 | Laurent GUERBY | |
45 | 9 | Laurent GUERBY | client-config-dir ccd |
46 | 9 | Laurent GUERBY | |
47 | 9 | Laurent GUERBY | client-to-client |
48 | 9 | Laurent GUERBY | comp-lzo yes |
49 | 9 | Laurent GUERBY | keepalive 10 60 |
50 | 9 | Laurent GUERBY | |
51 | 9 | Laurent GUERBY | verb 3 |
52 | 9 | Laurent GUERBY | log-append log/openvpn-tap.log |
53 | 9 | Laurent GUERBY | status status/openvpn-tap.txt |
54 | 9 | Laurent GUERBY | |
55 | 9 | Laurent GUERBY | # cat /etc/openvpn/ttnn-tap6.conf |
56 | 9 | Laurent GUERBY | dev tap6udp |
57 | 9 | Laurent GUERBY | port 11196 |
58 | 9 | Laurent GUERBY | proto udp6 |
59 | 9 | Laurent GUERBY | |
60 | 9 | Laurent GUERBY | ca ttnn/ca.crt |
61 | 9 | Laurent GUERBY | cert ttnn/h1.crt |
62 | 9 | Laurent GUERBY | key ttnn/h1.key # This file should be kept secret |
63 | 9 | Laurent GUERBY | dh ttnn/dh1024.pem |
64 | 9 | Laurent GUERBY | |
65 | 9 | Laurent GUERBY | mode server |
66 | 9 | Laurent GUERBY | tls-server |
67 | 9 | Laurent GUERBY | |
68 | 9 | Laurent GUERBY | persist-key |
69 | 9 | Laurent GUERBY | persist-tun |
70 | 9 | Laurent GUERBY | |
71 | 9 | Laurent GUERBY | client-config-dir ccd |
72 | 9 | Laurent GUERBY | |
73 | 9 | Laurent GUERBY | client-to-client |
74 | 9 | Laurent GUERBY | comp-lzo yes |
75 | 9 | Laurent GUERBY | keepalive 10 60 |
76 | 9 | Laurent GUERBY | |
77 | 9 | Laurent GUERBY | verb 3 |
78 | 9 | Laurent GUERBY | log-append log/openvpn-tap6.log |
79 | 9 | Laurent GUERBY | status status/openvpn-tap6.txt |
80 | 9 | Laurent GUERBY | |
81 | 9 | Laurent GUERBY | # cat /etc/openvpn/ttnn-tap-tcp.conf |
82 | 9 | Laurent GUERBY | dev tap0tcp |
83 | 9 | Laurent GUERBY | port 443 |
84 | 9 | Laurent GUERBY | proto tcp-server |
85 | 9 | Laurent GUERBY | |
86 | 9 | Laurent GUERBY | ca ttnn/ca.crt |
87 | 9 | Laurent GUERBY | cert ttnn/h1.crt |
88 | 9 | Laurent GUERBY | key ttnn/h1.key # This file should be kept secret |
89 | 9 | Laurent GUERBY | dh ttnn/dh1024.pem |
90 | 9 | Laurent GUERBY | |
91 | 9 | Laurent GUERBY | mode server |
92 | 9 | Laurent GUERBY | tls-server |
93 | 9 | Laurent GUERBY | |
94 | 9 | Laurent GUERBY | persist-key |
95 | 9 | Laurent GUERBY | persist-tun |
96 | 9 | Laurent GUERBY | |
97 | 9 | Laurent GUERBY | client-config-dir ccd |
98 | 9 | Laurent GUERBY | |
99 | 9 | Laurent GUERBY | client-to-client |
100 | 9 | Laurent GUERBY | comp-lzo yes |
101 | 9 | Laurent GUERBY | keepalive 10 60 |
102 | 9 | Laurent GUERBY | |
103 | 9 | Laurent GUERBY | verb 3 |
104 | 9 | Laurent GUERBY | log-append log/openvpn-tap-tcp.log |
105 | 9 | Laurent GUERBY | status status/openvpn-tap-tcp.txt |
106 | 9 | Laurent GUERBY | |
107 | 9 | Laurent GUERBY | # keys generated with id ip-X-Y-Z-T, files: |
108 | 9 | Laurent GUERBY | # ip-91-224-149-165.crt |
109 | 9 | Laurent GUERBY | # ip-91-224-149-165.csr |
110 | 9 | Laurent GUERBY | # ip-91-224-149-165.key |
111 | 9 | Laurent GUERBY | |
112 | 9 | Laurent GUERBY | # cat /etc/openvpn/ccd/ip-91-224-149-165 |
113 | 9 | Laurent GUERBY | ifconfig-push 91.224.149.165 255.255.255.0 |
114 | 9 | Laurent GUERBY | push "route-gateway 91.224.149.254" |
115 | 9 | Laurent GUERBY | push "redirect-gateway def1" |
116 | 9 | Laurent GUERBY | push "dhcp-option DNS 8.8.8.8" |
117 | 9 | Laurent GUERBY | |
118 | 9 | Laurent GUERBY | # bridge |
119 | 9 | Laurent GUERBY | brctl addbr br0 |
120 | 9 | Laurent GUERBY | brctl addif br0 eth0 |
121 | 9 | Laurent GUERBY | ip link set br0 up |
122 | 9 | Laurent GUERBY | ip link set br0 address 52:54:10:00:00:11 #force MAC to avoid MAC changes |
123 | 9 | Laurent GUERBY | |
124 | 1 | Laurent GUERBY | openvpn --mktun --dev tap0udp |
125 | 1 | Laurent GUERBY | openvpn --mktun --dev tap0tcp |
126 | 1 | Laurent GUERBY | openvpn --mktun --dev tap6udp |
127 | 1 | Laurent GUERBY | |
128 | 1 | Laurent GUERBY | brctl addif br0 tap0udp |
129 | 1 | Laurent GUERBY | ip link set tap0udp up |
130 | 1 | Laurent GUERBY | |
131 | 1 | Laurent GUERBY | brctl addif br0 tap0tcp |
132 | 1 | Laurent GUERBY | ip link set tap0tcp up |
133 | 1 | Laurent GUERBY | |
134 | 1 | Laurent GUERBY | brctl addif br0 tap6udp |
135 | 1 | Laurent GUERBY | ip link set tap6udp up |
136 | 1 | Laurent GUERBY | |
137 | 1 | Laurent GUERBY | </pre> |
138 | 1 | Laurent GUERBY | |
139 | 34 | Baptiste Jonglez | Pour ignorer les push IP et route du serveur coté client openvpn il suffit de mettre "tls-client" a la place de "client" l'option --client est un raccourci pour --tls-client --pull et --pull est ce qui accepte les directives serveur. |
140 | 10 | Laurent GUERBY | |
141 | 10 | Laurent GUERBY | h2. Client |
142 | 10 | Laurent GUERBY | |
143 | 10 | Laurent GUERBY | |
144 | 10 | Laurent GUERBY | <pre> |
145 | 10 | Laurent GUERBY | # cat /etc/openvpn/ttnn.conf |
146 | 10 | Laurent GUERBY | client |
147 | 10 | Laurent GUERBY | dev tap |
148 | 10 | Laurent GUERBY | |
149 | 10 | Laurent GUERBY | ### from outside with UDP available |
150 | 10 | Laurent GUERBY | #proto udp |
151 | 10 | Laurent GUERBY | #remote openvpn.tetaneutral.net 11195 |
152 | 10 | Laurent GUERBY | |
153 | 10 | Laurent GUERBY | ### from outside with no UDP |
154 | 10 | Laurent GUERBY | proto tcp |
155 | 10 | Laurent GUERBY | remote openvpn.tetaneutral.net 443 |
156 | 10 | Laurent GUERBY | # 91.224.149.211 443 |
157 | 10 | Laurent GUERBY | |
158 | 10 | Laurent GUERBY | # from outside using IPv6 over UDP |
159 | 10 | Laurent GUERBY | #proto udp6 |
160 | 10 | Laurent GUERBY | #remote openvpn6.tetaneutral.net 11196 |
161 | 10 | Laurent GUERBY | |
162 | 10 | Laurent GUERBY | ca ttnn/ca.crt |
163 | 10 | Laurent GUERBY | cert ttnn/ip-91-224-149-165.crt |
164 | 10 | Laurent GUERBY | key ttnn/ip-91-224-149-165.key |
165 | 10 | Laurent GUERBY | |
166 | 10 | Laurent GUERBY | persist-key |
167 | 10 | Laurent GUERBY | persist-tun |
168 | 10 | Laurent GUERBY | |
169 | 10 | Laurent GUERBY | script-security 2 |
170 | 10 | Laurent GUERBY | |
171 | 10 | Laurent GUERBY | comp-lzo yes |
172 | 10 | Laurent GUERBY | keepalive 10 60 |
173 | 10 | Laurent GUERBY | |
174 | 10 | Laurent GUERBY | verb 3 |
175 | 10 | Laurent GUERBY | log-append log/openvpn.log |
176 | 10 | Laurent GUERBY | </pre> |
177 | 10 | Laurent GUERBY | |
178 | 10 | Laurent GUERBY | h2. point a point |
179 | 10 | Laurent GUERBY | |
180 | 36 | Laurent GUERBY | |
181 | 36 | Laurent GUERBY | Version tun : |
182 | 36 | Laurent GUERBY | |
183 | 36 | Laurent GUERBY | <pre> |
184 | 38 | Laurent GUERBY | # Sur le serveur IPv4 publique A.B.C.D |
185 | 36 | Laurent GUERBY | openvpn --mktun --dev-type tun --dev tuntst |
186 | 36 | Laurent GUERBY | ip link set tuntst up |
187 | 36 | Laurent GUERBY | openvpn --dev-type tun --dev tuntst --proto udp --daemon --keepalive 10 120 --secret tst.key --port 1234 |
188 | 36 | Laurent GUERBY | |
189 | 38 | Laurent GUERBY | # Sur le client client |
190 | 36 | Laurent GUERBY | openvpn --mktun --dev-type tun --dev tuntst |
191 | 36 | Laurent GUERBY | ip link set tuntst up |
192 | 39 | Laurent GUERBY | openvpn --dev-type tun --dev tuntst --proto udp --daemon --keepalive 10 120 --secret tst.key --lport 0 --remote A.B.C.D 1234 |
193 | 36 | Laurent GUERBY | </pre> |
194 | 36 | Laurent GUERBY | |
195 | 38 | Laurent GUERBY | Pour le routage IPv6 et le NAT IPv4 sur le serveur : |
196 | 1 | Laurent GUERBY | |
197 | 1 | Laurent GUERBY | <pre> |
198 | 1 | Laurent GUERBY | echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
199 | 38 | Laurent GUERBY | ip -6 route add 2a03:7220:808X:YZ01::1/128 dev tuntst |
200 | 38 | Laurent GUERBY | |
201 | 38 | Laurent GUERBY | echo 1 > /proc/sys/net/ipv4/ip_forward |
202 | 38 | Laurent GUERBY | ip route add 10.10.10.10/32 dev tuntst |
203 | 38 | Laurent GUERBY | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
204 | 1 | Laurent GUERBY | </pre> |
205 | 1 | Laurent GUERBY | |
206 | 38 | Laurent GUERBY | Then on the client |
207 | 38 | Laurent GUERBY | |
208 | 10 | Laurent GUERBY | <pre> |
209 | 38 | Laurent GUERBY | ip -6 addr add 2a03:7220:808X:YZ01::1/128 dev tuntst |
210 | 38 | Laurent GUERBY | ip -6 route add default tuntst |
211 | 38 | Laurent GUERBY | ip addr add 10.10.10.10/32 dev tuntst |
212 | 38 | Laurent GUERBY | # TODO default route |
213 | 10 | Laurent GUERBY | </pre> |
214 | 3 | Laurent GUERBY | |
215 | 34 | Baptiste Jonglez | h2. Point-à-point avec routage d'un bloc d'IP. |
216 | 1 | Laurent GUERBY | |
217 | 1 | Laurent GUERBY | [[Partage ADSL OpenVPN]] |
218 | 1 | Laurent GUERBY | |
219 | 34 | Baptiste Jonglez | h2. Performances |
220 | 41 | julien Bresciani | h3. recherche de debit openvpn, status en mars 2021 |
221 | 41 | julien Bresciani | sur le tunnel tunukr ~120 mbits en continu via tests iperf sur nucnagios.tetaneutral.net à travers le vpn . 500 a 600 mbits/s pour le meme test hors du tunnel |
222 | 41 | julien Bresciani | sur le tunnel tunlng ~ 50 mbits en continu via tests iperf sur nucnagios.tetaneutral.net à travers le vpn . 500 a 600 mbits/s pour le meme test hors du tunnel |
223 | 41 | julien Bresciani | d autres tests (wget , speedtest-cli) corroborent ces resultats. |
224 | 34 | Baptiste Jonglez | |
225 | 41 | julien Bresciani | h3. recherche de debit, hypothese1 : tester le CPU de la machine faisant tourner openvpn |
226 | 41 | julien Bresciani | les tests de cpu montrent que dans notre cas, le lien etant non chiffré, il n y a aucun probleme de CPU sur le shuttle de tunukr , un dual celeron @1.6ghz , openvpn prends 50 pourcent d un seul CPU (ne pas oublier par contre qu 'openvpn2 est monothread. un test pour passer le gouverneur des frequences CPU en mode performance ne montre aucune variation de debit. |
227 | 41 | julien Bresciani | h3. recherche de debit, hypothese2 : tester la MTU pour fixer la taille des paquets openvpn. |
228 | 41 | julien Bresciani | tests effectués sur les liens vpn de tunukr (toulouse quartier bagatelle) et aussi tunlng (launaguet) afin de debrider le debit. |
229 | 41 | julien Bresciani | verifications que le MTU est correct sur le lien fibre supportant OPENVPN en utilisant la commande : |
230 | 41 | julien Bresciani | <pre><code class="text"> |
231 | 41 | julien Bresciani | ping -M do -s 1472 free.fr |
232 | 41 | julien Bresciani | </code></pre> |
233 | 41 | julien Bresciani | la commande envoie un ping avec une demande explicite de non fragmentation du paquet (-M do), 1472 correspond a la taille maxi que l'on peut faire passer sur un lien de MTU 1500 (1472 + 20 octets IPV4 + 8 octets ICMP = 1500). |
234 | 41 | julien Bresciani | si le ping passe vous recevez une reponse classique de la part de la commande, si le ping ne passe pas vous recevrez une reponse de ce style : |
235 | 41 | julien Bresciani | <pre><code class="text"> |
236 | 41 | julien Bresciani | local error: message too long, mtu=1492. |
237 | 41 | julien Bresciani | </code></pre>ping: |
238 | 41 | julien Bresciani | cela vous donnera une idée de la MTU de la ligne utilisée et vous permettra d utiliser les options --mssfix --fragment et toutes les options de mtu d openvpn qui a aussi une directive pour decouvrir le mtu sur le lien : --mtu-test. |
239 | 41 | julien Bresciani | les resultats des tests de mtu d openvpn sont disponibles apres lancement dans les log. |
240 | 41 | julien Bresciani | pour les sites tunlng (fibre GPON avec ONT intégré a la box bouygues et tunukr (fibre FTTH free P2P avec convertisseur externe a freebox) , nous avons pu valider que la MTU est de 1500 sur les deux sites. |
241 | 41 | julien Bresciani | dans ce cas aucune manip sur la |
242 | 41 | julien Bresciani | |
243 | 41 | julien Bresciani | h3. recherche de debit, hypothese3 : lien "bufferbloated":https://en.wikipedia.org/wiki/Bufferbloat |
244 | 41 | julien Bresciani | beaucoup de recherches sur les perfos d openvpn montrent des soucis a cause des buffers internes d openvpn, la proposition de certains est de les agrandir, d autres est de les supprimer, cela depend probablement du debit theorique des lignes sur lesquelles on evolue mais surtout de leur latence. |
245 | 41 | julien Bresciani | les tests sur tunukr montrent un passage du debit de 120 mbits/s a 250 300 mbits/s en mettant les buffers d openvpn a zero. les options d openvpn pour realiser ceci sont: @--sndbuf 0 --rcvbuf 0@ |
246 | 41 | julien Bresciani | la charge CPU n ayant pas monté, on sent que puique l'on et en mode non chiffré, on doit pouvoir faire mieux , apres avoir bougé de nombreuses options d openvpn dont @--tcp-nodelay --tcp-queue-limit 256@ dont il faudrait etudier les effets plus fins, nous avons testé d agrandir la txqueue de l'interface TUN openvpn. |
247 | 41 | julien Bresciani | la queue de transmission des paquets c est le "qlen" que l'on voit au bout dune commande @ip address@ ou @ip link@ |
248 | 41 | julien Bresciani | @tunukr: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 100@ la valeur de la queue settée par openvpn est de 100 par defaut. |
249 | 41 | julien Bresciani | pour changer la taille de la queue : @ip link set tunukr txqueuelen 1000@ |
250 | 41 | julien Bresciani | cette commande a un effet direct , pas besoin de redemarrer l'interafe ou autre (a noter d ailleurs qu openvpn modifie cette valeur lors de son demarrage meme si l'interface existe déjà). |
251 | 41 | julien Bresciani | apres avoir augmenté le txqueuelen, on arrive a des debits entre 400 et 600mbits/s soit 80 a 100 pourcent de ce qui est dispo en bande passante reelle. |
252 | 41 | julien Bresciani | |
253 | 41 | julien Bresciani | h3 recherche de debit , conclusion : |
254 | 41 | julien Bresciani | nous avons multiplié par 3-4 le debit du tunnel openvpn tunukr via cette manip et multiplié par 10 le debit sur le tunnel tunlng, sans effet de bord sur 48-72h (pas de deconnections, lags, variations brutales de debits). |
255 | 41 | julien Bresciani | les directives d openvpn les plus importantes pour atteindre ce gain sont : @--sndbuf 0 --rcvbuf 0@ et @--txqueuelen 1000@ qui permet a openvpn d ajuster au demarrage la valeur de la queue de l'interface tun à la volée (setter la queue via la commande IP et ensuite demarrer openvpn sans le @--txqueuelen 1000@ ... openvpn remettra la queue a 100 qui est la valeur par defaut d openvpn). |
256 | 34 | Baptiste Jonglez | [[Benchmark VPN]] |
257 | 34 | Baptiste Jonglez | |
258 | 1 | Laurent GUERBY | h2. Proxmox |
259 | 1 | Laurent GUERBY | |
260 | 1 | Laurent GUERBY | http://www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet |
261 | 11 | Laurent GUERBY | http://blog.developpeur-neurasthenique.fr/auto-hebergement-configurer-un-cluster-proxmox-2-sans-multicast.html |
262 | 11 | Laurent GUERBY | |
263 | 11 | Laurent GUERBY | h2. Links |
264 | 11 | Laurent GUERBY | |
265 | 34 | Baptiste Jonglez | * https://community.openvpn.net/openvpn/changeset/150fb45047c5482858b32a669de4097e66dec1c7 "Allow 'lport 0' setup for random port binding" |
266 | 34 | Baptiste Jonglez | * https://vador.fdn.fr/wiki/travaux:vpn_misc:doc#configurer_sa_machine_pour_utiliser_l_offre_vpn_de_fdn |
267 | 34 | Baptiste Jonglez | * https://wiki.ldn-fai.net/wiki/Tuto_Serveur_OpenVPN |