Како да поставите WireGuard на Debian 11


Вовед

Работи на опашката.

Шифрирањето на WireGuard се потпира на јавни и приватни клучеви за врсниците да воспостават шифриран тунел меѓу себе. Секоја верзија на WireGuard користи специфичен пакет за криптографски шифри за да обезбеди едноставност, безбедност и компатибилност со врсниците.

За споредба, други софтвери за VPN, како што е IPSec, користат Безбедност на транспортниот слој (TLS) и сертификати за автентикација и воспоставување шифрирани тунели помеѓу системите. Различните верзии на TLS вклучуваат поддршка за стотици различни криптографски пакети и алгоритми, и иако ова овозможува голема флексибилност за поддршка на различни клиенти, исто така го прави конфигурирањето на VPN што користи TLS повеќе одзема време, сложено и склоно кон грешки.

Во ова упатство, ќе го поставите WireGuard на серверот Debian 11 и потоа ќе конфигурирате друга машина за да се поврзе со неа како врсничка користејќи ги и IPv4 и IPv6 конекции (најчесто се нарекува врска двоен стек). Исто така, ќе научите како да го насочувате интернет сообраќајот на врсниците преку серверот WireGuard во конфигурација на портата, покрај користењето на VPN за шифриран тунел peer-to-peer.

За целите на ова упатство, ќе конфигурираме друг систем Debian 11 како врсник (исто така познат како клиент) на серверот WireGuard. Следните упатства во оваа серија ќе објаснат како да инсталирате и стартувате WireGuard на Windows, macOS, Android и iOS системи и уреди.

Забелешка: Ако планирате да го поставите WireGuard на DigitalOcean Droplet, имајте предвид дека ние, како и многу даватели на хостинг, наплаќаме за преголеми пропусен опсег. Поради оваа причина, ве молиме имајте предвид колку сообраќај управува вашиот сервер. Погледнете ја оваа страница за повеќе информации.

Предуслови

За да го следите ова упатство, ќе ви треба:

  • Еден Debian 11 сервер со sudo не-root корисник и овозможен заштитен ѕид. За да го поставите ова, можете да го следите нашето упатство за почетно поставување сервер со Debian 11. Ние ќе го нарекуваме ова како WireGuard Server низ овој водич.
  • Ќе ви треба клиентска машина што ќе ја користите за да се поврзете со вашиот сервер WireGuard. Во ова упатство ќе ја нарекуваме оваа машина како WireGuard Peer. За целите на ова упатство, се препорачува да ја користите вашата локална машина како WireGuard Peer, но можете да користите далечински сервери или мобилни телефони како клиенти ако сакате. Ако користите далечински систем, не заборавајте да ги следите сите опционални делови подоцна во ова упатство или може да се исклучите од системот.
  • За да користите WireGuard со IPv6, исто така ќе треба да се осигурате дека вашиот сервер е конфигуриран да го поддржува тој тип на сообраќај. Ако сакате да овозможите поддршка за IPv6 со WireGuard и користите DigitalOcean Droplet, погледнете ја оваа страница со документација Како да овозможите IPv6 на капки. Можете да додадете поддршка за IPv6 кога креирате капка, или потоа користејќи ги упатствата на таа страница.

Чекор 1 - Инсталирање WireGuard и генерирање на пар клучеви

Првиот чекор во ова упатство е да инсталирате WireGuard на вашиот сервер. За да започнете, ажурирајте го индексот на пакетот на вашиот сервер WireGuard и инсталирајте го WireGuard користејќи ги следните команди. Можеби ќе ви биде побарано да ја наведете лозинката на вашиот sudo корисник ако ова е прв пат да користите sudo во оваа сесија:

  1. sudo apt update
  2. sudo apt install wireguard

Сега кога имате инсталирано WireGuard, следниот чекор е да генерирате пар на приватен и јавен клуч за серверот. Ќе ги користите вградените команди wg genkey и wg pubkey за да ги креирате клучевите, а потоа додадете го приватниот клуч во конфигурациската датотека на WireGuard.

Исто така, ќе треба да ги промените дозволите на клучот што штотуку го создадовте со помош на командата chmod, бидејќи стандардно датотеката може да се чита од секој корисник на вашиот сервер.

Направете го приватниот клуч за WireGuard и променете ги неговите дозволи користејќи ги следните команди:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Командата sudo chmod go=... ги отстранува сите дозволи на датотеката за корисници и групи различни од корисникот на root за да се осигура дека само корисникот на root може да пристапи до приватниот клуч.

Треба да добиете една линија на кодиран излез base64, што е приватниот клуч. Копија од излезот е исто така зачувана во датотеката /etc/wireguard/private.key за идна референца од делот tee од командата. Внимателно забележете го приватниот клуч што е излезен бидејќи ќе треба да го додадете во конфигурациската датотека на WireGuard подоцна во овој дел.

Следниот чекор е да се креира соодветниот јавен клуч, кој е изведен од приватниот клуч. Користете ја следнава команда за да ја креирате датотеката со јавен клуч:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Оваа команда се состои од три поединечни команди кои се поврзани заедно со помош на операторот | (цевка):

  • sudo cat /etc/wireguard/private.key: оваа команда ја чита датотеката со приватен клуч и ја емитува во стандардниот излезен тек.
  • wg pubkey: втората команда го зема излезот од првата команда како стандарден влез и го обработува за да генерира јавен клуч.
  • sudo tee /etc/wireguard/public.key: последната команда го зема излезот од командата за генерирање јавен клуч и ја пренасочува во датотеката со име /etc/wireguard/public. клуч.

