web-dev-qa-db-fra.com

Impossible de configurer le VPN WireGuard

Mon objectif est de créer un VPN afin

  1. Les clients ont des adresses IP statiques.
  2. Les clients sont capables de communiquer entre eux et le serveur,
  3. Les clients peuvent atteindre Internet mondial via le VPN.
  4. De plus, je voudrais configurer DNS et les noms de domaine privés (travailler avec NGinx).

Voici la configuration du serveur:

[Interface]
Address = 10.0.0.1/24
ListenPort = 5555
PrivateKey = xxxxx

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0

Et configuration du client:

[Interface]
PrivateKey = xxxxx
ListenPort = 5555
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server ip>:5555

Mais quand j'essaie de charger la configuration de serveur wg setconf wg0 /etc/wireguard/wg0.conf Je reçois cette erreur:

Line unrecognized: `Address=10.0.0.1/24'
Configuration parsing error

Ainsi j'ai commenté cette ligne. Mais il fait probablement que WG choisit des adresses IP aléatoires pour le serveur et les clients.

Pour faire du travail métallurgique, j'ai également couru ces commandes:

ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.1/24
ip link set up dev wg0

Après tout, wg commandes fournit la sortie suivante:

interface: wg0
  public key: xxxxx
  private key: (hidden)
  listening port: 5555

peer: xxxxx
  endpoint: <my IP address>:6228
  allowed ips: 0.0.0.0/0
  latest handshake: 2 minutes, 11 seconds ago
  transfer: 26.02 KiB received, 248 B sent

Du client (qui est MacOS avec interface graphique métallique), je suis capable de se connecter, mais:

  • Je n'ai aucune connexion Internet. Je ne peux même pas ping le serveur par l'adresse IP globale, bien que je puisse avec le privé, 10.0.0.1.
  • Je suis capable de vous connecter à VPN même si je modifie le port dans la configuration du client. Je pense que cela signifie que cela ne se connecte pas vraiment.

Alors, comment puis-je atteindre mes objectifs? Et qu'est-ce qui ne va pas avec mes configs ??

Ps. Ni iptables _ ni pare-feu sont installés sur le serveur, il ne peut donc pas être un problème. En outre, j'ai spécifié net.ipv4.ip_forward=1 & net.ipv6.conf.all.forwarding=1 dans le /etc/sysctl.conf.
Versions logicielles. Os est Ubuntu 18.04.4 LTS, Noyau: 4.15.0-20-generic, WG: wireguard-tools v1.0.20200206.


Mettre à jour

J'ai supprimé Address de la configuration du serveur et définissez AllowedIPs = 10.0.0.2/24 Dans le client, je me suis enfin connecté au Nginx du serveur du client par IP privée et en mesure d'atteindre Internet (le trafic CoZ va en dehors de VPN).

Mais si je mets AllowedIPs = 0.0.0.0/0 Sur le client, je n'ai pas d'accès à Internet, mais peut toujours atteindre le serveur par adresse IP de VPN 10.0.0.1. J'ai essayé de résoudre avec ifconfig wg0 broadcast/multicast, mais n'avait aucun succès. Maintenant la commande ip address show wg0 fournit la sortie suivante:

4: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.10.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet 10.10.10.1 peer 10.10.10.2/32 scope global wg0
       valid_lft forever preferred_lft forever

De plus, je ne peux pas accéder à un client d'un autre, je pense que c'est le même problème. Comment puis-je corriger des configurations métalliques ou des paramètres réseau de serveur pour résoudre le problème?

2
AivanF.

Eh bien, dans plusieurs jours, nuits et serveurs tués, j'ai résolu tous les problèmes moi-même :)

  • Premièrement, je voudrais mentionner que wg et wg-quick Utilitaires traite les fichiers de configuration différemment. Donc, mon wg setconf wg0 /etc/wireguard/wg0.conf n'a pas fonctionné de manière attendue, et je suppose qu'il utilise un ancien format de configuration. Maintenant j'utilise wg-quick via systemctl.

  • Deuxièmement, mon ajout de net.ipv4.ip_forward=1 au fichier /etc/sysctl.conf n'a pas fonctionné même si j'ai appelé systemctl daemon-reload ; systemctl restart systemd-networkd. J'ai dû lier la configuration avec le noyau en utilisant sysctl -p /etc/sysctl.conf commande. Cela permet aux pairs de communiquer entre eux et d'atteindre Internet via VPN.

  • Il est bon de mentionner que pour tous les notes Address Il est préférable d'utiliser un masque de sous-réseau de 32 bits, ce qui signifie une adresse IP exacte, pas une gamme.

  • De plus, j'ai configuré DNS personnalisé avec BIND9 pour créer votre propre domaine dans le réseau. Et NGinx avec l'adresse IP de l'expéditeur vérifiant uniquement l'accès aux clients de VPN uniquement.

Pour l'instant, mes configs sont les suivants.

serveur

[Interface]
Address = 10.0.0.1/32
ListenPort = 5555
PrivateKey = ___some_private_key___

# The following is needed only if you have `ufw` installed
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.1/32

Client

[Interface]
PrivateKey = ___some_private_key___
ListenPort = 5555
Address = 10.0.0.1/32

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.0/24
Endpoint = ___some_ip_address__:5555
1
AivanF.