Projet

Général

Profil

VPN Client OpenWrt » Historique » Version 1

Version 1/16 - Suivant » - Version actuelle
Julien Vaubourg, 29/08/2020 12:32


VPN Client OpenWrt

Le routeur doit être assez puissant pour supporter les opérations de chiffrement de Wireguard (eg. TP-Link Archer C7).

Il doit avoir été préalablement flashé en OpenWrt.

Exemple de configuration

On suppose que le service Wireguard pour l'adhérent·e a été configuré comme suit côté Tetaneutral :

  • Réseau IPv6:
    2001:db8:dead:be00::/56
  • Adresse IPv4:
    203.0.113.42/32
  • Clé privée Wireguard:
    XF4wYSh/Ox9CoPl/YvFECu1DH6FQy7fLNUnur4sv9nM=

Variables et commandes à copier-coller

Se connecter en SSH au routeur pour obtenir un terminal sur OpenWrt.

Variables à personnaliser puis copier-coller dans le terminal du OpenWrt :

WG_ADH_NET6="2001:db8:dead:be00::" 
WG_ADH_ADDR4="203.0.113.42" 
WG_ADH_PRIV_KEY="XF4wYSh/Ox9CoPl/YvFECu1DH6FQy7fLNUnur4sv9nM=" 

Variables et commandes à copier-coller ensuite telles quelles dans le terminal du OpenWrt (sauf expert·e) :

# Install wireguard
opkg update
opkg install wireguard luci-proto-wireguard

# Global TTNN parameters
WG_SRV_ADDR="h10.tetaneutral.net" 
WG_SRV_PORT="51820" 
WG_SRV_PUB_KEY="DsIeOCRs/5uYdi8rLiBzRNmN4zUzKCQRqY3Sbl8NS0A=" 
WG_ADH_ADDR6_WAN="${WG_ADH_NET6/0::/1::1}/64" 
WG_ADH_ADDR6_LAN="${WG_ADH_NET6/0::/2::1}/64" 
WG_ADH_ADDR4_WAN="${WG_ADH_ADDR4}/32" 
WG_LOCAL_IF="wg0" 

# Configure firewall
uci rename firewall.@zone[0]="lan" 
uci rename firewall.@zone[1]="wan" 
uci rename firewall.@forwarding[0]="lan_wan" 
uci del_list firewall.wan.network="${WG_LOCAL_IF}" 
uci add_list firewall.wan.network="${WG_LOCAL_IF}" 
uci commit firewall
/etc/init.d/firewall restart

# Configure network
uci -q delete network.${WG_LOCAL_IF}
uci set network.${WG_LOCAL_IF}="interface" 
uci set network.${WG_LOCAL_IF}.proto="wireguard" 
uci set network.${WG_LOCAL_IF}.private_key="${WG_ADH_PRIV_KEY}" 
uci del network.lan.ip6assign
uci add_list network.lan.ip6addr="${WG_ADH_ADDR6_LAN}" 
uci add_list network.${WG_LOCAL_IF}.addresses="${WG_ADH_ADDR6_WAN}" 
uci add_list network.${WG_LOCAL_IF}.addresses="${WG_ADH_ADDR4_WAN}" 

# Add TTNN VPN peer
uci -q delete network.wgserver
uci set network.wgserver="wireguard_${WG_LOCAL_IF}" 
uci set network.wgserver.public_key="${WG_SRV_PUB_KEY}" 
uci set network.wgserver.endpoint_host="${WG_SRV_ADDR}" 
uci set network.wgserver.endpoint_port="${WG_SRV_PORT}" 
uci set network.wgserver.route_allowed_ips="1" 
uci set network.wgserver.persistent_keepalive="25" 
uci add_list network.wgserver.allowed_ips="::/0" 
uci add_list network.wgserver.allowed_ips="0.0.0.0/0" 

# Preserve default route
uci set network.wan6.metric="100" 
uci set network.wan.metric="100" 
uci commit network
/etc/init.d/network restart

Tests

Se connecter en DHCP avec un Linux sur l'un des ports LAN du routeur.

Sur l'interface filaire du PC on devrait obtenir quelque chose qui ressemble à :

# ip address
inet6 2001:db8:dead:be02:3e47:edd:f3cb:2e04/64 scope global dynamic mngtmpaddr
inet 192.168.1.201/24 brd 192.168.1.255 scope global dynamic enp0s25

# ip -6 route
default via fe80::4afe:7cde:fa1e:310b dev enp0s25 proto ra metric 1024 expires 1724sec hoplimit 64 pref medium

# ip -4 route
default via 192.168.1.1 dev enp0s25

Les IP retournées par curl devraient ressembler à :

# curl ip6.yunohost.org
2001:db8:dead:be02:3e47:edd:f3cb:2e04

# curl ip.yunohost.org
203.0.113.42

Notes sur IPv6

Avec cette configuration, le range IPv6 /56 de l'adhérent·e est réduit à un /64.

Il y a deux explications à ça :

  • 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).
  • 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).

Si l'adhérent·e souhaite utiliser son range IPv6 pour faire des sous-réseaux, libre à ellui d'ajouter des routes en utilisant ses sous-réseaux :

* 2001:db8:dead:be00::/56 -- range complet
  * 2001:db8:dead:be01::/64 -- sous-réseau utilisé pour l'interco du WAN (pourrait être réduit)
  * 2001:db8:dead:be02::/64 -- sous-réseau utilisé pour les clients du LAN
  * 2001:db8:dead:be03::/64 -- sous-réseau libre
    [...] -- il y en a 254 de libres
  * 2001:db8:dead:beff::/64 -- sous-réseau libre