Кога ќе ја извршите командата, повторно ќе добиете единечна линија со кодиран излез base64, кој е јавниот клуч за вашиот сервер WireGuard. Копирајте го некаде за повикување, бидејќи ќе треба да го дистрибуирате јавниот клуч на кој било врсник што се поврзува со серверот.

Чекор 2 - Избор на IPv4 и IPv6 адреси

Во претходниот дел, го инсталиравте WireGuard и генериравте пар клучеви што ќе се користи за шифрирање на сообраќајот до и од серверот. Во овој дел, ќе креирате конфигурациска датотека за серверот и ќе го поставите WireGuard да се стартува автоматски кога вашиот сервер ќе се рестартира. Исто така, ќе дефинирате приватни IPv4 и IPv6 адреси што ќе ги користите со вашиот WireGuard сервер и колегите.

Ако планирате да користите и IPv4 и IPv6 адреси, тогаш следете ги двата од овие делови. Во спротивно, следете ги упатствата во соодветниот дел за потребите на мрежата на вашата VPN.

Чекор 2(а) - Избор на опсег IPv4

Ако го користите вашиот WireGuard сервер со IPv4 врсници, на серверот му треба опсег на приватни IPv4 адреси за користење за клиентите и за неговиот тунелен интерфејс. Можете да изберете кој било опсег на IP адреси од следните резервирани блокови на адреси (ако сакате да дознаете повеќе за тоа како се распределуваат овие блокови, посетете ја спецификацијата RFC 1918):

  • 10.0.0.0 до 10.255.255.255 (префикс 10/8)
  • 172.16.0.0 до 172.31.255.255 (172.16/12 префикс)
  • 192.168.0.0 до 192.168.255.255 (192.168/16 префикс)

За целите на ова упатство, ќе користиме 10.8.0.0/24 како блок на IP адреси од првиот опсег на резервирани IP-адреси. Овој опсег ќе овозможи до 255 различни врснички врски и генерално не треба да има преклопувачки или конфликтни адреси со други приватни опсези на IP. Слободно изберете опсег на адреси што работи со вашата мрежна конфигурација ако овој опсег на пример не е компатибилен со вашите мрежи.

Серверот WireGuard ќе користи единствена IP адреса од опсегот за својата IPv4 адреса на приватниот тунел. Тука ќе користиме 10.8.0.1/24, но може да се користи која било адреса во опсегот од 10.8.0.1 до 10.8.0.255. Забележете ја IP адресата што ќе ја изберете ако користите нешто различно од 10.8.0.1/24. Ќе ја додадете оваа IPv4 адреса во конфигурациската датотека што ја дефиниравте во Чекор 3 — Креирање на конфигурација на серверот WireGuard.

Чекор 2(б) - Избор на опсег IPv6

Ако користите WireGuard со IPv6, тогаш ќе треба да генерирате единствен локален IPv6 unicast адресен префикс врз основа на алгоритмот во RFC 4193. Адресите што ги користите со серверот WireGuard ќе бидат поврзани со интерфејс на виртуелен тунел. Ќе треба да завршите неколку чекори за да генерирате случаен, единствен IPv6 префикс во резервираниот fd00::/8 блок на приватни IPv6 адреси.

Според RFC, препорачаниот начин да се добие единствен префикс IPv6 е да се комбинира времето од денот со единствена идентификациона вредност од систем како сериски број или ID на уред. Тие вредности потоа се хашираат и скратуваат што резултира со збир на битови кои можат да се користат како единствена адреса во резервираниот приватен fd00::/8 блок на IP-адреси.

За да започнете да генерирате опсег IPv6 за вашиот сервер WireGuard, соберете 64-битен временски печат користејќи ја алатката date со следнава команда:

  1. date +%s%N

Ќе добиете број како следниот, кој е бројот на секунди (%s во командата date) и наносекунди (%N) од 1970-01-01 00:00:00 UTC комбинирани заедно:

Output
1650301699497770167

Запишете ја вредноста некаде за употреба подоцна во овој дел. Следно, копирајте ја вредноста machine-id за вашиот сервер од датотеката /var/lib/dbus/machine-id. Овој идентификатор е единствен за вашиот систем и не треба да се менува се додека постои серверот.

  1. cat /var/lib/dbus/machine-id

Ќе добиете излез како што следува:

/var/lib/dbus/machine-id
610cef4946ed46da8f71dba9d66c67fb

Сега треба да го комбинирате временскиот печат со machine-id и да ја хаширате добиената вредност користејќи го алгоритмот SHA-1. Командата ќе го користи следниов формат:

printf <timestamp><machine-id> | sha1sum

Извршете ја командата со замена во вредностите на вашиот временски печат и идентитетот на машината:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Ќе добиете хаш вредност како што следува:

Output
442adea1488d96388dae9ab816045b24609a6c18 -

