Простая настройка WireGuard Linux
WireGuard - это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену OpenVPN и использует современную криптографию. Он реализован в виде модуля ядра Linux. Изначально он поддерживал только Linux, но потом были разработаны приложения для Windows, MacOS и Android.
В установке нет ничего сложного, выполните такие команды:
sudo apt update
sudo apt install wireguard
Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
Затем необходимо выполнить команду sysctl -p чтобы система перечитала конфигурацию:
sysctl -p
Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
Аналогичным образом создаём ключи для клиента. Команда та же:
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 63665
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A
POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE [Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
Файл разделен на две секции:
Interface - настройка сервера;
Peer - настройка клиентов, которые могут подключаться к серверу, секций Peer может быть несколько.
В данном случае мы настраиваем сервер WireGuard для работы с IPv4 и IPv6 одновременно, вот, что значат основные параметры:
Address - адрес сервера в сети VPN;
ListenPort - порт, на котором будет ожидать подключения WireGuard;
PrivateKey - приватный ключ сервера, сгенерированный ранее;
PostUp - команда, которая выполняется после запуска сервера. В данном случае включается поддержка MASQUERADE для интерфейса enp0s8, а также разрешается прием пакетов на интерфейсе wg0. Сетевые интерфейсы вам придется заменить на свои.
PostDown - выполняется после завершения работы WireGuard, в данном случае удаляет все правила, добавленные в PostUp.
Секции Peer содержат настройки клиентов, которые могут подключится к серверу:
PublicKey - публичный ключ клиента, сгенерированный ранее;
AllowedIPs - IP адрес, который может взять клиент. Обратите внимание, маска для IPv4 должна быть 32.
Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.
Конфигурационный файл клиента будет выглядеть примерно так:
[Interface]
PrivateKey = <client_private.key>
Address = 10.66.66.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = <server_public.key>
Endpoint = 192.168.56.101:63665
AllowedIPs = 0.0.0.0/0,::/0
Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:
PrivateKey - приватный ключ клиента, сгенерированный ранее;
Address - IP адрес интерфейса wg0 клиента;
DNS - серверы DNS, которые будут использоваться для разрешения доменных имён;
PublicKey - публичный ключ сервера, к которому надо подключится.
Endpoint - здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
AllowedIPs - IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.
После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.
Для запуска сервера используйте такую команду:
sudo wg-quick up wg0
Аналогично можно использовать systemd:
sudo systemctl start wg-quick@wg0
С помощью systemd можно настроить автозагрузку интерфейса:
sudo systemctl enable wg-quick@wg0
Подключение клиента выполняется аналогично запуску сервера. Если WireGuard уже установлен, а конфигурационный файл клиента находится по пути /etc/wireguard/wg0.conf:
sudo wg-quick up wg0
Если у вас не получается установить WireGuard самому, вы можете попробовать скрипт автоматической установки.