Установка и настройка Wireguard на примере Debian 11
- Установка
- Настройка системы
- Генерация ключей сервера
- Генерация ключей клиента
- Настройка сервера
- Настройка клиента
- Проверка работы
Установка
Перед установкой обновимся (желательно):
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)