Забележете дека излезот од командата sha1sum е хексадецимален, така што излезот користи два знака за да претставува еден бајт на податоци. На пример 4f и 26 во излезот на примерот се првите два бајта од хашираните податоци.

Алгоритмот во RFC бара само најмалку значајни (заостанати) 40 бита, или 5 бајти, од хашираниот излез. Користете ја командата cut за да ги испечатите последните 5 хексадецимални кодирани бајти од хашот:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

Аргументот -c ѝ кажува на командата cut да избере само одреден сет на знаци. Аргументот 31- му кажува на cut да ги испечати сите знаци од позицијата 31 до крајот на линијата за внесување.

Треба да добиете излез како што следува:

Output
24609a6c18

Во овој примерен излез, множеството бајти е: 24 60 9a 6c 18 .

Сега можете да го конструирате вашиот единствен IPv6 мрежен префикс со додавање на 5 бајти што сте ги генерирале со префиксот fd, одвојувајќи ги секои 2 бајти со : дебелото црево за читливост. Бидејќи секоја подмрежа во вашиот единствен префикс може да содржи вкупно 18,446,744,073,709,551,616 можни IPv6 адреси, можете да ја ограничите подмрежата на стандардна големина од /64 за едноставност.

Користејќи ги бајтите претходно генерирани со големината на подмрежата /64, добиениот префикс ќе биде следниот:

Unique Local IPv6 Address Prefix
fd24:609a:6c18::/64

Овој опсег fd24:609a:6c18::/64 е она што ќе го користите за да доделите поединечни IP адреси на вашите интерфејси на тунелот WireGuard на серверот и врсниците. За да доделите IP за серверот, додајте 1 по последните знаци ::. Добиената адреса ќе биде fd24:609a:6c18::1/64. Врсниците можат да користат која било IP адреса во опсегот, но вообичаено ќе ја зголемувате вредноста за еден секој пат кога ќе додавате врсник, на пр. fd24:609a:6c18::2/64. Забележете ја IP адресата и продолжете со конфигурирање на серверот WireGuard во следниот дел од ова упатство.

Чекор 3 - Креирање на конфигурација на серверот WireGuard

Пред да ја креирате конфигурацијата на вашиот сервер WireGuard, ќе ви требаат следниве информации:

  1. Проверете дали го имате достапниот приватен клуч од Чекор 1 — Инсталирање WireGuard и генерирање на пар клучеви.
  2. Ако користите WireGuard со IPv4, ќе ви треба IP адресата што сте ја избрале за серверот во чекор 2(а) - Избор на опсег IPv4, кој во овој пример е 10.8.0.1/24< /mark>.
  3. Ако користите WireGuard со IPv6, ќе ви треба IP адресата за серверот што сте го генерирале во чекор 2(б) — Избор на опсег IPv6. Во овој пример IP е fd24:609a:6c18::1/64.

Откако ќе го имате потребниот приватен клуч и IP адреса(и), креирајте нова конфигурациска датотека користејќи nano или претпочитаниот уредувач со извршување на следнава команда:

  1. sudo nano /etc/wireguard/wg0.conf

Додајте ги следните редови во датотеката, заменувајќи го вашиот приватен клуч на местото на означената вредност base64_encoded_private_key_goes_here и IP адресата(ите) на линијата Address. Можете исто така да ја промените линијата ListenPort ако сакате WireGuard да биде достапен на друга порта:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

Линијата SaveConfig осигурува дека кога интерфејсот WireGuard е исклучен, сите промени ќе се зачуваат во конфигурациската датотека.

Зачувајте ја и затворете ја датотеката /etc/wireguard/wg0.conf. Ако користите nano, можете да го направите тоа со CTRL+X, потоа Y и ENTER за потврда. Сега имате иницијална конфигурација на серверот на која можете да ја изградите во зависност од тоа како планирате да го користите вашиот WireGuard VPN сервер.

Чекор 4 - Прилагодување на мрежната конфигурација на серверот WireGuard

Ако користите WireGuard за да поврзете врсник со серверот WireGuard за да пристапите до услугите на само серверот, тогаш не треба да го пополните овој дел. Ако сакате да го насочите интернет сообраќајот на вашиот WireGuard Peer преку серверот WireGuard, тогаш ќе треба да го конфигурирате препраќањето IP следејќи го овој дел од упатството.

За да го конфигурирате препраќањето, отворете ја датотеката /etc/sysctl.conf на вашиот Wireguard сервер користејќи nano или претпочитаниот уредувач:

  1. sudo nano /etc/sysctl.conf

Ако користите IPv4 со WireGuard, додајте ја следнава линија на дното на датотеката:

net.ipv4.ip_forward=1

Ако користите IPv6 со WireGuard, додајте ја оваа линија на дното на датотеката:

net.ipv6.conf.all.forwarding=1

Ако користите и IPv4 и IPv6, погрижете се да ги вклучите и двете линии. Зачувајте ја и затворете ја датотеката кога ќе завршите.

За да ја прочитате датотеката и да ги вчитате новите вредности за вашата тековна терминална сесија, извршете:

  1. sudo sysctl -p
Output
net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

