Wireguard — это протокол VPN с открытым исходным кодом, альтернативный протоколам IPSec, IKEv2 и OpenVPN. Wiruguard предназначен для операционных систем Linux и Unix, он работает в пространстве ядра Linux, что делает Wireguard более быстрым и надежным. Wireguard используется для создания защищенных туннельных соединений между двумя и более компьютерами.
Wireguard призван заменить такие VPN-протоколы, как IPSec, IKEv2 и OpenVPN. Wireguard легче, быстрее, проще в настройке и эффективнее. При этом Wiregurad не стал жертвовать аспектом безопасности VPN-протокола. Wireguard поддерживает современную криптографию, такую как протокольный каркас Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, а также безопасные доверенные конструкции.
По сравнению с другими VPN-протоколами, такими как OpenVPN, IPSec и IKEv2, wireguard является новым VPN-протоколом. Wireguard был выпущен в 2015 году Джейсоном А. Доненфельдом в качестве альтернативного VPN-протокола. В 2020 году он был включен в ядро Linux v5.6 Линусом Торвальдсом и в том же году портирован на FreeBSD 13.
В этом руководстве вы узнаете, как установить и настроить Wirgeuard Server на сервере Rocky Linux 9. Вы также узнаете, как настроить клиентскую машину для подключения к серверу Wireguard.
В качестве клиентской машины в данном примере можно использовать любой дистрибутив Linux. Но в данном руководстве будет использоваться клиентская машина Rocky Linux, один из дистрибутивов на базе RHEL9.
Подготовка
Для начала работы с этим руководством необходимо убедиться, что у вас есть следующие требования:
Сервер Rocky Linux 9 — В данном примере используется сервер Rocky Linux с именем хоста ‘racknerd-572333’.
Пользователь, не являющийся пользователем root, с правами администратора sudo/root.
SELinux работает в разрешительном режиме.
Теперь, когда все необходимые условия подготовлены, можно приступать к установке и настройке сервера Wireguard.
Включаем модуль Wireguard в ядре
Последняя версия Rocky Linux 9 поставляется со стандартным ядром Linux 5.14, поверх которого по умолчанию встроен модуль ядра ‘wireguard’. В этом шаге вы включите модуль ядра Wirguard и установите ‘wireguard-tools’ на ваш сервер Rocky Linux.
Выполните приведенную ниже команду modprobe для включения модуля ядра ‘wireguard’. Затем проверьте список включенных модулей ядра с помощью команды ‘lsmod’.
sudo modprobe wireguard
lsmod | grep wireguard
Если модуль ядра ‘wireguard’ включен, то должен появиться вывод, аналогичный следующему:

Для постоянной загрузки модуля wireguard можно выполнить приведенную ниже команду, которая добавит новый конфигурационный файл в каталог ‘/etc/modules-load.d/’. Это приведет к постоянной загрузке модуля ядра wireguard при загрузке системы.
sudo echo wireguard > /etc/modules-load.d/wireguard.conf
После включения модуля ядра ‘wireguard’ необходимо установить пакет ‘wireguard-tools’ для управления сервером Wireguard. Сюда входит генерация ключей, запуск сервера Wireguard и многое другое.
Для установки ‘wireguard-tools’ выполните приведенную ниже команду dnf. Когда появится запрос на подтверждение, введите y и нажмите ENTER для продолжения.
sudo dnf install wireguard-tools
Теперь должна начаться установка ‘wireguard-tools’.

Теперь на вашем сервере Rocky Linux включен модуль ядра ‘wireguard’ и установлены инструменты ‘wireguard-tools’. Далее мы рассмотрим, как генерировать пары ключей для сервера и клиента Wireguard с помощью инструментов wireguard-tools.
Создание пары ключей сервера и клиента
Утилиты wireguard-tools представляют собой командную строку пользовательского пространства для управления развертыванием Wireguard. Две основные утилиты, предоставляемые wireguard-tools:
wg — утилита командной строки, которая может использоваться для настройки туннельного интерфейса wireguard. С помощью этой утилиты можно генерировать пары ключей, проверять текущее время выполнения и интерфейс wireguard, а также настраивать туннельный интерфейс Wireguard.
wg-quick — простая командная строка, с помощью которой можно управлять интерфейсом Wireguard. С помощью команды wg-quick можно запускать, останавливать и перезапускать любые интерфейсы wireguard.
Первым шагом после включения модуля ядра wireguard и установки wireguard-tools является генерация пар ключей для сервера и клиента Wireguard. Это можно сделать с помощью командной утилиты ‘wg‘.
Создание пары ключей сервера
Выполните приведенную ниже команду ‘wg genkey’ для генерации закрытого ключа сервера ‘/etc/wireguard/server.key’. Затем измените стандартное разрешение на ‘0400’, чтобы запретить запись и выполнение от других пользователей и групп.
wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key
После этого выполните приведенную ниже команду для генерации открытого ключа для сервера wireguard ‘/etc/wireguard/server.pub’. Открытый ключ wireguard создается на основе закрытого ключа wireguard ‘/etc/wireguard/server.key’.
sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
Вывод консоли:

