Tento tutoriál vám ukáže, jak nastavit svůj vlastní server WireGuard VPN na CentOS/RHEL. WireGuard je vyroben speciálně pro linuxové jádro. Běží uvnitř linuxového jádra a umožňuje vám vytvořit rychlý, moderní a bezpečný tunel VPN.
Funkce WireGuard VPN
- Lehký a super rychlý, vyfoukne OpenVPN z vody.
- Více platforem. WireGuard lze spustit na systémech Linux, BSD, macOS, Windows, Android, iOS a OpenWRT.
- Autentizace uživatele se provádí výměnou veřejných klíčů, podobně jako klíče SSH.
- Přiděluje klientům VPN statické adresy IP tunelu. Někomu se to nemusí líbit, ale v některých případech to může být užitečné.
- Mobilní zařízení mohou plynule přepínat mezi Wi-Fi a mobilní sítí, aniž by došlo k přerušení připojení.
- Jeho cílem je nahradit OpenVPN a IPSec ve většině případů použití.
Požadavky
Abyste mohli postupovat podle tohoto návodu, budete potřebovat VPS (virtuální privátní server), který může volně přistupovat k blokovaným webovým stránkám (mimo vaši zemi nebo systém filtrování internetu). Doporučuji Kamatera VPS, která obsahuje:
- 30denní bezplatná zkušební verze.
- Začíná na 4 USD měsíčně (1 GB RAM)
- Vysoce výkonný VPS založený na KVM
- 9 datových center po celém světě, včetně Spojených států, Kanady, Spojeného království, Německa, Nizozemska, Hong Kongu a Isrealu.
Podle níže uvedeného návodu vytvořte svůj Linux VPS server na Kamatera.
- Jak vytvořit Linux VPS server na Kamateře
Jakmile máte VPS se systémem CentOS/Alma Linux/Rocky Linux, postupujte podle pokynů níže.
Tento výukový program předpokládá, že server VPN i klient VPN používají CentOS/RHEL operační systém.
Krok 1:Instalace WireGuard na CentOS/RHEL Server a Desktop
Přihlaste se ke svému serveru CentOS/RHEL a poté spusťte následující příkazy pro instalaci WireGuard.
CentOS 8
sudo dnf install elrepo-release epel-release -ysudo dnf install kmod-wireguard wireguard-tools -y
RHEL 8
instalace sudo dnf https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpmsudo instalace dnf https://dl.fedoraproject.org/pub/epel/epel-release-latest -8.noarch.rpmsudo dnf install kmod-wireguard wireguard-tools -y
CentOS/RHEL 7
sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmsudo yum install yum-plugin-elreposudo yum install kmod-wireguard wireguard-tools -yPoté pomocí stejných příkazů nainstalujte WireGuard na místní počítač CentOS/RHEL (klient VPN).
Krok 2:Vygenerujte veřejný/soukromý klíčový pár
Server
Vytvořte adresář pro WireGuard.
sudo mkdir -p /etc/wireguard/Spusťte následující příkaz na serveru CentOS/RHEL a vytvořte pár veřejného/soukromého klíče, který bude uložen pod
/etc/wireguard/
adresář.wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Klient
Vytvořte adresář pro WireGuard.
sudo mkdir -p /etc/wireguard/Spusťte následující příkaz k vytvoření páru veřejného/soukromého klíče na místním počítači CentOS/RHEL (klient VPN).
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.keyKrok 3:Vytvořte konfigurační soubor WireGuard
Server
Pomocí textového editoru příkazového řádku, jako je Nano, vytvořte konfigurační soubor WireGuard na serveru CentOS/RHEL.
wg0
bude název síťového rozhraní.instalace sudo dnf nanosudo nano /etc/wireguard/wg0.confZkopírujte následující text a vložte jej do konfiguračního souboru. Musíte použít svůj vlastní soukromý klíč serveru a veřejný klíč klienta.
[Rozhraní] Adresa =10.10.10.1/24ListenPort =51820PrivateKey =CD + ZjXiVIX + 0iSX1PNijl4a + 88lCbDgw7kO78oXXLEc =[Peer] PublicKey =AYQJf6HbkQ0X0Xyt + cTMTuJe3RFwbuCMF46LKgTwzz4 =AllowedIPs =10.10.10.2/32
Kde:
- Adresa :Zadejte soukromou IP adresu serveru VPN. Zde používám síťový rozsah 10.10.10.0/24, takže nebude v konfliktu s dosahem vaší domácí sítě. (Většina domácích routerů používá 192.168.0.0/24 nebo 192.168.1.0/24). 10.10.10.1 je soukromá IP adresa serveru VPN.
- Soukromý klíč :Soukromý klíč serveru VPN, který lze nalézt v
/etc/wireguard/server_private.key
soubor na serveru. - ListenPort :Server WireGuard VPN bude naslouchat na portu UDP 51820, což je výchozí nastavení.
- PublicKey :Veřejný klíč klienta VPN, který lze nalézt v
/etc/wireguard/client_public.key
soubor na klientském počítači. - Povolené adresy IP :IP adresy, které může klient VPN používat. V tomto příkladu může klient použít pouze IP adresu 10.10.10.2 uvnitř tunelu VPN.
Uložte a zavřete soubor. (Chcete-li uložit soubor v textovém editoru Nano, stiskněte Ctrl+O
a poté stiskněte Enter pro potvrzení. Stiskněte Ctrl+X
pro ukončení.)
Změňte režim oprávnění k souboru tak, aby soubory mohl číst pouze uživatel root.
sudo chmod 600 /etc/wireguard/ -R
Klient
Pomocí textového editoru příkazového řádku, jako je Nano, vytvořte konfigurační soubor WireGuard na místním počítači CentOS/RHEL. wg-client0
bude název síťového rozhraní.
sudo nano /etc/wireguard/wg-client0.conf
Zkopírujte následující text a vložte jej do konfiguračního souboru. Musíte použít svůj vlastní soukromý klíč klienta a veřejný klíč serveru.
Kde:
- Adresa :Zadejte soukromou IP adresu klienta VPN.
- DNS :zadejte 10.10.10.1 (server VPN) jako server DNS. Nakonfiguruje se pomocí
resolvconf
příkaz. Můžete také zadat více serverů DNS pro redundanci takto:DNS = 10.10.10.1 8.8.8.8
- Soukromý klíč :Soukromý klíč klienta, který lze nalézt v
/etc/wireguard/client_private.key
soubor na klientském počítači. - PublicKey :Veřejný klíč serveru, který lze nalézt v
/etc/wireguard/server_public.key
soubor na serveru. - Povolené adresy IP :0.0.0.0/0 představuje celý internet, což znamená, že veškerý provoz na internetu by měl být směrován přes VPN.
- Koncový bod :Veřejná IP adresa a číslo portu serveru VPN. Nahraďte 12.34.56.78 skutečnou veřejnou IP adresou vašeho serveru.
- PersistentKeepalive :Odešlete ověřený prázdný paket peeru každých 25 sekund, aby spojení zůstalo živé. Pokud PersistentKeepalive není povoleno, server VPN nemusí být schopen pingnout klienta VPN.
Uložte a zavřete soubor.
Změňte režim souborů tak, aby soubory mohl číst pouze uživatel root.
sudo chmod 600 /etc/wireguard/ -R
Krok 4:Povolte předávání IP na serveru
Aby server VPN směroval pakety mezi klienty VPN a internetem, musíme povolit předávání IP. Upravte sysctl.conf
soubor.
sudo nano /etc/sysctl.conf
Přidejte následující řádek na konec tohoto souboru.
net.ipv4.ip_forward =1
Uložte a zavřete soubor. Poté aplikujte změny pomocí níže uvedeného příkazu. Klávesa -p možnost načte nastavení sysctl z /etc/sysctl.conf soubor. Tento příkaz zachová naše změny po restartování systému.
sudo sysctl -p
Krok 5:Nakonfigurujte maskování IP na serveru
Spuštěním následujícího příkazu povolte maskování IP pro 10.10.10.0/24
podsítě v firewallu serveru.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" masquerade'sudo systemctl reload firewalld
To skryje vaši síť VPN před vnějším světem. Internet tedy vidí pouze IP adresu vašeho VPN serveru, ale nevidí IP vašeho VPN klienta, stejně jako váš domácí router skrývá vaši soukromou domácí síť.
Pokud váš CentOS/RHEL nemůže najít firewall-cmd
musíte nainstalovat firewall a spustit službu.
instalace sudo dnf firewalldsudo systemctl start firewalld
Krok 6:Nainstalujte DNS Resolver na server
Protože server VPN zadáváme jako server DNS pro klienta, musíme na serveru VPN spustit překladač DNS. Můžeme nainstalovat server bind9 DNS.
instalační vazba sudo dnf
Spusťte BIND 9 pomocí:
sudo systemctl start s názvem
A povolit automatické spuštění při spouštění:
povolení sudo systemctl pojmenované
Jeho stav můžete zkontrolovat pomocí:
stav systemctl pojmenovaný
Ukázkový výstup:
● named.service – Berkeley Internet Name Domain (DNS) Načteno:načteno (/usr/lib/systemd/system/named.service; povoleno; přednastaveno dodavatelem:zakázáno> Aktivní:aktivní (běžící) od neděle 2020-05 -17 11:07:34 EDT; před 9s Proces:7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop> /dev/null 2>&1 || /bin/kill -TE> Proces:7218 ExecStart =/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,> Process:7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" =="yes" ];> Hlavní PID:7220 (pojmenovaný) Úkoly:4 (limit:5045) Paměť:55,5M CGroup:/system.slice/named.service └─7220 /usr/sbin/named -u named -c /etc/named.conf -4
Tip:Pokud se výše uvedený příkaz okamžitě neukončí, stiskněte Q.
Upravte hlavní konfigurační soubor BIND /etc/named.conf
.
sudo nano /etc/named.conf
V options
klauzule, můžete najít následující dva řádky.
port pro poslech 53 { 127.0.0.1; };listen-on-v6 port 53 { ::1; };
Tím se vytvoří named
poslouchat pouze na localhost. Pokud chcete klientům ve stejné síti povolit dotazování na názvy domén, zakomentujte tyto dva řádky. (na začátek každého řádku přidejte dvojitá lomítka)
// port pro poslech 53 { 127.0.0.1; };// listen-on-v6 port 53 { ::1; };
Najděte následující řádek.
allow-query { localhost; };
Přidejte rozsah sítě 10.10.10.0/24, aby klienti VPN mohli odesílat dotazy DNS. Pamatujte, že každý rozsah sítě musíte ukončit středníkem.
allow-query { localhost; 10.10.10.0/24; };
Uložte a zavřete soubor. Restartujte BIND9, aby se změny projevily.
sudo systemctl restart pojmenován
Poté musíte spustit následující příkaz, aby se klienti VPN mohli připojit k portu 53.
sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept'
Krok 7:Otevřete port WireGuard v bráně firewall
Spuštěním následujícího příkazu otevřete port UDP 51820 na serveru.
sudo firewall-cmd --permanent --add-port=51820/udpsudo systemctl reload firewalld
Krok 8:Spusťte WireGuard
server
Spuštěním následujícího příkazu na serveru spusťte WireGuard.
sudo wg-quick up /etc/wireguard/wg0.conf
Chcete-li to zastavit, spusťte
sudo wg-quick down /etc/wireguard/wg0.conf
Ke spuštění WireGuard můžete také použít službu systemd.
sudo systemctl start [email protected]
Pokud se spuštění nezdařilo, měli byste zkontrolovat protokol, abyste zjistili, co je špatně.
sudo journalctl -eu [e-mail chráněný]
Povolte automatické spouštění při spouštění systému pomocí následujícího příkazu.
povolení sudo systemctl [chráněno e-mailem]
Zkontrolujte jeho stav pomocí následujícího příkazu. Jeho stav by měl být active (exited)
.
stav systemctl [e-mail chráněn]
Nyní je server WireGuard připraven přijímat klientská připojení.
Klient
Spusťte WireGuard.
sudo systemctl start [email protected]
Pokud se spuštění nezdařilo, měli byste zkontrolovat protokol, abyste zjistili, co je špatně.
sudo journalctl -eu [e-mail chráněný]
Pokud v protokolu uvidíte následující chybu, můžete zkusit restartovat OS.
RTNETLINK odpovídá:Operace není podporována
Povolte automatické spouštění při spouštění systému.
povolení sudo systemctl [chráněno e-mailem]
Zkontrolujte jeho stav:
stav systemctl [e-mail chráněn]
Nyní přejděte na tento web:http://icanhazip.com/
pro kontrolu vaší veřejné IP adresy. Pokud vše proběhlo v pořádku, měla by zobrazovat veřejnou IP adresu vašeho VPN serveru namísto veřejné IP adresy vašeho klientského počítače.
Pro získání aktuální veřejné IP adresy můžete také spustit následující příkaz.
curl https://icanhazip.com
Tipy pro odstraňování problémů
Můžete pingnout ze serveru VPN na klienta VPN (ping 10.10.10.2
), abyste zjistili, zda tunel funguje. Pokud v příkazu ping uvidíte následující chybovou zprávu,
ping:sendmsg:Požadovaný klíč není k dispozici
může to být tím, že AllowedIPs
parametr je chybný, jako překlep.
Pokud je tunel VPN úspěšně vytvořen, ale veřejná IP adresa klienta se nezmění, je to proto, že maskování ve bráně firewall nefunguje. Jednou jsem měl překlep v pravidlech brány firewall, což způsobilo, že můj počítač nemohl procházet internet.
Všimněte si, že nedoporučuji používat SaveConfig=true
v [Interface]
části konfiguračního souboru WireGuard. SaveConfig
řekne WireGuard, aby při vypnutí uložil konfiguraci runtime. Pokud tedy přidáte další [Peer]
v konfiguračním souboru a poté restartujte WireGuard, vaše nově přidané konfigurace budou přepsány.
Pokud vaše VPN stále nefunguje, zkuste restartovat server VPN.
restart sudo systemctl [chráněno e-mailem]
Poté zastavte klienta VPN.
sudo systemctl stop [e-mail chráněn]
A upgradujte softwarové balíčky na klientovi VPN.
aktualizace sudo dnf
Dále restartujte klienta VPN.
sudo shutdown -r nowsudo systemctl start [chráněno e-mailem]
Přidání dalších klientů VPN
WireGuard je navržen tak, aby přidružil jednu IP adresu k jednomu VPN klientovi. Chcete-li přidat další klienty VPN, musíte pro každého klienta vytvořit jedinečný pár soukromých/veřejných klíčů a poté přidat veřejný klíč každého klienta VPN do konfiguračního souboru serveru (/etc/wireguard/wg0.conf
) takto:
Každý klient VPN bude mít statickou privátní IP adresu (10.10.10.2, 10.10.10.3, 10.10.10.4 atd.). Restartujte server WireGuard, aby se změny projevily.
restart sudo systemctl [chráněno e-mailem]
Poté přidejte konfiguraci WireGuard na každého klienta VPN jako obvykle.
Policy Routing, Split Tunneling &VPN Kill Switch
Nyní vám ukážu, jak používat směrování zásad , rozdělené tunelování a Přepínač deaktivace VPN s WireGuard VPN. Poznámka že se nedoporučuje používat je ve vzájemném spojení. Pokud používáte směrování zásad, neměli byste povolit rozdělené tunelování ani přepínač zabíjení VPN a naopak.
Směrování zásad
Ve výchozím nastavení bude veškerý provoz na klientovi VPN směrován přes server VPN. Někdy můžete chtít směrovat pouze určitý typ provozu na základě protokolu transportní vrstvy a cílového portu. Toto je známé jako směrování zásad.
Směrování zásad je nakonfigurováno na klientském počítači a nejprve musíme zastavit připojení VPN.
sudo systemctl stop [e-mail chráněn]
Poté upravte konfigurační soubor klienta.
sudo nano /etc/wireguard/wg-client0.conf
Pokud například přidáte následující 3 řádky do [interface]
poté WireGuard vytvoří směrovací tabulku s názvem „1234“ a přidá do směrovací tabulky pravidlo ip. V tomto příkladu bude provoz směrován přes server VPN pouze v případě, že se jako protokol transportní vrstvy použije TCP a cílový port je 25, tj. když klientský počítač odesílá e-maily.
Tabulka =1234PostUp =pravidlo ip přidat tabulku ipproto tcp dport 25 1234PreDown =odstranit pravidlo ip ipproto tcp dport 25 tabulku 1234
Uložte a zavřete soubor. Poté znovu spusťte klienta WireGuard.
sudo systemctl start [email protected]
Rozdělené tunelování
Ve výchozím nastavení bude veškerý provoz na klientovi VPN směrován přes server VPN. Zde je návod, jak povolit rozdělené tunelování, takže provoz pouze na 10.10.10.0/24
Rozsah IP adres bude tunelován prostřednictvím WireGuard VPN. To je užitečné, když chcete vybudovat privátní síť pro několik cloudových serverů, protože klienti VPN poběží na cloudových serverech a pokud používáte úplný VPN tunel, pravděpodobně ztratíte připojení ke cloudovým serverům.
Upravte konfigurační soubor klienta.
sudo nano /etc/wireguard/wg-client0.conf
Změnit
AllowedIPs =0.0.0.0/0
Komu
PovolenéIPs =10.10.10.0/24
Provoz bude tedy směrován přes VPN pouze tehdy, když je cílová adresa v rozsahu IP 10.10.10.0/24. Uložte a zavřete soubor. Poté restartujte klienta WireGuard.
restart sudo systemctl [chráněno e-mailem]
VPN Kill Switch
Ve výchozím nastavení má váš počítač v případě přerušení připojení VPN přístup k internetu přes normální bránu. Možná budete chtít povolit funkci kill switch, která zabrání toku nešifrovaných paketů přes rozhraní bez WireGuard.
Zastavte proces klienta WireGuard.
sudo systemctl stop [e-mail chráněn]
Upravte konfigurační soubor klienta.
sudo nano /etc/wireguard/wg-client0.conf
Přidejte následující dva řádky do [interface]
sekce.
PostUp =iptables -I OUTPUT! -o %i -m značka ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECTPreDown =iptables -D VÝSTUP ! -o %i -m značka ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
Takhle:
[Interface]Adresa =10.10.10.2/24DNS =10.10.10.1PrivateKey =cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp =iptables -I OUTPUT -o %i -m značka ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECTPreDown =iptables -D VÝSTUP ! -o %i -m značka ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT[Peer]PublicKey =RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=PovolenéIPs =0.0.0.0/0Koncový bod =12.34.56.78:5182Ppalivee>5182Uložte a zavřete soubor. Poté spusťte klienta WireGuard.
sudo systemctl start [email protected]
Nastavte zónu zásad odezvy (RPZ) v BIND Resolver na CentOS/RHEL Jak snadno nastavit plně vybavený poštovní server na CentOS 8 s iRedMailCent OS