Сега вашиот WireGuard сервер ќе може да го пренасочува дојдовниот сообраќај од виртуелниот VPN етернет уред до другите на серверот, а од таму до јавниот интернет. Користењето на оваа конфигурација ќе ви овозможи да го насочите целиот веб сообраќај од вашиот WireGuard Peer преку IP адресата на вашиот сервер, а јавната IP адреса на вашиот клиент ќе биде ефективно скриена.

Сепак, пред сообраќајот да може правилно да се пренасочува преку вашиот сервер, ќе треба да конфигурирате некои правила за заштитен ѕид. Овие правила ќе обезбедат сообраќајот до и од вашиот WireGuard сервер и Peers да тече правилно.

Чекор 5 - Конфигурирање на заштитниот ѕид на серверот WireGuard

Во овој дел, ќе ја уредите конфигурацијата на серверот WireGuard за да додадете правила за заштитниот ѕид што ќе гарантираат правилно насочување на сообраќајот до и од серверот и клиентите. Како и со претходниот дел, прескокнете го овој чекор ако го користите само вашиот WireGuard VPN за поврзување машина со машина за да пристапите до ресурсите што се ограничени на вашиот VPN.

За да дозволите WireGuard VPN сообраќај преку заштитниот ѕид на серверот, ќе треба да овозможите маскирање, што е концепт на iptables кој обезбедува динамично превод на мрежна адреса (NAT) за правилно насочување на врските со клиентите.

Прво, пронајдете го јавниот мрежен интерфејс на вашиот сервер WireGuard користејќи ја под-командата ip route:

  1. ip route list default

Јавниот интерфејс е низата пронајдена во излезот на оваа команда што го следи зборот \dev. На пример, овој резултат го прикажува интерфејсот со име eth0, кој е означен подолу:

Output
default via 203.0.113.1 dev eth0 proto static

Забележете го името на вашиот уред бидејќи ќе го додадете во правилата iptables во следниот чекор.

За да додадете правила за заштитен ѕид на вашиот сервер WireGuard, повторно отворете ја датотеката /etc/wireguard/wg0.conf со nano или вашиот претпочитан уредувач.

  1. sudo nano /etc/wireguard/wg0.conf

На дното на датотеката по линијата SaveConfig=true, залепете ги следните редови:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Линиите PostUp ќе работат кога серверот WireGuard ќе го стартува виртуелниот VPN тунел. Во примерот овде, ќе додаде три правила ufw и iptables:

  • ufw рутата дозволува влез на wg0 излез на eth0 - Ова правило ќе дозволи препраќање IPv4 и IPv6 сообраќај што доаѓа на wg0 VPN интерфејс со мрежниот интерфејс eth0 на серверот. Работи во врска со вредностите net.ipv4.ip_forward и net.ipv6.conf.all.forwarding sysctl што ги конфигуриравте во претходниот дел.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Ова правило го конфигурира маскирањето и го препишува IPv4 сообраќајот што доаѓа на интерфејсот VPN wg0 за да се направи изгледа како да потекнува директно од јавната IPv4 адреса на серверот WireGuard.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Ова правило го конфигурира маскирањето и го препишува сообраќајот IPv6 што доаѓа на интерфејсот на VPN wg0 за да се направи изгледа како да потекнува директно од јавната IPv6 адреса на серверот WireGuard.

Правилата PreDown работат кога серверот WireGuard го запира виртуелниот VPN тунел. Овие правила се обратни од правилата PostUp и функционираат да ги поништат правилата за препраќање и маскирање за VPN интерфејсот кога VPN е прекината.

Во двата случаи, уредете ја конфигурацијата за да ги вклучите или исклучите правилата IPv4 и IPv6 што се соодветни за вашата VPN. На пример, ако само користите IPv4, тогаш можете да ги исклучите линиите со командите ip6tables.

Спротивно на тоа, ако користите само IPv6, тогаш уредете ја конфигурацијата за да ги вклучи само командите ip6tables. Линиите ufw треба да постојат за која било комбинација на мрежи IPv4 и IPv6. Зачувајте ја и затворете ја датотеката кога ќе завршите.

Последниот дел од конфигурирањето на заштитниот ѕид на вашиот сервер WireGuard е да дозволите сообраќај до и од самата WireGuard UDP порта. Ако не сте ја промениле портата во датотеката /etc/wireguard/wg0.conf на серверот, портата што ќе ја отворите е 51820. Ако избравте друга порта при уредување на конфигурацијата, не заборавајте да ја замените во следнава команда UFW.

Во случај да сте заборавиле да ја отворите SSH портата при следењето на предусловното упатство, додајте го и овде:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Забелешка: ако користите друг заштитен ѕид или сте ја приспособиле конфигурацијата на UFW, можеби ќе треба да додадете дополнителни правила за заштитен ѕид. На пример, ако одлучите да го тунелизирате целиот ваш мрежен сообраќај преку VPN конекцијата, ќе треба да се осигурате дека сообраќајот на пристаништето 53 е дозволен за барањата за DNS и портите како 80 и 443 за сообраќај HTTP и HTTPS соодветно. Ако има други протоколи што ги користите преку VPN, тогаш ќе треба да додадете правила и за нив.

Откако ќе ги додадете тие правила, оневозможете и повторно овозможете UFW да го рестартира и вчитајте ги промените од сите датотеки што сте ги измениле:

  1. sudo ufw disable
  2. sudo ufw enable

