A propos de la solution wireguard suggérée par NoSpam. 

J'ai lu beaucoup de bonnes choses sur wireguard. Je me suis lancé. 

La doc officielle [ https://www.wireguard.com/quickstart/ | 
https://www.wireguard.com/quickstart/ ] m'a paru trop courte et un peu floue. 
Le tuto [ 
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04
 | 
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04
 ] m'a bien aidé. Elle semble confirmer que la doc quickstart de wg est légère 
pour les débutants. 

J'ai configuré wg sur un serveur. 
J'ai ensuite configuré wg sur mon poste de travail (géré par Network-manager, 
qui génère /etc/resolv.conf ; ce qui m'a causé les problèmes attendus avec 
resolv.conf - voir plus loin). 

La configuration de wg apparaît différente et un peu plus simple qu'avec 
Openvpn (surtout quand on doit ajuster le fichier de config openvpn). 

Chaque pair/peer doit générer une paire de clef privée/publique en Base64 ; et 
il faut déclarer un pair/client sur le serveur par sa clef publique et son 
adresse IP par une commande : 
sudo wg set wg0 peer tFxQ25iWwGMgHuCFplWeXcrSnBpRcdfQSNnA4UVpXzg= allowed-ips 
10.8.0.2 

Ce serait bien de pouvoir utiliser un fichier de conf des clients. A suivre. 


PROBLEME 1/ : Résolution des noms sur mon poste de travail 
J'ai buté sur ma configuration réseau, avec un resolv.conf cassé puis réparé. 

Dans le tuto 
[ 
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04#step-9-connecting-the-wireguard-peer-to-the-tunnel
 | 
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04#step-9-connecting-the-wireguard-peer-to-the-tunnel
 ] 
il est indiqué d'installer resolvconf : 
[ 
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04#step-9-connecting-the-wireguard-peer-to-the-tunnel
 ] $ sudo apt install resolvconf 
ça m'a planté mon resolv.conf qui était géré par NM = plus d'accès à internet. 

J'ai cru trouver une solution avec [ 
https://www.tecmint.com/set-permanent-dns-nameservers-in-ubuntu-debian/ | 
https://www.tecmint.com/set-permanent-dns-nameservers-in-ubuntu-debian/ ] 
qui proposait aussi d'installer resolvconf, comme dans le tuto digitalocean sur 
wireguard : 
$ sudo apt install resolvconf 

Mais il recommandait aussi d'installer systemd-resolved et de démarrer les DEUX 
services : 
$ sudo systemctl restart resolvconf.service
$ sudo systemctl restart systemd-resolved.service 
Dans mon cas, seulement démarrer resolvconf.service rétablissait mon 
resolv.conf 
tandis que démarrer ensuite systemd-resolved.service le cassait immédiatement ! 

J'en ai conclu qu'il fallait l'un ou l'autre et ait conservé seulement 
resolvconf.service (et ai désactivé systemd-resolved) 

D'ailleurs, certains se sont posé la question : 
[ 
https://askubuntu.com/questions/1181346/systemd-resolved-and-resolvconf-is-it-ok-to-have-both-installed
 | 
https://askubuntu.com/questions/1181346/systemd-resolved-and-resolvconf-is-it-ok-to-have-both-installed
 ] 

