De mémoire non. Comment tu fait ton test ?
Du coup cette partie semble fonctionner,
Donc pour chaque client je dois faire un bloque par ip ?
Sur mon vpn actuelle j’ai ça comme règle tout passe.
PostUp:iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
postDown: iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE
Ce genre de règle convient pour du trafique internet simple sans routage de port nat. Mais il ne dit pas par exemple au serveur que faire de ce qui arrive en http, sur quel client l’envoyer et inversement ce qui arrive d’un client (par exemple en smtp sur le port 25) où il doit l’envoyer; en l’occurrence vers l’extérieur.
Du coup dans le même exemple une boucle est possible à faire pour éviter de C/C le même bloque x FOIS
for ip in 10 50
DO
iptables -t nat -A POSTROUTING -s 10.6.0.$ip -j SNAT --to [insert public IPV4 of the VPS];
iptables -A FORWARD -s 10.0.6.$ip -j ACCEPT;
ip6tables -t nat -A POSTROUTING -s fd42:42:42::$ip -j SNAT --to [insert public IPV6 of the VPS];
ip6tables -A FORWARD -s fd42:42:42::$ip -j ACCEPT;
DONE
for ip in 10 50
DO
iptables -t nat -D POSTROUTING -s 10.6.0.$ip -j SNAT --to [insert public IPV4 of the VPS];
iptables -D FORWARD -s 10.0.6.$ip -j ACCEPT;
ip6tables -t nat -D POSTROUTING -s fd42:42:42::$ip -j SNAT --to [insert public IPV6 of the VPS];
ip6tables -D FORWARD -s fd42:42:42::$ip -j ACCEPT;
DONE
???
Comme outil pour générer des clients
https://www.wireguardconfig.com/ (ip V6) j’ai pas tester celui-ci
Ou bcp plus vieux
GitHub - brittson/wireguard_config_maker: Simple Java program to create wireguard client config files (pas ip V6) Déjà testé fonctionne bien
Oui carrément !
Bon ça fonctionne avec la boucle !!
Bonjour,
avec mes maigres compétences, j’ai fais un script qui facilite la création de PEER.
Si ça peut aider.
Je vais rajouter la création des QR par la même occasion
Je ne suis pas un expert donc si des corrections sont à faire… Je suis preneur merci.
#!/bin/bash
#Pour https://forum.yunohost.org/t/homemade-wireguard-vpn-on-a-vps-server/15662
# check if root
#https://github.com/Tontonjo/proxmox_toolbox/blob/main/proxmox_toolbox.sh line73
if [[ $(id -u) -ne 0 ]] ; then echo "- Please run as root / sudo" ; exit 1 ; fi
#quelques variables
RANGE_IPV6=fd42:42:42::
RANGE_IP=10.06.0.
DNS_IP=1.1.1.1
PATH_CLIENT_DIR=clients/
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo ' Ajouter un PEER '
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo 'Nom du peer'
read 'peer_name'
echo 'IP ( les derniers chiffres) il faut être sur du chiffre et que celui-ci ne soit pas encore attribué'
read 'peer_ip'
#On créé un dossier client
if [ -d "/etc/wireguard/clients/" ]; then
echo "Dossier client inconnu"
else
mkdir -m 700 "/etc/wireguard/${PATH_CLIENT_DIR}"
fi
#https://docs.pi-hole.net/guides/vpn/wireguard/client/
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo ' Ajouter du client (wg0.conf) '
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
umask 077
#Création d'un dossier pour le nouveau client
if [ -d "/etc/wireguard/clients/${peer_name}" ]; then
echo "Dossier peer "${peer_name}" inconnu"
else
mkdir -m 700 /etc/wireguard/"${PATH_CLIENT_DIR}${peer_name}"
fi
PATH_CLIENT_DIR_DIR="/etc/wireguard/${PATH_CLIENT_DIR}${peer_name}/"
wg genkey | tee "${PATH_CLIENT_DIR_DIR}${peer_name}.key" | wg pubkey > "${PATH_CLIENT_DIR_DIR}${peer_name}.pub"
wg genpsk > "${PATH_CLIENT_DIR_DIR}${peer_name}.psk"
#echo "#############################################" >> /etc/wireguard/wg0.conf
echo "" >> /etc/wireguard/wg0.conf
echo "#"${peer_name}" " >> /etc/wireguard/wg0.conf
echo "[Peer]" >> /etc/wireguard/wg0.conf
echo "PublicKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}".pub)" >> /etc/wireguard/wg0.conf
echo "PresharedKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}".psk)" >> /etc/wireguard/wg0.conf
echo "AllowedIPs = "${RANGE_IP}${peer_ip}"/32, "${RANGE_IPV6}${peer_ip}"/128" >> /etc/wireguard/wg0.conf
echo "" >> /etc/wireguard/wg0.conf
#echo "#############################################" >> /etc/wireguard/wg0.conf
echo "[Interface]" > "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "Address = "${RANGE_IP}${peer_ip}"/32, "${RANGE_IPV6}${peer_ip}"/128" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "DNS = $DNS_IP" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PrivateKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}.key")" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PublicKey = $(cat privatekey.pub)" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PresharedKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}.psk")" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo " "${peer_name} Ajouté " "
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
Ajout de l’installation de qrencode
Ajout de la génération et sauvegarde de qrcode
il manquait la partie peer dans la création du fichier user_peer.conf
Qrcode testé dans l’importation de wireguard et ça passe.
Le script relance à la fin WG0 pour que la création soit prise en compte
Rajout des variables server_port et server_adress
#!/bin/bash
#Pour https://forum.yunohost.org/t/homemade-wireguard-vpn-on-a-vps-server/15662
# check if root
#https://github.com/Tontonjo/proxmox_toolbox/blob/main/proxmox_toolbox.sh line73
if [[ $(id -u) -ne 0 ]] ; then echo "- Please run as root / sudo" ; exit 1 ; fi
# Installation de qrendcode pour le generer les QRCODEssss
if [ $(dpkg-query -W -f='${Status}' qrencode 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
apt-get install qrencode -y
echo "Merci de relancer le script"
exit
fi
#quelques variables
RANGE_IPV6="fd42:42:42::"
RANGE_IP="10.6.0."
DNS_IP="80.67.169.12, 2001:910:800::12"
PATH_CLIENT_DIR="peer/"
SERVER_ADRESS="mon_domaine.fr" #IP ou DOMAINE
SERVER_PORT="51820"
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo ' Ajouter un PEER '
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo 'Nom du peer'
read 'peer_name'
echo 'IP ( les derniers chiffres) il faut être sur du chiffre et que celui-ci ne soit pas encore attribué'
read 'peer_ip'
#On créé un dossier client
if [ -d "/etc/wireguard/peer/" ]; then
echo "Dossier peer inconnu"
else
echo "Création du dossier peer"
mkdir -m 700 "/etc/wireguard/${PATH_CLIENT_DIR}"
fi
#Basé sur https://docs.pi-hole.net/guides/vpn/wireguard/client/
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo ' Ajout du peer (wg0.conf) '
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
umask 077
#Création d'un dossier pour le nouveau client
if [ -d "/etc/wireguard/peer/${peer_name}" ]; then
echo "Dossier "${peer_name}" inconnu"
else
echo "Création du dossier ${peer_name}"
mkdir -m 700 /etc/wireguard/"${PATH_CLIENT_DIR}${peer_name}"
fi
PATH_CLIENT_DIR_DIR="/etc/wireguard/${PATH_CLIENT_DIR}${peer_name}/"
wg genkey | tee "${PATH_CLIENT_DIR_DIR}${peer_name}.key" | wg pubkey > "${PATH_CLIENT_DIR_DIR}${peer_name}.pub"
wg genpsk > "${PATH_CLIENT_DIR_DIR}${peer_name}.psk"
echo "Mise à jour du fichier WG0.................... OK"
#echo "#############################################" >> /etc/wireguard/wg0.conf
echo "" >> /etc/wireguard/wg0.conf
echo "#"${peer_name}" " >> /etc/wireguard/wg0.conf
echo "[Peer]" >> /etc/wireguard/wg0.conf
echo "PublicKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}".pub)" >> /etc/wireguard/wg0.conf
echo "PresharedKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}".psk)" >> /etc/wireguard/wg0.conf
echo "AllowedIPs = "${RANGE_IP}${peer_ip}"/32, "${RANGE_IPV6}${peer_ip}"/128" >> /etc/wireguard/wg0.conf
echo "" >> /etc/wireguard/wg0.conf
#echo "#############################################" >> /etc/wireguard/wg0.conf
sleep 2
echo "Création du fichier peer.................... OK"
#Interface section
echo "[Interface]" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "Address = "${RANGE_IP}${peer_ip}"/32, "${RANGE_IPV6}${peer_ip}"/128" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "DNS = $DNS_IP" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PrivateKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}.key")" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
#Peer section
echo "[Peer]" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "AllowedIPs = 0.0.0.0/0, ::0/0" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "Endpoint = "${SERVER_ADRESS}":"${SERVER_PORT} >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PersistentKeepalive = 25" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PublicKey = $(cat publickey.pub)" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "PresharedKey = $(cat "${PATH_CLIENT_DIR_DIR}${peer_name}.psk")" >> "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
echo "Sauvegarde du QRCode.................... OK"
qrencode -m 10 -o "${PATH_CLIENT_DIR_DIR}${peer_name}.png" "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
sleep 2
qrencode -t ansiutf8 -r "${PATH_CLIENT_DIR_DIR}${peer_name}.conf"
sleep 2
echo "Interface WG0 relancé"
wg-quick down wg0 && wg-quick up wg0
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
echo " "${peer_name} Ajouté " "
echo '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
Il y a pas un soucis avec les ips?
iptables -t nat -D POSTROUTING -s *10.6.0.X* -j SNAT --to [insert public IPV4 of the VPS];
iptables -D FORWARD -s *10.0.6.X* -j ACCEPT;
Si en effet, c’est pas bien les copier/coller ! Corrigé !
Bonjour, petite question est-ce que d’utiliser ce resolver de DNS est plus intéressant que d’avoir pihole/unbound?
Merci.
C’est un question complexe qui n’admet pas de réponse unique. Tout d’abord sache que rien ne t’empêche de faire tourner unbound sur le VPS et de remplacer par DNS = 127.0.0.1
.
Pour revenir à ta question unbound permet d’effectuer la résolution DNS soit même, c’est donc si il est bien configuré la garantie d’une résolution non biaisée (pas de DNS menteur) et anonyme (pas d’appel à un service externe). En outre, le résolveur étant en local, on peut difficilement faire plus rapide.
Concernant un service DNS externe, je dirai qu’il y a une question de confiance à avoir vis à vis du fouisseur. Des fournisseurs éthiques comme la FFDN s’engagent à lutter contre les DNS menteurs, les collectes de données à des fins discutables, etc. D’autres n’ont pas cet réserve. Enfin en fonction des pays d’implantation, les fournisseurs se doivent de se conformer aux lois en rigueur qui dans certains cas les obliges à mentir (lutte contre le piratage, droit d’auteur, etc). Certains fournisseurs proposent des services qui mettent en avant la sécurité avec des listes noires d’ips connues pour être utiliser pour du hack, extorsion, etc… Cela dit de telles listes peuvent aussi être implémentées au niveau d’unbound. C’est d’ailleurs ce que fait PiHole. Un autre point important est la transparence des données qui circule par défaut en clair entre ton serveur et le résolveur DNS. D’où l’intérêt d’utiliser des DNS over https/tls pour éviter d’afficher à son ISP toutes ses requêtes.
Concernant PiHole cela n’est pas un résolveur DNS à proprement parlé mais plus un filtre qui repose sur un résolveur récursif (local ou distant) avec les questions inhérentes.
Enfin il convient de faire remarquer que si tout le monde utilise unbound ou équivalent cela tend à augmenter la charge sur les serveurs racines et cela n’est par forcement souhaitable en termes de performance. Sur ceux je te laisse faire ton choix !
Merci pour l’explication , mais du coup je sais pas quoi faire
Coucou j’aurai une question pour le LAN
Je souhaiterai donner accès à une seul adresse sur le LAN via le VPN, les règles IPTABLE ça serait quoi?
Merci.
C’est une histoire de masque de réseau sur les interfaces. Si je dis pas de bêtises mais je suis pas expert sur la question tu dois remplacer dans le fichier conf du client
Address = 10.6.0.2/24, fd42:42:42::2/64
par
Address = 10.6.0.2/32, fd42:42:42::2/128
Merci mais déjà essayé. Le problème est que l’on peut faire ce que l’on veut côté client si côté serveur c’est pas verrouillé, on est d’accord ?
Sinon
Seconde méthode : complexe, mais plus sécurisée
Notre solution préférée nécessite de modifier le fichier de configuration du serveur VPN WireGuard. Ici, nous allons modifier le fichier en ligne de commande sur notre Raspberry Pi sous Linux (installer facilement WireGuard sur un Raspberry Pi) :
sudo nano /etc/wireguard/wg0.conf
En dessous du numéro port, ligne 7 par exemple, tapez les commandes suivantes :
PostUp = iptables -I FORWARD -i wg0 -d 192.168.1.0/24 -j REJECTPostUp = iptables -I FORWARD -i wg0 -d 192.168.1.100/32,192.168.1.254/32 -j ACCEPT
PostUP permet d’envoyer une commande au démarrage du service VPN WireGuard. Notre première ligne rejette (REJECT) l’accès à tout le réseau depuis WireGuard. La seconde ligne (ACCEPT) accepte une liste d’adresse IP (ici les deux adresses 192.168.1.100 et 192.168.1.254). Mais ce n’est pas fini…
En effet, nous allons ajouter ces deux autres lignes :
PostDown = iptables -D FORWARD -i wg0 -d 192.168.1.100/32,192.168.1.254/32 -j ACCEPTPostDown = iptables -D FORWARD -i wg0 -d 192.168.1.0/24 -j REJECT
Ces dernières vont supprimer les règles précédentes lorsque le service WireGuard s’arrêtera. Elles ne sont pas obligatoires, mais elle apporte une certaine cohérence et évite quelques erreurs. Pour la prise en compte des nouvelles règles, vous pouvez redémarrer votre Raspberry Pi ou tout simplement taper les commandes ci-dessous:
wg-quick down wg0
puis
wg-quick up wg0
À noter que les lignes PostUp/PostDown peuvent recevoir un fichier .sh (juste après le signe =). Cela permettra d’indiquer plusieurs règles iptables.
Je t’embête mais merci
Je viens de configurer Yunohost avec ce VPN est ça fonctionne + des clients
Par contre pour mon autre VPN à mon domicile je n’arrive pas à bloquer le full access au réseau local.
Mais pour l’instant c’est niquel.
Bonjour a tous
Ci-joint le script pour restreindre l’accès au réseaux local à tous et donner accès a certaines ip l’accès à certaines ip sur le réseau local.
J’ai gardé la même idée que l"OP
PostUp.sh
for ip in 4 5 6 7 8 9 10 11 #A changer en fonction des ip's utilisées.
do
iptables -I FORWARD -s 10.10.1.$ip -i wg0 -d 10.0.0.0/8 -j REJECT # On rejet l'accès à tous ce réseau
iptables -I FORWARD -s 10.10.1.$ip -i wg0 -p tcp --dport 5555 -d 10.10.20.5/32 -j ACCEPT # Et on donne accès a une ip et un port bien précis.
done
PostDown.sh
Et bien c’est l’inverse
for ip in 4 5 6 7 8 9 10 11 A changer en fonction des ip's utilisées.
do
iptables -I FORWARD -s 10.10.1.$ip -i wg0 -p tcp --dport 5555 -d 10.10.20.5/32 -j ACCEPT
iptables -I FORWARD -s 10.10.1.$ip -i wg0 -d 10.0.0.0/8 -j REJECT
done
J’ai rajouté une purge de l’iptable, mais je ne sais pas si c’est pertinent
En fin de PostDown.sh
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X