Можете да потврдите дека правилата се на место со извршување на командата ufw status. Стартувај го и треба да добиеш излез како што следува:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

Вашиот WireGuard сервер сега е конфигуриран да правилно се справува со сообраќајот на VPN, вклучувајќи проследување и маскирање за врсниците. Со воспоставените правила за заштитен ѕид, можете да ја стартувате самата услуга WireGuard за да слушате за врснички врски.

Чекор 6 - Стартување на серверот WireGuard

WireGuard може да се конфигурира да работи како услуга systemd користејќи ја неговата вградена скрипта wg-quick. Иако можете рачно да ја користите командата wg за да го креирате тунелот секогаш кога сакате да го користите VPN, тоа е рачен процес кој станува повторувачки и склон кон грешки. Наместо тоа, можете да користите systemctl за управување со тунелот со помош на скриптата wg-quick.

Користењето на услугата systemd значи дека можете да го конфигурирате WireGuard да се стартува при подигнување, така што ќе можете да се поврзете на вашиот VPN во секое време додека работи серверот. За да го направите ова, овозможете ја услугата wg-quick за тунелот wg0 што сте го дефинирале со додавање на systemctl:

  1. sudo systemctl enable wg-quick@wg0.service

Забележете дека командата го одредува името на тунелот wg0 името на уредот како дел од името на услугата. Ова име се пресликува во конфигурациската датотека /etc/wireguard/wg0.conf. Овој пристап кон именување значи дека можете да креирате онолку посебни VPN тунели колку што би сакале користејќи го вашиот сервер.

На пример, може да имате уред за тунел и името на prod и неговата конфигурациска датотека ќе биде /etc/wireguard/prod.conf. Секоја конфигурација на тунел може да содржи различни поставки за IPv4, IPv6 и клиентски заштитен ѕид. На овој начин, можете да поддржувате повеќе, различни врснички врски, секоја со свои уникатни IP адреси и правила за рутирање.

Сега стартувајте ја услугата:

  1. sudo systemctl start wg-quick@wg0.service

Проверете двапати дали услугата WireGuard е активна со следнава команда. Треба да видите active (работи) на излезот:

  1. sudo systemctl status wg-quick@wg0.service
Output
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Излезот ги прикажува командите ip што се користат за креирање на виртуелниот уред wg0 и за доделување на IPv4 и IPv6 адресите што сте ги додале во конфигурациската датотека. Можете да ги користите овие правила за решавање проблеми во тунелот или со самата команда wg ако сакате да се обидете рачно да го конфигурирате интерфејсот VPN.

Кога серверот е конфигуриран и работи, следниот чекор е да ја конфигурирате вашата клиентска машина како WireGuard Peer и да се поврзете со серверот WireGuard.

Чекор 7 - Конфигурирање на WireGuard Peer

Конфигурирањето на врсник на WireGuard е слично на поставувањето на серверот WireGuard. Откако ќе го инсталирате клиентскиот софтвер, ќе генерирате пар на јавен и приватен клуч, ќе одлучите за IP адреса или адреси за врсникот, ќе дефинирате конфигурациска датотека за врсникот, а потоа ќе го стартувате тунелот користејќи го wg- скрипта брза.

Можете да додадете онолку врсници колку што сакате на вашиот VPN со генерирање на пар клучеви и конфигурација користејќи ги следните чекори. Ако додадете повеќе врсници на VPN, не заборавајте да ги следите нивните приватни IP адреси за да спречите судири.

За да го конфигурирате WireGuard Peer, проверете дали сте го инсталирале пакетот WireGuard користејќи ги следните команди apt. На врсниците на WireGuard:

  1. sudo apt update
  2. sudo apt install wireguard

Креирање на пар клучеви на WireGuard Peer

Следно, ќе треба да го генерирате парот клучеви на врсникот користејќи ги истите чекори како што ги користевте на серверот. Од вашата локална машина или оддалечен сервер што ќе служи како врсник, продолжете и креирајте го приватниот клуч за врсникот користејќи ги следните команди:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Повторно ќе добиете единствена линија со кодиран излез base64, што е приватниот клуч. Копија од излезот е зачувана и во /etc/wireguard/private.key. Внимателно забележете го приватниот клуч што е излезен бидејќи ќе треба да го додадете во конфигурациската датотека на WireGuard peer подоцна во овој дел.

Следно, користете ја следнава команда за да ја креирате датотеката со јавен клуч:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Повторно ќе добиете единствена линија со кодиран излез base64, кој е јавниот клуч за вашиот WireGuard Peer. Копирајте го некаде за повикување, бидејќи ќе треба да го дистрибуирате јавниот клуч на серверот WireGuard за да воспоставите шифрирана врска.

Креирање на конфигурациската датотека на WireGuard Peer

Сега кога имате пар клучеви, можете да креирате конфигурациска датотека за врсникот што ги содржи сите информации што му се потребни за да воспостави врска со серверот WireGuard.

