Skip to content
README.md 5,8 KB
Newer Older
Thorsten Eggeling's avatar
Thorsten Eggeling committed
# wireguard
Wireguard configuration examples
Thorsten Eggeling's avatar
Thorsten Eggeling committed

Thorsten Eggeling's avatar
Thorsten Eggeling committed
Altenativ können Sie das Script wireguard-install.sh verwenden (Quelle: https://github.com/angristan/wireguard-install). Es Installiert die nötige Software und erstellt die Konfigurationsdateien.
Thorsten Eggeling's avatar
Thorsten Eggeling committed

Thorsten Eggeling's avatar
Thorsten Eggeling committed
## Firewall / Portfreigaben
Wenn der Wireguard-Server von außen über das Internet erreichbar sein soll, verwenden Sie einen Anbieter für dynamische IP-Adressen. Im Router muss außerdem eine Weiterleitungsregel („Port forwarding“) für den Port „51820“ (UDP) auf den Server-PC eingerichtet sein (siehe www.pcwelt.de/1745578).

Thorsten Eggeling's avatar
Thorsten Eggeling committed
## Installation Ubuntu
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard qrencode
```
## Installation Raspberry Pi (Raspbian)
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo apt install libmnl-dev build-essential git qrencode
git clone https://git.zx2c4.com/WireGuard
cd WireGuard/src
make
sudo make install
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
## VPN-Server einrichten 
Drei Zeilen:

```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo mkdir /etc/wireguard
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo gedit /etc/wireguard/wg0.conf &
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Der Server muss als Router IPv4- und IPv6-Pakete weiterleiten. Um die Funktion zu aktivieren, führen Sie diese Befehlszeile aus:
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo gedit /etc/sysctl.conf
```
Entfernen Sie die Kommentarzeichen ("#") vor "net.ipv4.ip_forward=1" und "net.ipv6.conf.all.forwarding=1". Mit 
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sysctl -p
```
wenden Sie die Änderungen ohne Neustart an.

Thorsten Eggeling's avatar
Thorsten Eggeling committed
**Server-Konfiguration nur für IPv4 mit einem Client**
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
[Interface]
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Address = 10.66.66.1/24
Thorsten Eggeling's avatar
Thorsten Eggeling committed
ListenPort = 51820
PrivateKey = [der schon vorhandene private Schlüssel des Servers]
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s31f6 -j MASQUERADE
Thorsten Eggeling's avatar
Thorsten Eggeling committed

Thorsten Eggeling's avatar
Thorsten Eggeling committed
[Peer]
PublicKey = 
Thorsten Eggeling's avatar
Thorsten Eggeling committed
AllowedIPs = 10.66.66.2/32
PresharedKey =
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
**Server-Konfiguration für IPv4 und IPv6 mit zwei Clients**
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 51820
Thorsten Eggeling's avatar
Thorsten Eggeling committed
PrivateKey = [der schon vorhandene private Schlüssel des Servers]
Thorsten Eggeling's avatar
Thorsten Eggeling committed
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE
[Peer]
PublicKey = 
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
PresharedKey = 

[Peer]
PublicKey = 
Thorsten Eggeling's avatar
Thorsten Eggeling committed
AllowedIPs = 10.66.66.3/32,fd42:42:42::3/128
Thorsten Eggeling's avatar
Thorsten Eggeling committed
PresharedKey = 
```
Alle IP-Adressen sind Beispiele. Die IP-Adresse ist frei wählbar, sollte aber – wie in unserem Beispiel – aus einem privaten Adressbereich nach RFC 1918 stammen. Allerdings besteht die Gefahr von Adresskonflikten, wenn derselbe Bereich zufällig auch im gerade genutzten WLAN zum Einsatz kommt. Eine Alternative ist eine IP-Adresse gemäß RFC 6596, beispielsweise „100.64.0.1/10“ (siehe Beispiel für IPv4), die ebenfalls nicht über das Internet geroutet wird und damit als sicher gelten kann.

Thorsten Eggeling's avatar
Thorsten Eggeling committed
Name der Netzwerkschnittstelle ermitteln: 
```
ip addr
```
## VPN-Client einrichten
**Client-Konfiguration erzeugen**
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
printf "[Interface]\nPrivateKey = " | tee ~/wg0-client1.conf > /dev/null
wg genkey | tee -a ~/wg0-client1.conf | wg pubkey | tee ~/client1_publickey
printf "[Peer]\nPresharedKey = " | tee -a ~/wg0-client1.conf > /dev/null
wg genpsk | tee -a ~/wg0-client1.conf
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
**Client-Konfiguration (IPv4 und IPv6)**
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
[Interface]
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Address = 10.66.66.2/24,fd42:42::42::::2/64
Thorsten Eggeling's avatar
Thorsten Eggeling committed
PrivateKey = [der schon vorhandene private Schlüssel des Cliens]

[Peer]
Thorsten Eggeling's avatar
Thorsten Eggeling committed
PublicKey = [Schlüssel aus der Datei "/etc/wireguard/publickey" des Wireguard-Servers]
Thorsten Eggeling's avatar
Thorsten Eggeling committed
AllowedIPs = 0.0.0.0/0 #kompletter Netzwerkzugriff
#Zugriff nur auf Server und Heimnetzwerk
Thorsten Eggeling's avatar
Thorsten Eggeling committed
#AllowedIPs = 10.66.66.1/32, 192.168.178.0/24
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Endpoint = domain.meinserver.de:51820
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Kopieren Sie die Client-Konfigurationsdatei "wg0-client1.conf" in den Ordner "/etc/wireguard".

Thorsten Eggeling's avatar
Thorsten Eggeling committed
**Server-Konfiguration ergänzen**
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Ergänzen Sie auf dem Server in der Datei "/etc/wireguard/wg0.conf" unter "[Peer]" hinter "PublicKey=" den öffentlichen Schlüssel des Clients aus der Datei 
```
~/client1_publickey
```
sowie den "PresharedKey" aus der Datei
```
~/wg0-client1.conf.
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Bei mehreren Clients vervielfältigen Sie den Abschnitt "[Peer]" und tragen den öffentlichen Schlüssel des jeweiligen Clients ein. Hinter "AllowedIPs=" passen Sie die IP-Adresse mit "10.66.66.3/32", "10.66.66.3/32" und so weiter an. 

Thorsten Eggeling's avatar
Thorsten Eggeling committed
## Wireguard starten
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Auf dem Server:
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo wg-quick up wg0
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Auf dem Client-PC:
```
sudo wg-quick up wg0-client1
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
Infos zur Verbindung:
```
wg show
```
Wireguard beenden:
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo wg-quick down wg0
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Wenn Wireguard automatisch starten soll, beenden Sie den Server zuerst mit „wg-quick down wg0“ und führen dann diese Befehlszeile aus:
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
sudo systemctl enable --now wg-quick@wg0
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
## QR-Code für die Smartphone-Konfiguration erzeugen
Auf einem Client-PC starten:
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
qrencode -t ansiutf8 -l L < ~/wg0-client1.conf
```
In der Smartphone-App scannen Sie den QR-Code ein und aktiveren danach die VPN-Verbindung.

## Alternative Opne VPN

Thorsten Eggeling's avatar
Thorsten Eggeling committed
```bash
Thorsten Eggeling's avatar
Thorsten Eggeling committed
wget -O pivpn https://install.pivpn.io
bash pivpn
```
Konfigurationsdatei erstellen:
Thorsten Eggeling's avatar
Thorsten Eggeling committed
```
Thorsten Eggeling's avatar
Thorsten Eggeling committed
pivpn add
```
Auf dem Client-PC:
```
sudo openvpn --config [ovpn-Datei]
```

Thorsten Eggeling's avatar
Thorsten Eggeling committed
## Links
Wireguard: https://www.wireguard.com/

Open-VPN-Konfiguration: https://www.pcwelt.de/40450

CIDR to IPv4 Conversion: https://www.ipaddressguide.com/cidr

Öffentliche IP-Adresse ermitteln: https://www.whatsmyip.org

VPN-CLient-Software: https://tunsafe.com