Затем проверьте открытый и закрытый ключи сервера wireguard с помощью приведенной ниже команды cat.
cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub
У вас может быть разный ключ для открытого и закрытого ключей, но вывод будет примерно таким:

Создание пары клиентских ключей
После генерации пары ключей для сервера wireguard необходимо сгенерировать новую пару для клиента. В данном примере будет сгенерирована новая пара ключей с именем ‘client1’.
Выполните приведенную ниже команду для создания нового каталога ‘/etc/wireguard/clients’. Этот каталог будет использоваться для хранения клиентских пар ключей.
mkdir -p /etc/wireguard/clients
Далее выполните приведенную ниже команду ‘wg genkey’ для генерации закрытого ключа клиента ‘/etc/wireguard/clients/client1.key’. Затем с помощью команды ‘wg pubkey’ сгенерируйте открытый ключ клиента ‘/etc/wireguard/clients/client1.pub’.
wg genkey | tee /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub
Вывод консоли:

Теперь проверьте оба открытых и закрытых ключа клиента с помощью команды cat, приведенной ниже.
cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub
Ключ должен быть одинаковым для пары ключей сервера wireguard и клиента — это ключ в формате base64.

Настройка сервера Wireguard
На этом шаге вы создадите новый файл конфигурации для сервера wireguard, настроите интерфейс wireguard и настроите peer-соединение для клиентских подключений. Сюда входит настройка подсети VPN wireguard, IP-адреса сервера wireguard и IP-адреса клиента peer.
Для начала создайте новый файл конфигурации сервера wireguard ‘/etc/wireguard/wg0.conf’ с помощью приведенной ниже команды редактора nano.
sudo nano /etc/wireguard/wg0.conf
Добавьте в файл следующие строки и обязательно замените ‘PrivateKey’ на закрытый ключ сервера Wirguard ‘server.key’. Таким образом, вы также настроите интерфейс сервера Wireguard на работу с IP-адресом ‘10.8.0.1’. А для подключения клиентов будет использоваться UDP-порт 51820. И, наконец, включите параметр SaveConfig, который обеспечит сохранение всех изменений в файле конфигурации wireguard, даже если интерфейс Wireguard выключен.
[Interface]
# Wireguard Server private key - server.key
PrivateKey = ВАШ!<secret key>
# Wireguard interface will be run at 10.8.0.1
Address = 10.8.0.1/24
# Clients will connect to UDP port 51820
ListenPort = 51820
# Ensure any changes will be saved to the Wireguard config file
SaveConfig = true
Далее добавьте следующие строки для определения клиентского пирингового соединения. Обязательно измените параметр ‘PublicKey’ на открытый ключ клиента ‘client1.pub’. С помощью параметра ‘AllowedIPs’ можно указать, какому клиенту Wireguard разрешен доступ к этому пиру. В данном примере доступ к этому пиринговому соединению будет разрешен только клиентам с IP-адресом ‘10.8.0.8’. Кроме того, можно разрешить доступ к пиру wireguard в диапазоне подсетей внутренней сети, например ‘172.16.100.0/24’.
[Peer]
# Wireguard client public key - client1.pub
PublicKey = ВАШ!<secret key>
# clients' VPN IP addresses you allow to connect
# possible to specify subnet ⇒ [172.16.100.0/24]
AllowedIPs = 10.8.0.8/24
После завершения работы сохраните и выйдите из файла.
Таким образом, вы создали базовую конфигурацию для сервера Wireguard. Также было определено пиринговое соединение для клиента с использованием открытого ключа клиента ‘client1.pub’. На следующем этапе настройте проброс портов на сервере wireguard и установите правила firewalld для маршрутизации трафика.
Настройка перенаправления портов
Для настройки любого VPN-сервера необходимо включить проброс портов на сервере развертывания. В этом шаге мы включим проброс портов на сервере Rocky Linux с помощью файла ‘/etc/sysctl.conf’.
Откройте файл конфигурации ‘/etc/sysctl.conf’ с помощью редактора nano.
sudo nano /etc/sysctl.conf
Добавьте в нижнюю часть следующие строки. Эти строки включат проброс портов как для IPv4, так и для IPv6. Независимо от того, нужен вам IPv6 или нет, вы можете отключить его, поставив в начале строки комментарий ‘#’.
# Port Forwarding for IPv4
net.ipv4.ip_forward=1
# Port forwarding for IPv6
net.ipv6.conf.all.forwarding=1
Сохраните файл и по завершении работы выйдите из редактора.
Теперь выполните приведенную ниже команду ‘sysctl’ для применения изменений в файле ‘/etc/sysctl.conf’.
sudo sysctl -p
И вы получите результат, аналогичный этому:

После включения функции Port-Forwarding необходимо настроить firewalld, который будет использоваться для маршрутизации трафика от клиентов к определенному сетевому интерфейсу на сервере wireguard.
Настройка Firewalld
На этом шаге вы настроите firewalld на сервере Wireguard. С помощью firewalld вы будете направлять трафик клиентов на определенный сетевой интерфейс сервера wireguard. Это можно сделать, постоянно добавляя новые правила в firewalld или используя параметры wireguard ‘PostUp’ и ‘PostDown’ в конфигурационном файле Wireguard.
Перед началом работы выполните приведенную ниже команду ip для проверки сетевого интерфейса, используемого по умолчанию для доступа в Интернет на сервере wireguard.
ip route show default
Вы получите результат, подобный этому — В данном примере сервер wireguard использовал для доступа в Интернет интерфейс eth0. На вашем сервере сетевые интерфейсы могут иметь другие имена.

Далее откройте файл конфигурации сервера wireguard ‘/etc/wireguard/wg0.conf’ с помощью приведенной ниже команды редактора nano.
sudo nano /etc/wireguard/wg0.conf
Добавьте следующие строки в раздел ‘[Интерфейс]’.
PostUp = firewall-cmd --zone=public --add-masquerade
PostUp = firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostUp = firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
PostDown = firewall-cmd --zone=public --remove-masquerade
PostDown = firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostDown = firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
Сохраните и выйдите из файла.
Параметр ‘PostUp’ будет выполняться каждый раз, когда сервер Wirguard запускает VPN-туннель.
Параметр ‘PostDown’ будет выполняться всякий раз, когда сервер Wireguard останавливает VPN-туннель.
Команда ‘firewall-cmd —zone=public —add-masquerade’ включит маскарад в firewalld.
Команда ‘firewall-cmd —direct —add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT’ добавит firewalld rich-rule для трафика с интерфейса wireguard на eth0.
Команда ‘firewall-cmd —direct —add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE’ включит NAT через интерфейс eth0.
В параметре ‘PostDown’ все эти команды используются для отмены изменений в firewalld путем удаления правил, которые были применены во время выполнения команд в параметре ‘PostUp’.
Далее выполните приведенную ниже команду firewall-cmd для открытия UDP-порта 51820, который будет использоваться для клиентов wirguard. Затем перезагрузите firewalld, чтобы применить изменения.
sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload
Наконец, проверьте правила firewalld с помощью следующей команды firewall-cmd.
sudo firewall-cmd --list-all
Вы должны получить сообщение следующего содержания — The wireguard client port 51820/udp added to the firewalld.