Ќе ви требаат неколку информации за конфигурациската датотека:

  • Кодираниот приватен клуч base64 што го генериравте на врсникот.
  • Опсегот на адреси IPv4 и IPv6 што сте ги дефинирале на серверот WireGuard.
  • base64 кодираниот јавен клуч од серверот WireGuard.
  • Јавната IP адреса и бројот на портата на серверот WireGuard. Обично ова ќе биде IPv4 адресата, но ако вашиот сервер има IPv6 адреса и вашата клиентска машина има IPv6 конекција на интернет, можете да ја користите оваа наместо IPv4.

Со сите овие информации при рака, отворете нова датотека /etc/wireguard/wg0.conf на WireGuard Peer машината користејќи nano или претпочитаниот уредувач:

  1. sudo nano /etc/wireguard/wg0.conf

Додајте ги следните редови во датотеката, заменувајќи ги различните податоци во означените делови по потреба:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.**2**/24 Address = fd24:609a:6c18::**2**/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

Забележете како првата линија Адреса користи IPv4 адреса од подмрежата 10.8.0.0/24 што сте ја избрале претходно. Оваа IP адреса може да биде што било во подмрежата се додека е различна од IP адресата на серверот. Зголемувањето на адресите за 1 секој пат кога додавате врсник е генерално најлесниот начин за распределба на IP-адреси.

Исто така, забележи како втората линија Address користи IPv6 адреса од подмрежата што сте ја генерирале порано и ја зголемува адресата на серверот за еден. Повторно, секоја IP адреса во опсегот е валидна ако одлучите да користите друга адреса.

Друг значаен дел од датотеката е последната линија AllowedIPs. Овие два опсези на IPv4 и IPv6 му наложуваат на врсниците да испраќа сообраќај преку VPN само ако одредишниот систем има IP адреса во кој било опсег. Користејќи ја директивата AllowedIPs, можете да ја ограничите VPN на peer да се поврзува само со други врсници и услуги на VPN или можете да ја конфигурирате поставката да го тунелира целиот сообраќај преку VPN и да го користите серверот WireGuard како порта.

Ако користите само IPv4, тогаш испуштете го задоцнетиот опсег fd24:609a:6c18::/64 (вклучувајќи ја запирката ,). Спротивно на тоа, ако користите само IPv6, тогаш вклучете го само префиксот fd24:609a:6c18::/64 и изоставете го опсегот 10.8.0.0/24 IPv4.

Во двата случаи, ако сакате да го испратите целиот сообраќај на вашите колеги преку VPN и да го користите серверот WireGuard како порта за целиот сообраќај, тогаш можете да користите 0.0.0.0/0, што ја претставува целата IPv4 адресен простор и ::/0 за целиот адресен простор на IPv6.

(Факултативно) Конфигурирање на Peer да го насочува целиот сообраќај преку тунелот

Ако сте избрале да го насочувате целиот сообраќај на врсниците преку тунелот користејќи ги маршрутите 0.0.0.0/0 или ::/0 и врсникот е далечински систем, тогаш ќе треба да ги завршите чекорите во овој дел. Ако вашиот врсник е локален систем, тогаш најдобро е да го прескокнете овој дел.

За оддалечените врсници до кои пристапувате преку SSH или некој друг протокол користејќи јавна IP адреса, ќе треба да додадете некои дополнителни правила во датотеката wg0.conf на врсниците. Овие правила ќе гарантираат дека сè уште можете да се поврзете со врсниот систем надвор од тунелот кога тој е поврзан. Во спротивно, кога ќе се воспостави тунелот, целиот сообраќај што вообичаено би се управувал на интерфејсот на јавната мрежа нема да биде правилно насочен за да се заобиколи интерфејсот на тунелот wg0, што доведува до недостапен далечински систем.

Прво, ќе треба да ја одредите IP адресата што врсниот систем ја користи како стандардна порта. Извршете ја следнава команда ip route:

  1. ip route list table main default

Ќе добиете излез како што следува:

Output
default via 203.0.113.1 dev eth0 proto static

Забележете ја означената IP адреса на порталот 203.0.113.1 за подоцнежна употреба и уредот eth0. Името на вашиот уред може да биде различно. Ако е така, заменете го на местото eth0 во следните команди.

Следно, пронајдете ја јавната IP адреса за врсниот систем со испитување на уредот со командата ip address show:

  1. ip -brief address show eth0

Ќе добиете излез како што следува:

Output
eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

Во овој примерен излез, нагласената 203.0.113.5 IP (без задоцнетото /20) е јавната адреса што е доделена на eth0 уред што ќе треба да го додадете во конфигурацијата на врсниците на WireGuard.

Сега отворете ја датотеката /etc/wireguard/wg0.conf на WireGuard Peer со nano или вашиот претпочитан уредувач.

  1. sudo nano /etc/wireguard/wg0.conf

Пред линијата [Peer], додајте ги следните 4 линии:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

Овие линии ќе создадат приспособено правило за рутирање и ќе додадат приспособена рута за да се осигураат дека јавниот сообраќај кон врсниот систем ја користи стандардната порта.

  • PostUp=ip правило за додавање табела 200 од 203.0.113.5 - Оваа команда создава правило кое проверува за какви било записи за рутирање во табелата со нумерација 200 кога IP-а се совпаѓа со јавната 203.0.113.5 адреса на врсниот систем.
  • PostUp=ip route додадете табела 200 стандардно преку 203.0.113.1 - Оваа команда осигурува дека секој сообраќај што се обработува од табелата 200 ќе користете ја портата 203.0.113.1 за рутирање, наместо интерфејсот WireGuard.

