VPN Client OpenWrt » Historique » Version 4
Julien Vaubourg, 29/08/2020 16:54
1 | 1 | Julien Vaubourg | h1. VPN Client OpenWrt |
---|---|---|---|
2 | 1 | Julien Vaubourg | |
3 | 4 | Julien Vaubourg | h2. Introduction |
4 | 4 | Julien Vaubourg | |
5 | 1 | Julien Vaubourg | Le routeur doit être assez puissant pour supporter les opérations de chiffrement de Wireguard (eg. TP-Link Archer C7). |
6 | 1 | Julien Vaubourg | |
7 | 1 | Julien Vaubourg | Il doit avoir été préalablement flashé en OpenWrt. |
8 | 1 | Julien Vaubourg | |
9 | 2 | Julien Vaubourg | Doc testée avec OpenWrt 19.07.3. |
10 | 2 | Julien Vaubourg | |
11 | 1 | Julien Vaubourg | h2. Exemple de configuration |
12 | 1 | Julien Vaubourg | |
13 | 2 | Julien Vaubourg | On suppose que votre service Wireguard a été configuré comme suit côté Tetaneutral : |
14 | 1 | Julien Vaubourg | |
15 | 1 | Julien Vaubourg | * Réseau IPv6: <pre>2001:db8:dead:be00::/56</pre> |
16 | 1 | Julien Vaubourg | * Adresse IPv4: <pre>203.0.113.42/32</pre> |
17 | 1 | Julien Vaubourg | * Clé privée Wireguard: <pre>XF4wYSh/Ox9CoPl/YvFECu1DH6FQy7fLNUnur4sv9nM=</pre> |
18 | 1 | Julien Vaubourg | |
19 | 1 | Julien Vaubourg | h2. Variables et commandes à copier-coller |
20 | 1 | Julien Vaubourg | |
21 | 1 | Julien Vaubourg | Se connecter en SSH au routeur pour obtenir un terminal sur OpenWrt. |
22 | 1 | Julien Vaubourg | |
23 | 1 | Julien Vaubourg | Variables *à personnaliser* puis copier-coller dans le terminal du OpenWrt : |
24 | 1 | Julien Vaubourg | |
25 | 1 | Julien Vaubourg | <pre> |
26 | 1 | Julien Vaubourg | WG_ADH_NET6="2001:db8:dead:be00::" |
27 | 1 | Julien Vaubourg | WG_ADH_ADDR4="203.0.113.42" |
28 | 1 | Julien Vaubourg | WG_ADH_PRIV_KEY="XF4wYSh/Ox9CoPl/YvFECu1DH6FQy7fLNUnur4sv9nM=" |
29 | 1 | Julien Vaubourg | </pre> |
30 | 1 | Julien Vaubourg | |
31 | 1 | Julien Vaubourg | Variables et commandes à copier-coller ensuite *telles quelles* dans le terminal du OpenWrt (sauf expert·e) : |
32 | 1 | Julien Vaubourg | |
33 | 1 | Julien Vaubourg | <pre> |
34 | 2 | Julien Vaubourg | # Change timezone |
35 | 2 | Julien Vaubourg | uci set system.@system[0].zonename='Europe/Brussels' |
36 | 2 | Julien Vaubourg | uci set system.@system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3' |
37 | 2 | Julien Vaubourg | uci set system.ntp.enable_server="1" |
38 | 2 | Julien Vaubourg | uci commit system |
39 | 2 | Julien Vaubourg | /etc/init.d/sysntpd restart |
40 | 2 | Julien Vaubourg | |
41 | 1 | Julien Vaubourg | # Install wireguard |
42 | 1 | Julien Vaubourg | opkg update |
43 | 1 | Julien Vaubourg | opkg install wireguard luci-proto-wireguard |
44 | 1 | Julien Vaubourg | |
45 | 1 | Julien Vaubourg | # Global TTNN parameters |
46 | 1 | Julien Vaubourg | WG_SRV_ADDR="h10.tetaneutral.net" |
47 | 1 | Julien Vaubourg | WG_SRV_PORT="51820" |
48 | 1 | Julien Vaubourg | WG_SRV_PUB_KEY="DsIeOCRs/5uYdi8rLiBzRNmN4zUzKCQRqY3Sbl8NS0A=" |
49 | 1 | Julien Vaubourg | WG_ADH_ADDR6_WAN="${WG_ADH_NET6/0::/1::1}/64" |
50 | 1 | Julien Vaubourg | WG_ADH_ADDR6_LAN="${WG_ADH_NET6/0::/2::1}/64" |
51 | 1 | Julien Vaubourg | WG_ADH_ADDR4_WAN="${WG_ADH_ADDR4}/32" |
52 | 1 | Julien Vaubourg | WG_LOCAL_IF="wg0" |
53 | 1 | Julien Vaubourg | |
54 | 1 | Julien Vaubourg | # Configure firewall |
55 | 1 | Julien Vaubourg | uci rename firewall.@zone[0]="lan" |
56 | 1 | Julien Vaubourg | uci rename firewall.@zone[1]="wan" |
57 | 1 | Julien Vaubourg | uci rename firewall.@forwarding[0]="lan_wan" |
58 | 1 | Julien Vaubourg | uci del_list firewall.wan.network="${WG_LOCAL_IF}" |
59 | 1 | Julien Vaubourg | uci add_list firewall.wan.network="${WG_LOCAL_IF}" |
60 | 1 | Julien Vaubourg | uci commit firewall |
61 | 1 | Julien Vaubourg | /etc/init.d/firewall restart |
62 | 1 | Julien Vaubourg | |
63 | 1 | Julien Vaubourg | # Configure network |
64 | 1 | Julien Vaubourg | uci -q delete network.${WG_LOCAL_IF} |
65 | 1 | Julien Vaubourg | uci set network.${WG_LOCAL_IF}="interface" |
66 | 1 | Julien Vaubourg | uci set network.${WG_LOCAL_IF}.proto="wireguard" |
67 | 1 | Julien Vaubourg | uci set network.${WG_LOCAL_IF}.private_key="${WG_ADH_PRIV_KEY}" |
68 | 1 | Julien Vaubourg | uci del network.lan.ip6assign |
69 | 1 | Julien Vaubourg | uci add_list network.lan.ip6addr="${WG_ADH_ADDR6_LAN}" |
70 | 1 | Julien Vaubourg | uci add_list network.${WG_LOCAL_IF}.addresses="${WG_ADH_ADDR6_WAN}" |
71 | 1 | Julien Vaubourg | uci add_list network.${WG_LOCAL_IF}.addresses="${WG_ADH_ADDR4_WAN}" |
72 | 1 | Julien Vaubourg | |
73 | 1 | Julien Vaubourg | # Add TTNN VPN peer |
74 | 1 | Julien Vaubourg | uci -q delete network.wgserver |
75 | 1 | Julien Vaubourg | uci set network.wgserver="wireguard_${WG_LOCAL_IF}" |
76 | 1 | Julien Vaubourg | uci set network.wgserver.public_key="${WG_SRV_PUB_KEY}" |
77 | 1 | Julien Vaubourg | uci set network.wgserver.endpoint_host="${WG_SRV_ADDR}" |
78 | 1 | Julien Vaubourg | uci set network.wgserver.endpoint_port="${WG_SRV_PORT}" |
79 | 1 | Julien Vaubourg | uci set network.wgserver.route_allowed_ips="1" |
80 | 1 | Julien Vaubourg | uci set network.wgserver.persistent_keepalive="25" |
81 | 1 | Julien Vaubourg | uci add_list network.wgserver.allowed_ips="::/0" |
82 | 1 | Julien Vaubourg | uci add_list network.wgserver.allowed_ips="0.0.0.0/0" |
83 | 1 | Julien Vaubourg | |
84 | 1 | Julien Vaubourg | # Preserve default route |
85 | 1 | Julien Vaubourg | uci set network.wan6.metric="100" |
86 | 1 | Julien Vaubourg | uci set network.wan.metric="100" |
87 | 1 | Julien Vaubourg | uci commit network |
88 | 1 | Julien Vaubourg | /etc/init.d/network restart |
89 | 1 | Julien Vaubourg | </pre> |
90 | 1 | Julien Vaubourg | |
91 | 1 | Julien Vaubourg | h2. Tests |
92 | 1 | Julien Vaubourg | |
93 | 1 | Julien Vaubourg | Se connecter en DHCP avec un Linux sur l'un des ports LAN du routeur. |
94 | 1 | Julien Vaubourg | |
95 | 1 | Julien Vaubourg | Sur l'interface filaire du PC on devrait obtenir quelque chose qui ressemble à : |
96 | 1 | Julien Vaubourg | |
97 | 1 | Julien Vaubourg | <pre> |
98 | 1 | Julien Vaubourg | # ip address |
99 | 1 | Julien Vaubourg | inet6 2001:db8:dead:be02:3e47:edd:f3cb:2e04/64 scope global dynamic mngtmpaddr |
100 | 1 | Julien Vaubourg | inet 192.168.1.201/24 brd 192.168.1.255 scope global dynamic enp0s25 |
101 | 1 | Julien Vaubourg | |
102 | 1 | Julien Vaubourg | # ip -6 route |
103 | 1 | Julien Vaubourg | default via fe80::4afe:7cde:fa1e:310b dev enp0s25 proto ra metric 1024 expires 1724sec hoplimit 64 pref medium |
104 | 1 | Julien Vaubourg | |
105 | 1 | Julien Vaubourg | # ip -4 route |
106 | 1 | Julien Vaubourg | default via 192.168.1.1 dev enp0s25 |
107 | 1 | Julien Vaubourg | </pre> |
108 | 1 | Julien Vaubourg | |
109 | 1 | Julien Vaubourg | Les IP retournées par curl devraient ressembler à : |
110 | 1 | Julien Vaubourg | |
111 | 1 | Julien Vaubourg | <pre> |
112 | 1 | Julien Vaubourg | # curl ip6.yunohost.org |
113 | 1 | Julien Vaubourg | 2001:db8:dead:be02:3e47:edd:f3cb:2e04 |
114 | 1 | Julien Vaubourg | |
115 | 1 | Julien Vaubourg | # curl ip.yunohost.org |
116 | 1 | Julien Vaubourg | 203.0.113.42 |
117 | 1 | Julien Vaubourg | </pre> |
118 | 1 | Julien Vaubourg | |
119 | 1 | Julien Vaubourg | h2. Notes sur IPv6 |
120 | 1 | Julien Vaubourg | |
121 | 2 | Julien Vaubourg | Avec cette configuration, le range IPv6 /56 fournit par Tetaneutral est réduit à un /64. |
122 | 1 | Julien Vaubourg | |
123 | 1 | Julien Vaubourg | Il y a deux explications à ça : |
124 | 1 | Julien Vaubourg | |
125 | 1 | Julien Vaubourg | * Tetaneutral ne fournit pas de range d'interco IPv6, il est donc nécessaire d'utiliser une partie du /56 pour relier le routeur à l'infra de l'asso (port WAN). |
126 | 1 | Julien Vaubourg | * Sur le port LAN il est préférable d'avoir un /64 pour satisfaire les pré-requis de l'autoconfiguration stateless (attribution des IP en fonction des adresses MAC). |
127 | 1 | Julien Vaubourg | |
128 | 2 | Julien Vaubourg | Si vous souhaitez utiliser le range IPv6 pour faire des sous-réseaux, libre à vous d'ajouter des routes en utilisant ses sous-réseaux, par exemple avec : |
129 | 1 | Julien Vaubourg | |
130 | 1 | Julien Vaubourg | <pre> |
131 | 1 | Julien Vaubourg | * 2001:db8:dead:be00::/56 -- range complet |
132 | 1 | Julien Vaubourg | * 2001:db8:dead:be01::/64 -- sous-réseau utilisé pour l'interco du WAN (pourrait être réduit) |
133 | 1 | Julien Vaubourg | * 2001:db8:dead:be02::/64 -- sous-réseau utilisé pour les clients du LAN |
134 | 1 | Julien Vaubourg | * 2001:db8:dead:be03::/64 -- sous-réseau libre |
135 | 1 | Julien Vaubourg | [...] -- il y en a 254 de libres |
136 | 1 | Julien Vaubourg | * 2001:db8:dead:beff::/64 -- sous-réseau libre |
137 | 3 | Julien Vaubourg | </pre> |
138 | 2 | Julien Vaubourg | |
139 | 2 | Julien Vaubourg | h2. Débits |
140 | 1 | Julien Vaubourg | |
141 | 4 | Julien Vaubourg | Les tests de débit (genre avec _speedtest.net_) sont toujours un peu aléatoires, mais il n'est pas étonnant que le VPN écrase un peu les débits. Cependant, le CPU ne semble pas particulièrement sollicité durant le test... |
142 | 2 | Julien Vaubourg | |
143 | 4 | Julien Vaubourg | Tests de débit avec un TP-Link Archer C7 : |
144 | 2 | Julien Vaubourg | |
145 | 2 | Julien Vaubourg | * [Sans VPN] Down: 60 Mbps / Up: 40 Mbps |
146 | 2 | Julien Vaubourg | * [Avec VPN] Down: 25 Mbps / Up: 16 Mbps |