Запуск сервера Wireguard
На этом шаге будет запущен и включен сервер Wireguard. Также будет выполнена проверка сервера Wireguard и проверка интерфейса wg0, который будет создан службой Wireguard.
Для запуска и включения сервера wireguard выполните приведенную ниже командную утилиту systemctl. Это приведет к запуску службы wireguard и созданию нового интерфейса wireguard ‘wg0’.
sudo systemctl start wg-quick@wg0.service
sudo systemctl enable wg-quick@wg0.service
Проверьте работу сервера wireguard с помощью приведенной ниже команды systemctl. Это позволит убедиться, что сервер wireguard запущен.
sudo systemctl status wg-quick@wg0.service
И вы получите результат, подобный этому — Сервер wireguard теперь включен и будет запускаться автоматически при загрузке. А статус сервера wireguard — запущен.

Вы также можете проверить интерфейс ‘wg0’, созданный сервером wireguard, с помощью приведенной ниже команды ip.
ip a show wg0
Вы получите подробный интерфейс wg0, который соответствует файлу конфигурации сервера wireguard ‘/etc/wireguard/wg0.conf’. Интерфейс wg0 должен иметь IP-адрес ‘10.8.0.1’, как описано в файле конфигурации wireguard ‘/etc/wireguard/wg0.conf’.

Другим способом запуска сервера wireguard является использование командной утилиты ‘wg-quick’, предоставляемой компанией wireguard-tools.
Выполните команду ‘wg-quick up’ для запуска сервера wireguard и ‘wg-quick down’ для остановки сервера wireguard. Также не забудьте указать полный путь к файлу конфигурации сервера wireguard ‘/etc/wireguard/wg0.conf’.
sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf
На данном этапе сервер wireguard запущен на сервере Rocky Linux. На следующем этапе вы настроите клиентскую машину и подключите ее к серверу wireguard.
Настройка клиента и подключение к серверу Wireguard
В этом шаге вы настроите wireguard на клиентской машине Linux, затем подключите клиентскую машину к серверу wireguard. В данном примере в качестве клиентской машины используется Rocky Linux с именем хоста ‘client1’, но можно использовать и любой дистрибутив Linux.
Войдите в систему на клиентской машине и выполните приведенную ниже команду dnf для установки пакета wireguard-tools на клиент. Эта операция также устанавливает зависимость ‘systemd-resolved’, которая будет использоваться wireguard-tools для управления DNS-резольвером.
sudo dnf install wireguard-tools
Введите y при появлении запроса и нажмите ENTER для продолжения.