Линиите PreDown го отстрануваат приспособеното правило и маршрутата кога тунелот е исклучен.

Забелешка: Бројот на табелата 200 е произволен кога се конструираат овие правила. Можете да користите вредност помеѓу 2 и 252, или можете да користите приспособено име со додавање етикета во датотеката /etc/iproute2/rt_tables и потоа повикувајќи се на името наместо нумеричката вредност.

За повеќе информации за тоа како функционираат табелите за рутирање во Линукс, посетете го Водичот за администрирање на мрежата на IP слој со Linux.

Ако го насочувате целиот сообраќај на врсниците преку VPN, проверете дали сте ги конфигурирале точните правила sysctl и iptables на серверот WireGuard во чекор 5 — Конфигурирање на заштитниот ѕид на серверот WireGuard .

(Изборно) Конфигурирање на резолутори на DNS на WireGuard Peer

Ако го користите серверот WireGuard како порта VPN за целиот сообраќај на вашите колеги, ќе треба да додадете линија во делот [Интерфејс] што ги одредува резолуторите на DNS. Ако не ја додадете оваа поставка, тогаш вашите барања за DNS можеби нема да бидат заштитени со VPN или може да бидат откриени на вашиот Интернет-провајдер (ISP) или на други трети страни.

Ако користите WireGuard само за пристап до ресурсите на мрежата VPN или во конфигурација peer-to-peer, тогаш можете да го прескокнете овој дел.

За да додадете резолутори на DNS во конфигурацијата на вашиот врсник, прво одредете кои DNS сервери ги користи вашиот сервер WireGuard. Извршете ја следнава команда на WireGuard Server, заменувајќи го името на вашиот етернет уред наместо eth0 ако е различно од овој пример:

  1. resolvectl dns eth0

Треба да добиете излез како што следува:

Output
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

IP-адресите што се излегуваат се резолуторите на DNS што ги користи серверот. Можете да изберете да користите било кој или сите, или само IPv4 или IPv6 во зависност од вашите потреби. Забележете ги решавачите што ќе ги користите.

Следно, ќе треба да ги додадете избраните решавачи во конфигурациската датотека на WireGuard Peer. Назад на WireGuard Peer, отворете ја датотеката /etc/wireguard/wg0.conf користејќи nano или претпочитаниот уредувач:

  1. sudo nano /etc/wireguard/wg0.conf

Пред линијата [Peer], додадете го следново:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Повторно, во зависност од вашите преференции или барања за IPv4 и IPv6, можете да ја уредувате листата според вашите потреби.

Откако ќе се поврзете со VPN во следниот чекор, можете да проверите дали испраќате барања за DNS преку VPN со користење на страница како DNS leak test.com.

Можете исто така да проверите дали вашиот врсник ги користи конфигурираните резолутори со командата resolvectl dns како што сте работеле на серверот. Треба да добиете излез како што следува, покажувајќи ги резолуторите на DNS што сте ги конфигурирале за тунелот VPN:

Output
Global: 67.207.67.2 67.207.67.3 . . .

Со сите овие поставки за разрешувач на DNS, сега сте подготвени да го додадете јавниот клуч на врсникот на серверот и да го стартувате тунелот WireGuard на врсникот.

Чекор 8 - Додавање на јавниот клуч на Peer на серверот WireGuard

Пред да го поврзете врсникот со серверот, важно е да го додадете јавниот клуч на врсникот на серверот WireGuard. Овој чекор гарантира дека ќе можете да се поврзете и да го насочувате сообраќајот преку VPN. Без да го завршите овој чекор, серверот WireGuard нема да дозволи врсникот да испраќа или прима сообраќај преку тунелот.

Осигурете се дека имате копија од кодираниот јавен клуч base64 за WireGuard Peer со извршување на:

  1. sudo cat /etc/wireguard/public.key
Output
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Сега најавете се на серверот WireGuard и извршете ја следнава команда:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Забележете дека делот allowed-ips од командата зема список со IPv4 и IPv6 адреси разделени со запирки. Можете да наведете поединечни IP-адреси ако сакате да ја ограничите IP-адресата што може да си ја додели врсникот, или опсег како во примерот ако вашите колеги можат да користат која било IP адреса во опсегот VPN. Исто така, имајте предвид дека ниту еден врсник не може да ја има истата поставка allowed-ips.

Ако сакате да ги ажурирате allowed-ips за постоечки врсници, можете повторно да ја извршите истата команда, но да ги промените IP адресите. Поддржани се повеќе IP адреси. На пример, за да го смените WireGuard Peer што штотуку го додадовте за да додадете IP како 10.8.0.100 на постоечките 10.8.0.2 и fd24:609a:6c18: :2 IP-а, би го извршиле следново:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Откако ќе ја извршите командата за додавање на врсникот, проверете го статусот на тунелот на серверот користејќи ја командата wg:

  1. sudo wg
Output
interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

Забележете како линијата peer го прикажува јавниот клуч на WireGuard Peer и IP-адресите или опсегот на адреси што е дозволено да ги користи за да си додели IP.

