Установка и настройка Wireguard на примере Debian 11

Wireguard
  1. Установка
  2. Настройка системы
  3. Генерация ключей сервера
  4. Генерация ключей клиента
  5. Настройка сервера
  6. Настройка клиента
  7. Проверка работы

Установка

Перед установкой обновимся (желательно):

sudo apt update && sudo apt upgrade

Добавим  репу и обновим индекс:

sudo sh -c "echo 'deb http://deb.debian.org/debian $(lsb_release -cs)-backports main contrib non-free' > /etc/apt/sources.list.d/$(lsb_release -cs)-backports.list" && sudo apt update

 Установим wireguard:

sudo apt install wireguard

Проверим, как все прошло:

sudo modprobe wireguard

Если ничего не выводит - значит все хорошо. Если будет ошибка на подобии этой:

modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.19.0-12-686

Тогда доставим заголовки:

sudo apt install linux-headers-$(uname --kernel-release)

 

Настройка системы

Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:

sudo nano /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 чтобы система перечитала конфигурацию:

sudo sysctl -p

 

Генерация ключей сервера

Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:

wg genkey | tee server.private.key && wg pubkey < server.private.key > server.public.key

 

Генерация ключей клиента

Аналогичным образом создаём ключи для клиента. Команда та же:

wg genkey | sudo tee client.private.key | wg pubkey | sudo tee client.public.key

 

Настройка сервера

Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:

sudo nano /etc/wireguard/wg0.conf
[Interface]
# Server address inside wg network
Address = 10.0.0.1/24,fd42:42:42::1/64
ListenPort = 63665
# Server private key
PrivateKey = OFCMMpdPYUTndTkTuCDCZDg6uYrzGcjcL6Tg4aAp5kU=
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]
# Client public key
PublicKey = 2g8MWhxN1QGLAfGwEnxHG38/krdcPbgjo87zSKurP1g=
# Client address inside wg network
AllowedIPs = 10.0.0.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.

Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.

 

Для запуска сервера используйте такую команду:

sudo wg-quick up wg0

Для остановки выполняем:

sudo wg-quick down wg0

С помощью systemd можно настроить автозагрузку сервиса:

sudo systemctl enable wg-quick@wg0

 

Настройка клиента

Конфигурационный файл клиента будет выглядеть примерно так:

nano client.conf
[Interface]
# Client private key
PrivateKey = GMJXo+phyNS/kodizn353D2MN8bPNOSqJEhQ83caKkY=
# Client IP address inside wg network
Address = 10.0.0.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4

[Peer]
# Server public key
PublicKey = xxIV2fvMp7J2H1GxVuQcfVi2TJ0lQ/2K8UXSKC/byhM=
## Server public address
Endpoint = 192.168.56.101:63665
# Routing to wg network
AllowedIPs = 0.0.0.0/0,::/0
# If this computer is behind a NAT, add line:
# PersistentKeepAlive = 25

 

Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:

  • PrivateKey - приватный ключ клиента, сгенерированный ранее;
  • Address - IP адрес интерфейса wg0 клиента;
  • DNS - серверы DNS, которые будут использоваться для разрешения доменных имён;
  • PublicKey - публичный ключ сервера, к которому надо подключится.
  • Endpoint - здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
  • AllowedIPs - IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.

После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.

 

Ставим WireGuard на клиенте, копируем конфигурационный файл клиента в /etc/wireguard/wg0.conf. Подключение выполняется аналогично запуску сервера:

sudo wg-quick up wg0

 

После этого вы можете посмотреть статистику по подключению с помощью команды:

sudo wg show

 

Проверка работы

Чтобы убедиться что всё работает можно выполнить ping до сервера WireGuard. Он должен быть доступен:

ping 10.0.0.1

Если пакеты идут, значит всё хорошо. Если же нет, надо внимательно проверять инструкцию и смотреть что сделано не так. У WireGuard здесь есть проблемы. У программы нет подробных логов, где можно было бы посмотреть какая ошибка произошла, а причин проблем может быть очень много. Чаще всего - это несоответствующие ключи, закрытый порт или неверный адрес сервера. Доступность порта на сервере можно проверить с помощью утилиты nc. Надо запускать на клиентской машине:

nc -z -v -u 192.168.56.101 63665

Также можно убедится, что пакеты WireGuard доходят к серверу, для этого используйте tcpdump на сервере:

tcpdump -n -i enp0s8 port 63665

Вместо enp0ss вам надо прописать имя своего сетевого интерфейса.

 

https://habr.com/ru/post/521468/

 

 

Комментарии (0)