Во время установки ‘wireguard-tools’ пакет systemd-resolved также устанавливается в качестве зависимости.
Выполните приведенную ниже команду для запуска и включения службы ‘systemd-resolved’.
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
После установки wireguard-tools и запуска systemd-resolved необходимо настроить NetworkManager на использование ‘systemd-resolved’ в качестве бэкенда DNS.
Откройте файл конфигурации NetworkManager ‘/etc/NetworkManager/NetworkManager.conf’ с помощью приведенной ниже команды редактора nano.
sudo nano /etc/NetworkManager/NetworkManager.conf
Добавьте параметр ‘dns’ в секцию ‘[main]’, как показано ниже.
[main]
dns=systemd-resolved
Сохраните файл и выйдите из редактора.
Далее выполните приведенную ниже команду для удаления файла ‘/etc/resolv.conf’ и создания нового файла симлинка файла ‘resolv.conf’, управляемого systemd-resolved.
rm -f /etc/resolv.conf
sudo ln -s /usr/lib/systemd/resolv.conf /etc/resolv.conf
Теперь перезапустите службу NetworkManager для применения изменений.
sudo systemctl restart NetworkManager
Теперь, когда NetworkManager настроен, можно приступать к настройке клиента wireguard.
Создайте новый файл ‘/etc/wireguard/wg-client1.conf’ с помощью редактора nano.
sudo nano /etc/wireguard/wg-client1.conf
Добавьте в файл следующие строки.
[Interface]
# Define the IP address for the client - must be matched with wg0 on Wireguard Server
Address = 10.8.0.8/24
# Private key for the client - client1.key
PrivateKey = 4FsCdtKr9GrLiX7zpNEYeqodMa5oSeHwH/m9hsNNfEs=
# Run resolvectl command
PostUp = resolvectl dns %i 1.1.1.1 9.9.9.9; resolvectl domain %i ~.
PreDown = resolvectl revert %i
[Peer]
# Public key of the Wireguard server - server.pub
PublicKey = aK+MQ48PVopb8j1Vjs8Fvgz5ZIG2k6pmVZs8iVsgr1E=
# Allow all traffic to be routed via Wireguard VPN
AllowedIPs = 0.0.0.0/0
# Public IP address of the Wireguard Server
Endpoint = 192.168.5.59:51820
# Sending Keepalive every 25 sec
PersistentKeepalive = 25
Сохраните файл и выйдите из редактора.
В разделе ‘[Интерфейс]’ необходимо задать следующее:
IP-адрес клиента должен совпадать с подсетью сервера Wireguard. В данном примере клиент Wireguard получит IP-адрес ‘10.8.0.8’.
Укажите DNS-сервер для клиента с помощью команды resolvectl.
Замените параметр ‘PrivateKey’ сгенерированным закрытым ключом клиента ‘client1.key’.
В разделе ‘[Peer]’ необходимо добавить следующее:
Открытый ключ сервера Wireguard ‘server.pub’ в параметр PublicKey.
Укажите параметр ‘AllowedIPs’ для ограничения доступа на VPN-аналоге, можно указать подсети сетей или просто поставить 0.0.0.0/0 для туннелирования всего трафика через VPN.
В параметре Endpoint укажите публичный IP-адрес сервера Wireguard или можно также использовать доменное имя.
Создав файл конфигурации клиента wireguard, можно запустить wireguard на клиентской машине с помощью команды ‘wg-quick up’, приведенной ниже.
wg-quick up wg-client1
Вы получите результат, подобный этому — Новый интерфейс wireguard ‘wg-client1’ создан и получил IP-адрес ‘10.8.0.8’.
Тут будет скриншот
Теперь проверьте интерфейс ‘wg-client1’ с помощью приведенной ниже команды ip.
ip a show wg-client1
Ниже приведен аналогичный вывод, который будет выведен на ваш терминал.
Тут будет скриншот
Проверить работу DNS-резольвера на интерфейсе wg-client1 можно также с помощью команды ‘resolvectl’, приведенной ниже.
resolvectl status wg-client1
Ниже приведен вывод, который вы получите на терминале — Интерфейс wireguard wg-client1 использовал DNS-резольвер, определенный через параметр ‘PostUp’, который использует ‘systemd-resolved’.
Тут будет скриншот
Кроме того, можно проверить подключение Wireguard с помощью команды ‘wg show’.
Выполните команду ‘wg show’ на машине клиента wireguard и получите результат, как показано на скриншоте ниже.
wg show
IP-адрес сервера wireguard должен отображаться в разделе ‘endpoint’. Кроме того, вы можете увидеть открытый ключ сервера wireguard ‘server.pub’.
Тут будет скриншот
Вернитесь на сервер wireguard и выполните приведенную ниже команду ‘wg show’.
wg show
Ниже приведен аналогичный вывод, который вы получите на терминале — в секции endpoint вы увидите публичный IP-адрес клиента, а в секции peer — открытый ключ клиента ‘client1.pub’.
Тут будет скриншот
Наконец, выполните приведенную ниже команду, чтобы убедиться, что клиентская машина может получить доступ к Интернету или к внутренней подсети сети Wireguard VPN.
ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com
Ниже приведен результат, который вы должны получить:
Клиентская машина может подключиться к серверу Wireguard, имеющему IP-адрес ‘10.8.0.1’.
Тут будет скриншот
Клиентская машина может выходить в Интернет. Весь трафик направляется через публичный IP-адрес сервера Wireguard.
Тут будет скриншот
Теперь вы настроили wireguard VPN на клиентской машине. Вы также проверили соединение между клиентской машиной и сервером wireguard.
Заключение
В этом руководстве вы установили и настроили VPN-сервер wireguard на Rocky Linux 9. Вы также узнали, как настроить клиентскую машину Rocky Linux для подключения к серверу wireguard. Кроме того, вы узнали, как включить проброс портов и настроить NAT через firewalld.
Наконец, вы узнали, как использовать утилиту командной строки ‘wg’ для генерации пар открытых и закрытых ключей и проверки VPN-соединений wireguard. Кроме того, вы узнали, как использовать команду ‘wg-quick’ для запуска и остановки соединения wireguard.
Если вы хотите узнать больше о WireGuard, посетите документацию WireGuard. Вы также можете посетить связанные с Wireguard темы GitHub, чтобы найти автоматизацию развертывания для WireGuard VPN Server.
Добавить комментарий