Сега кога ги дефиниравте параметрите за поврзување на врсниците на серверот, следниот чекор е да го стартувате тунелот на врсникот.

Чекор 9 - Поврзување на WireGuard Peer со тунелот

Сега кога и вашиот сервер и врсник се конфигурирани да го поддржуваат вашиот избор на IPv4, IPv6, препраќање пакети и резолуција DNS, време е да го поврзете врсникот со тунелот VPN.

Бидејќи можеби сакате да е вклучен VPN само за одредени случаи на употреба, ќе ја користиме командата wg-quick за рачно да ја воспоставиме врската. Ако сакате да го автоматизирате стартувањето на тунелот како на серверот, следете ги чекорите во Чекор 6 - Стартувајте го делот WireGuard Server наместо да ја користите командата wq-quick.

Во случај да го насочувате целиот сообраќај преку VPN и сте поставиле препраќање DNS, ќе треба да ја инсталирате алатката resolvconf на WireGuard Peer пред да го стартувате тунелот. Извршете ја следнава команда за да го поставите ова:

  1. sudo apt install resolvconf

За да го стартувате тунелот, извршете го следново на WireGuard Peer:

  1. sudo wg-quick up wg0

Ќе добиете излез како што следува:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

Забележете ги означените IPv4 и IPv6 адреси што сте ги доделиле на врсниците.

Ако ги поставите AllowedIPs на peer на 0.0.0.0/0 и ::/0 (или да користите опсези различни од оние што избравте за VPN), тогаш вашиот излез ќе личи на следново:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

Во овој пример, забележете ги означените правци што ги додаде командата, кои одговараат на AllowedIPs во конфигурацијата на врсниците.

Можете да го проверите статусот на тунелот на врсникот користејќи ја командата wg:

  1. sudo wg
Output
interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

Исто така, можете повторно да го проверите статусот на серверот и ќе добиете сличен излез.

Потврдете дека вашиот врсник користи VPN со користење на командите ip route и ip -6 route. Ако користите VPN како порта за целиот ваш интернет сообраќај, проверете кој интерфејс ќе се користи за сообраќајот наменет за 1.1.1.1 и 2606:4700:4700::1111 на CloudFlare разрешувачи на DNS.

Ако користите WireGuard само за пристап до ресурсите на VPN, заменете валидна IPv4 или IPv6 адреса како самиот портал во овие команди. На пример 10.8.0.1 или fd24:609a:6c18::1.

  1. ip route get 1.1.1.1
Output
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

Забележете дека се користи уредот wg0 и IPv4 адресата 10.8.0.2 што сте му ја доделиле на врсникот. Исто така, ако користите IPv6, извршете го следново:

  1. ip -6 route get 2606:4700:4700::1111
Output
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Повторно забележете го интерфејсот wg0 и IPv6 адресата fd24:609a:6c18::2 што му ја доделивте на врсникот.

Ако вашиот врсник има инсталиран прелистувач, можете да ја посетите и ipv6-test.com за да потврдите дека вашиот врсник го рутира својот сообраќај преку VPN.

Откако ќе бидете подготвени да се исклучите од VPN на peer, користете ја командата wg-quick:

  1. sudo wg-quick down wg0

Ќе добиете излез како следниот што покажува дека VPN тунелот е исклучен:

Output
[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

Ако ги поставите AllowedIPs на peer на 0.0.0.0/0 и ::/0 (или да користите опсези различни од оние што избравте за VPN), тогаш вашиот излез ќе личи на следново:

Output
[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

За повторно да се поврзете со VPN, извршете ја командата wg-quick up wg0 повторно на врсникот. Ако сакате целосно да ја отстраните конфигурацијата на врсниците од серверот WireGuard, можете да ја извршите следнава команда, обавезно да го замените точниот јавен клуч за врсникот што сакате да го отстраните:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Вообичаено, ќе треба да отстраните конфигурација на врсници само ако тој повеќе не постои или ако неговите клучеви за шифрирање се компромитирани или променети. Во спротивно, подобро е да ја оставите конфигурацијата на место за да може врсникот повторно да се поврзе со VPN без да бара секој пат да го додавате неговиот клуч и allowed-ips.

Заклучок

Во ова упатство, ги инсталиравте пакетот и алатките WireGuard и на серверот и на клиентот Debian 11 системите. Поставувавте правила за заштитен ѕид за WireGuard и ги конфигуриравте поставките на кернелот за да дозволите препраќање пакети користејќи ја командата sysctl на серверот. Научивте како да генерирате приватни и јавни клучеви за шифрирање WireGuard и како да ги конфигурирате серверот и врсниците (или врсниците) да се поврзуваат едни со други.

Ако вашата мрежа користи IPv6, научивте и како да генерирате единствен локален опсег на адреси што ќе го користите со врснички конекции. Конечно, научивте како да ограничите кој сообраќај треба да оди преку VPN со ограничување на мрежните префикси што може да ги користи врсниците, како и како да го користите серверот WireGuard како порта VPN за управување со целиот интернет сообраќај за врсниците.

Ако сакате да дознаете повеќе за WireGuard, вклучително и како да конфигурирате понапредни тунели или да користите WireGuard со контејнери, посетете ја официјалната документација на WireGuard.