Cet article compare resolv.conf , [ 
https://manpages.ubuntu.com/manpages/xenial/en/man1/systemd-resolve.1.html | 
systemd-resolve ] , and Avahi (mais pas resolvconf) et semble indiquer qu'il 
faut en choisir un... 
[ https://www.baeldung.com/linux/resolve-conf-systemd-avahi | 
https://www.baeldung.com/linux/resolve-conf-systemd-avahi ] 

Je rappelle que j'utilise NM sur mon poste de travail debian 11. 

Ma question : Faut-il bien choisir resolvconf ou bien systemd-resolved ? Et 
lequel privilégier ? 



PROBLEME 2/ : Finir la configuration de wireguard 
Je crois avoir fait le plus gros : le serveur tourne, le client semble lancé 
d'après le serveur et le client (sauf interface wg0 en state UNKNOWN) 
La configuration est faite pour envoyer tout le traffic dans le tunnel vpn. 
Mais impossible de faire un ping du serveur vpn malgré la configuration du 
serveur autorisant les pings entrants (sauf bêtise...) 
Et impossible de naviguer avec un navigateur ou en CLI quand j'ai démarré le 
client wg. 
Seul le ping vers le serveur avec son adresse IP publique fonctionne (ainsi, 
seule passe la connexion mosh vers le serveur où tourne wg) 

CLIENT 
$ sudo wg-quick up wg0 
[#] ip link add wg0 type wireguard 
[#] wg setconf wg0 /dev/fd/63 
[#] ip -4 address add 10.8.0.2/24 dev wg0 
[#] ip link set mtu 1420 up dev wg0 
[#] resolvconf -a tun.wg0 -m 0 -x 
[#] ip rule add table 200 from 192.168.1.153 
[#] ip route add table 200 default via 192.168.1.153 

$ ip addr show wg0 
37: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN 
group default qlen 1000 
link/none 
inet 10.8.0.2/24 scope global wg0 
valid_lft forever preferred_lft forever 

indice : state UNKNOWN 
ça indique peut-être un truc qui cloche... 


SERVEUR 
Il voit le client taper à la porte ou alors tente de taper à sa porte : 
$ sudo wg 
interface: wg0 
public key: 3e2/5eGWQvJjs7wbTdOnCwJOoB8JLDN909xYZrdlIzE= 
private key: (hidden) 
listening port: 51820 

peer: tFxQ25iWwGMgHuCFplWeXcrSnBpRcdfQSNnA4UVpXzg= 
endpoint: (IP_PUBLIQUE_CLIENT_LAN):38408 
allowed ips: 10.8.0.2/32 
transfer: 296 B received, 184 B sent 

Quand on fait sur le client : 
$ sudo wg-quick down wg0 
sur le serveur, on voit alors toujours la même chose. 
Du coup, je ne sais pas trop si le client est vraiment connecté au serveur 
vpn... 


Voilà ce que j'ai configuré sur le serveur wg : 

$ cat /etc/wireguard/wg0.conf 
[Interface] 
Address = 10.8.0.1/24 
SaveConfig = true 

PostUp = ufw route allow in on wg0 out on eth0 
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 
PostUp = iptables -A OUTPUT -p icmp -j ACCEPT 
PostUp = iptables -A INPUT -p icmp -j ACCEPT 

PreDown = ufw route delete allow in on wg0 out on eth0 
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 
PreDown = iptables -A OUTPUT -p icmp -j DROP 
PreDown = iptables -A INPUT -p icmp -j DROP 

ListenPort = 51820 
PrivateKey = (hidden) 


Voici le réglage du FW 
$ sudo ufw allow 51820/udp # wg 
$ sudo ufw allow OpenSSH # ssh 
$ sudo ufw allow 60001:60999/udp #mosh 
$ sudo ufw disable 
$ sudo ufw enable 

$ sudo ufw status 
Status: active 

To Action From 
-- ------ ---- 
51820/udp ALLOW Anywhere 
OpenSSH ALLOW Anywhere 
60001:60999/udp ALLOW Anywhere 
51820/udp (v6) ALLOW Anywhere (v6) 
OpenSSH (v6) ALLOW Anywhere (v6) 
60001:60999/udp (v6) ALLOW Anywhere (v6) 

Anywhere on eth0 ALLOW FWD Anywhere on wg0 
Anywhere (v6) on eth0 ALLOW FWD Anywhere (v6) on wg0 


J'allais envoyer ma question : 
"Voyez-vous ce que j'ai loupé ? 
Merci." 

Mais avant, je fais un dernier essai en reprenant les étapes de la vidéo de 
démo de wg : 


CLIENT 
sudo ip addr add 10.8.0.2/24 dev wg0 
sudo wg set wg0 private-key /etc/wireguard/private.key 
sudo ip link set wg0 up 
sudo wg set wg0 peer 3e2/5eGWQvJjs7wbTdOnCwJOoB8JLDN909xYZrdlIzE= allowed-ips 
10.8.0.1/32 endpoint (adr_IP_serveur):51820 

SERVEUR 
Au pif, je décide de pas faire les 'ip link add...' car l'interface wg0 est 
déjà présente... 
sudo wg set wg0 peer tFxQ25iWwGMgHuCFplWeXcrSnBpRcdfQSNnA4UVpXzg= allowed-ips 
10.8.0.2/32 endpoint (adr_IP_publique_client):51820 
# au pif pour (adr_IP_publique_client):51820, et sans routage de port sur mon 
routeur... 


ping SERVEUR (10.8.0.1/24) vers CLIENT (10.8.0.2/24) 
$ ping -c 3 10.8.0.2 
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data. 
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=6.78 ms 
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=3.91 ms 
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=4.57 ms 

--- 10.8.0.2 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 3.909/5.087/6.783/1.228 ms 

Tiens ! 

ping CLIENT (10.8.0.2/24) vers SERVEUR (10.8.0.1/24) 
$ ping -c3 10.8.0.1 
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=5.10 ms 
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=4.24 ms 
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=4.40 ms 

--- 10.8.0.1 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2002ms 
rtt min/avg/max/mdev = 4.238/4.580/5.104/0.375 ms 


Super ! 

Le réseau vpn wireguard semble opérationnel. 
J'ai bien fait de regarder les étranges instructions en vidéo sur [ 
https://www.wireguard.com/quickstart/ | https://www.wireguard.com/quickstart/ ] 
(celles en CLI sont un peu différentes et troublantes) 


Il reste quelques points à traiter sur wg : 
a/ Comment router tout le traffic de mon poste de travail dans le tunnel ? (il 
est toujours vu comme étant derrière son routeur domestique...) 
b/ Quel intérêt y a-t-il encore à utiliser Squid si wg est capable de router le 
trafic et de le relayer ? (oui, les acl...) 
c/ Pourquoi "state UNKNOWN" apparaît dans l'interface wg0 et pas "UP" ? 
d/ Comment utiliser wg côté client sans ligne de commande ? (sur le serveur, ça 
va, mais tout utilisateur ordinaire voudra une applet ou une commande appelable 
par une icône ) 
e/ comment utiliser sur le serveur une liste d'adr IP et de clefs publiques des 
clients ? 

Merci. 





De: "NoSpam" <no-s...@tootai.net> 
À: "Liste Debian" <debian-user-french@lists.debian.org> 
Envoyé: Dimanche 9 Juillet 2023 18:08:15 
Objet: Re: Tunnel openvpn - comment router tout le trafic dedans ou bien router 
simultanément le trafic d'un terminal/d'une fenêtre de navigateur/d'un process 
dans SON propre tunnel? 



Il te faut du marquage aussi via nftables ou iptables. Wireguard est 
effectivement alternatif à openvpn, mais plus rapide, plus facile à configurer, 
technologie récente proche du noyau. 
Le 09/07/2023 à 17:23, [ mailto:roger.tar...@free.fr | roger.tar...@free.fr ] a 
écrit : 



Merci. 
Je vais d'abord plancher sur iproute2 puisque c'est la norme. 
wireguard : je croyais que c'était juste un vpn alternatif à openpvn ou autre. 
A creuser pour moi. 



De: "NoSpam" [ mailto:no-s...@tootai.net | <no-s...@tootai.net> ] 
À: "Liste Debian" [ mailto:debian-user-french@lists.debian.org | 
<debian-user-french@lists.debian.org> ] 
Envoyé: Dimanche 9 Juillet 2023 17:00:14 
Objet: Re: Tunnel openvpn - comment router tout le trafic dedans ou bien router 
simultanément le trafic d'un terminal/d'une fenêtre de navigateur/d'un process 
dans SON propre tunnel? 



Cela s'appelle du routage, iproute2 installé d'office, fait cela en faisant du 
marquage. 

Sinon wireguard permet également de router via sa configuration 


Le 09/07/2023 à 14:11, [ mailto:roger.tar...@free.fr | roger.tar...@free.fr ] a 
écrit : 

BQ_BEGIN

Bonjour, 

Je peux me connecter à un serveur openvpn en CLI (sudo openvpn truc.conf) ou 
par le GUI (gnome VPN settings : clic). 

Je vois cette connexion client sur le serveur (10.0.0.x). 

$ ip addr 
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master 
br0 state UP group default qlen 1000 
link/ether 78:e7:d1:85:f0:79 brd ff:ff:ff:ff:ff:ff 

3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group 
default qlen 1000 
link/ether 92:fc:e6:5d:91:eb brd ff:ff:ff:ff:ff:ff 
inet 192.168.1.153/24 brd 192.168.1.255 scope global noprefixroute br0 
valid_lft forever preferred_lft forever 
inet6 2a02:.................................... /64 scope global dynamic 
noprefixroute 
valid_lft 604402sec preferred_lft 604402sec 
inet6 fe80::.................../64 scope link noprefixroute 
valid_lft forever preferred_lft forever 
... 
21: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
state UNKNOWN group default qlen 500 
link/none 
inet 10.0.0.2 peer 10.0.0.5/32 scope global tun0 
valid_lft forever preferred_lft forever 
inet6 fe80::................................./64 scope link stable-privacy 
valid_lft forever preferred_lft forever 


Oui, il y a un bridge car j'avais du utiliser ce mécanisme pour me tirer d'un 
problème de connexion. Avec nmcli. 
Ça fonctionne bien ainsi depuis des années. 

Malgré le tunnel, depuis un autre terminal ou depuis un navigateur ma machine a 
toujours la même adresse IP (celle publique fournie par mon opérateur), bien 
que je sois connecté au vpn. 

Je suis autonome en réseau pour des choses ordinaires . 
Là c'est plus compliqué... 


Voici le fichier .ovpn (freebox) qui bascule toutes les cnx de la machine dans 
le VPN (sans les certificats) 

client 
remote $REMOTE_IP 6504 
proto udp 
nobind 
dev-type tun 

pull 
dev tun0 
redirect-gateway 
auth-user-pass login.txt 
auth-retry interact 
fragment 1452 
mssfix 1452 
explicit-exit-notify 3 

remote-cert-tls server 
verify-x509-name "C=FR, O=Freebox SA, CN=Freebox OpenVPN server 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 

cipher AES-256-CBC 


Et celui qui ne fait pas ce que j'attends : 

dev tun 
tls-client 
remote $REMOTE_IP 1195 
pull 
proto udp 
script-security 2 
comp-lzo 
reneg-sec 0 
cipher AES-256-CBC 
auth SHA512 
auth-user-pass 


Le fichier .opvpn m'est fourni par le détenteur du serveur openvpn. 
Je ne suis pas expert en openvpn bien qu'autonome pour l'utiliser. 

Je me dis que le problème vient de ce fichier de configuration openvpn. 

Je fouille donc du côté d'openvpn "Comment router tout le trafic d'une machine 
dans un tunnel openvpn"... 

Résultat : 
Il se pourrait que ce soit la directive suivante qui permette de router tout le 
trafic dans le tunnel vpn : 
redirect-gateway 
ou 
redirect-gateway def1 
Ou 
push "redirect-gateway" 
push "redirect-gateway def1" 

Qu'en pensez-vous ? 

Quelle est la manière de faire ça proprement ? 
- sans modifier le fichier .opvpn fourni 
- en le modifiant a minima (ex : ajouter la directive redirect-gateway ) 


Je vais plus loin : 
J'ai souvent besoin de me connecter à diverses machines en CLI ou avec un 
navigateur via un tunnel. 
Je sais faire ça successivement mais pas simultanément. 

Je veux éviter de devoir gérer successivement chaque tunnel unique. 
J'ai aussi des connexions RDP actives qui doivent rester hors des tunnels. 

Comment puis-je router SIMULTANEMENT le trafic de tel terminal, ou telle 
fenêtre de navigateur dans le tunnel ssh/vpn qui LUI correspond, sans toucher 
au trafic des autres connexions (RDP, etc.) ? 
Ça c'est du vrai réseau, pas ordinaire (pour moi)...! 

Merci. 





BQ_END

Reply via email to