Wireguard je open-source multiplatformní implementace VPN, která využívá nejmodernější kryptografii. Je rychlejší, jednodušší a funkčnější než protokoly IPSec a OpenVPN. Je navržena jako univerzální VPN pro běh na vestavěných rozhraních a superpočítačích a běží na Linuxu, Windows, macOS, iOS, Androidu, BSD a různých dalších platformách.
Tento tutoriál se bude zabývat tím, jak nainstalovat Wireguard VPN na server založený na CentOS 8 a jak se k němu připojit pomocí klienta Linux (CentOS/Fedora/Ubuntu).
Krok 1 – Aktualizace systému
Než budete pokračovat, je nutné aktualizovat váš systém, abyste nainstalovali nejnovější aktualizace.
$ sudo dnf update
Krok 2 – Instalace a povolení EPEL repo
Požadované balíčky Wireguard lze nalézt v úložišti EPEL, takže jej musíme nainstalovat a povolit.
$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools
Povolili jsme také úložiště PowerTools, protože na něm závisí balíčky EPEL.
Krok 3 – Instalace Wireguard
Povolte úložiště Wireguard.
$ sudo dnf copr enable jdoss/wireguard
Nainstalujte Wireguard.
$ sudo dnf install wireguard-dkms wireguard-tools
Tento krok také nainstaluje kompilátor GNU GCC potřebný k sestavení modulů jádra Linuxu.
Krok 4 – Konfigurace serveru Wireguard
Vytvořte na serveru prázdný konfigurační soubor pro nastavení Wireguard se správnými oprávněními.
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
Dotykový příkaz vytvoří soubor wg0-server.conf
soubor v /etc/wireguard
adresář.
Dále vytvořte pár soukromých/veřejných klíčů pro server Wireguard.
$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
Tím se vytvoří veřejný i soukromý klíč pro Wireguard a zapíše je do příslušných souborů.
Zobrazit soukromý klíč, který jsme právě vytvořili.
$ sudo cat privatekey
Poznamenejte si klíč a zkopírujte jej, protože jej budeme potřebovat ke konfiguraci Wireguard.
Dále upravte konfigurační soubor.
$ sudo nano /etc/wireguard/wg0.conf
Přidejte následující kód.
[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
## VPN server port - You can choose any port ##
ListenPort = 37822
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true
Každá konfigurace má jednu sekci nazvanou [Interface]
kde je definována serverová část.
Obsahuje soukromý klíč místního serveru WireGuard, port UDP, na kterém by měl naslouchat příchozím připojením, a vlastní IP adresy VPN.
Také jsme nastavili SaveConfig
true
. Tím sdělíte službě Wireguard, aby při vypnutí automaticky uložila svou aktivní konfiguraci do tohoto souboru.
Stiskněte Ctrl + W zavřete soubor a zadejte Y až budete vyzváni k uložení souboru.
Krok 5 – Konfigurace brány firewall
Musíme otevřít port, který jsme vybrali pro Wireguard.
Nejprve musíme definovat službu Wireguard pro firewall. Chcete-li to provést, vytvořte soubor wireguard.xml
pomocí editoru Nano.
$ sudo nano /etc/firewalld/services/wireguard.xml
Vložte následující kód do souboru.
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>wireguard</short>
<description>WireGuard open UDP port 37822 for client connections</description>
<port protocol="udp" port="37822"/>
</service>
Stiskněte Ctrl + W zavřete soubor a zadejte Y až budete vyzváni k uložení souboru.
Dále povolte službu Wireguard ve firewallu.
$ sudo firewall-cmd --permanent --add-service=wireguard
Zapněte maskování, aby veškerý provoz přicházel a odcházel z 192.168.10.0/24 směrováno přes naši veřejnou IP adresu serveru 203.1.114.98/24 .
$ sudo firewall-cmd --permanent --add-masquerade
Nakonec znovu načtěte firewall, aby se pravidla aktivovala.
$ sudo firewall-cmd --reload
Seznam aktuálních pravidel brány firewall pro potvrzení.
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: wireguard ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Krok 6 – Zapnutí přesměrování IPv4
Vytvořte /etc/sysctl.d/99-custom.conf
soubor.
$ sudo nano /etc/sysctl.d/99-custom.conf
Vložte následující kód do souboru.
## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
## for IPv4 ##
net.ipv4.ip_forward = 1
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
## for IPv6 ##
net.ipv6.conf.all.forwarding = 1
Stiskněte Ctrl + W zavřete soubor a zadejte Y až budete vyzváni k uložení souboru.
Rozsah kódu ve výše uvedeném souboru je mimo rozsah tohoto tutoriálu, takže jej zatím používejte tak, jak je.
Znovu načtěte změny.
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
Ve výchozím nastavení firewall nedovolí wg0
a eth0
rozhraní spolu mluví. Musíme tedy do vnitřní sítě přidat rozhraní Wireguard a zapnout maskování.
$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
Krok 7 – Povolení a spuštění služby Wireguard
Dále musíme povolit a spustit službu Wireguard.
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
Můžete ověřit, zda je rozhraní Wireguard wg0
je spuštěn a spuštěn pomocí následujícího příkazu.
$ sudo wg
interface: wg0
public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
private key: (hidden)
listening port: 37822
$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 192.168.10.1/24 scope global wg0
valid_lft forever preferred_lft forever
Krok 8 – Instalace a konfigurace klienta WireGuard
Pokyny k instalaci klienta Wireguard pro vaši distribuci Linuxu naleznete na jejich oficiální instalační stránce.
Jakmile nainstalujete klienta, musíte vytvořit konfigurační soubor klienta.
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey
Poznamenejte si soukromý klíč, který získáte na konci. Dále musíme upravit konfigurační soubor, který jsme právě vytvořili.
$ sudo nano /etc/wireguard/wg0.conf
Přidejte do souboru následující direktivy.
[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
## client ip address ##
Address = 192.168.10.2/24
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
## set ACL ##
AllowedIPs = 192.168.10.0/24
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
## Key connection alive ##
PersistentKeepalive = 15
Všimněte si, že jsme přiřadili soukromou IP 192.168.10.1 na server a 192.168.10.2 klientovi. Do souboru jsme také přidali soukromý klíč klienta.
[Peer]
sekce je místo, kde zadáváte konfiguraci serveru, ke kterému se klient připojí. Zde jsme přidali veřejný klíč, veřejnou IP a sadu povolených IP, která obsahuje privátní IP našeho serveru. PersistentKeepalive
říká WireGuard, aby každých 15 sekund posílal paket UDP, což je užitečné, pokud jste za NAT a chcete udržet připojení naživu.
Stiskněte Ctrl + W zavřete soubor a zadejte Y až budete vyzváni k uložení souboru.
Nyní je čas povolit a spustit klienta VPN.
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]
Krok 9 – Konfigurace serveru pro přidání klienta
Nyní musíme znovu přidat konfiguraci klienta na server, abychom mu dali vědět o klientovi.
Nejprve zastavte službu Wireguard.
$ sudo systemctl stop [email protected]
Otevřete soubor wg0.conf pro úpravy.
$ sudo nano /etc/wireguard/wg0.conf
Připojte následující kód na konec souboru.
[Peer]
## client VPN public key ##
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.10.2/32
Stiskněte Ctrl + W zavřete soubor a zadejte Y až budete vyzváni k uložení souboru.
[Peer]
sekce definují ostatní členy sítě VPN. Můžete jich přidat tolik, kolik potřebujete.
Obsahují svůj veřejný klíč, který se musí shodovat se soukromým klíčem protějšku v jeho [Interface]
sekce.
Všimněte si, že každé příchozí připojení je nejprve ověřeno pomocí jednoho z veřejných klíčů. Pokud připojení nepochází od ověřeného peer, příchozí pakety jsou pouze tiše ignorovány. Vzhledem k tomu, že připojení od hostitelů, kteří nevlastní odpovídající soukromý klíč, nejsou vůbec zodpovězena, WireGuard VPN neposkytuje pouze šifrovanou komunikaci, ale také zůstává skryta před cizinci.
Znovu spusťte službu Wireguard.
$ sudo systemctl start [email protected]
Krok 10 – Test
Pojďme zkontrolovat, zda jsou klient i server bezpečně připojeny pomocí VPN. Chcete-li připojení otestovat, spusťte na svém klientovi následující příkazy.
$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms
--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms
$ sudo wg
interface: wg0
public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
private key: (hidden)
listening port:
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
endpoint: 203.1.114.98:37822
allowed ips: 192.168.10.0/24
latest handshake: 1 minute, 40 seconds ago
transfer: 938 B received, 45.67 KiB sent
persistent: keepalive: every 15 seconds
Závěr
To je vše, co je v tomto tutoriálu. Nyní byste měli mít server VPN založený na Wireguard založený na serveru CentOS 8. Pokud máte nějaké dotazy, zeptejte se je v komentářích níže.