WireGuard на Ubuntu: безопасная настройка сервера и клиента с разбором маршрутизации

Введение в WireGuard​


WireGuard — это современная, быстрая и безопасная система VPN, разработанная с использованием передовых методов криптографии. По сравнению с классическими решениями, такими как IPsec или OpenVPN, WireGuard предлагает более простую архитектуру и меньшую нагрузку на ресурсы. Он работает как туннельный интерфейс, который может быть использован как для подключения одного устройства к удалённому серверу (peer-to-site), так и для соединения двух сетей (site-to-site).

WireGuard использует принцип Cryptokey Routing, при котором каждая пара ключей (приватный и публичный) связывается с набором IP-адресов, которым разрешено проходить через туннель. Это делает его особенно удобным для управления доступом и маршрутизацией трафика.

В данной статье мы подробно рассмотрим, как настроить WireGuard на Ubuntu, как создать сервер и клиент, как настроить маршрутизацию и обеспечить безопасность при работе за NAT.

Установка WireGuard на Ubuntu​


Предварительные требования​


Для установки WireGuard на Ubuntu необходимо:

  • Операционная система Ubuntu 20.04 или новее.
  • Доступ к root-правам или пользователю с правами sudo.

Установка из официального репозитория​


На большинстве современных версий Ubuntu WireGuard уже доступен в стандартных репозиториях. Установите его следующей командой:

Bash:
sudo apt update
sudo apt install wireguard

После установки проверьте, установлен ли модуль ядра:

Bash:
modinfo wireguard

Если модуль не загружен, выполните:

Bash:
sudo modprobe wireguard

Проверка установки​


Убедитесь, что утилита wg доступна:

Bash:
wg --version

Если вывод содержит номер версии, значит, установка прошла успешно.

Создание интерфейса WireGuard​


Для создания интерфейса WireGuard используется команда ip link:

Bash:
sudo ip link add dev wg0 type wireguard

Эта команда создаёт новый сетевой интерфейс wg0 типа wireguard. Если вы используете пользовательскую реализацию (например, на Windows или macOS), то команда будет отличаться:

Bash:
wg-quick up wg0

После создания интерфейса, назначьте ему IP-адрес:

Bash:
sudo ip address add dev wg0 192.168.2.1/24

Или, если вы хотите указать адрес соседа:

Bash:
sudo ip address add dev wg0 192.168.2.1 peer 192.168.2.2

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


WireGuard использует пары приватных и публичных ключей. Приватный ключ должен быть защищён, поэтому рекомендуется использовать umask 077 перед генерацией:

Bash:
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Ключи будут записаны в файлы privatekey и publickey.

Конфигурация сервера​


Создайте файл конфигурации сервера /etc/wireguard/wg0.conf:

INI:
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820
Address = 192.168.2.1/24

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 192.168.2.2/32

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzB6ssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 192.168.2.3/32

Здесь:

  • PrivateKey — приватный ключ сервера.
  • ListenPort — порт, на котором сервер будет принимать трафик.
  • Address — IP-адрес, который будет назначен интерфейсу.
  • AllowedIPs — диапазоны IP-адресов, которые могут проходить через этот туннель.

Конфигурация клиента​


Создайте файл конфигурации клиента /etc/wireguard/wg0.conf:

INI:
[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
Address = 192.168.2.2/24

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

  • Address — IP-адрес клиента.
  • Endpoint — адрес сервера.
  • AllowedIPs = 0.0.0.0/0 — перенаправление всего трафика через VPN.
  • PersistentKeepalive = 25 — отправка keepalive-пакетов каждые 25 секунд для обхода NAT.

Активация WireGuard​


Для активации интерфейса используйте wg-quick:

Bash:
sudo wg-quick up wg0

Чтобы автоматически включать интерфейс при старте системы, включите сервис:

Bash:
sudo systemctl enable wg-quick@wg0

Проверьте статус интерфейса:

Bash:
wg show

Настройка маршрутизации​


WireGuard работает как туннельный интерфейс, но для полноценной маршрутизации необходимо настроить таблицы маршрутизации и правила iptables.

Включение пересылки пакетов​


Включите пересылку пакетов в ядре:

Bash:
sudo sysctl net.ipv4.ip_forward=1

Добавьте строку в /etc/sysctl.conf для постоянного включения:

Bash:
net.ipv4.ip_forward=1

Настройка iptables​


Добавьте правила в iptables для пересылки трафика:

Bash:
sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Сохраните правила:

Bash:
sudo iptables-save > /etc/iptables/rules.v4

Обход NAT и Firewall​


WireGuard по умолчанию не отправляет keepalive-пакеты, что может вызвать проблемы при работе за NAT или фаерволом. Чтобы решить эту проблему, включите PersistentKeepalive в конфигурации клиента:

INI:
PersistentKeepalive = 25

Это гарантирует, что сервер будет знать, что клиент активен, даже если он не отправляет данные.

Безопасность и рекомендации​


  • Используйте уникальные ключи для каждого клиента.
  • Не храните приватные ключи в открытом виде.
  • Используйте umask 077 при генерации ключей.
  • Регулярно обновляйте систему и WireGuard.
  • Не открывайте порт 51820 в публичной сети без необходимости.

Диагностика и проверка работы​


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

Bash:
wg show
wg showconf wg0

Для просмотра статистики:

Bash:
wg show wg0 transfer

Проверьте подключение:

Bash:
ping 192.168.2.1

Примеры использования​


Подключение к серверу​


На клиенте:

Bash:
sudo wg-quick up wg0

Перенаправление всего трафика​


В клиентской конфигурации:

INI:
AllowedIPs = 0.0.0.0/0

Локальная сеть через VPN​


В серверной конфигурации:

INI:
AllowedIPs = 192.168.2.0/24

Заключение​


WireGuard — это современное и безопасное решение для VPN. Его простота и высокая производительность делают его идеальным выбором для большинства сценариев использования. При правильной настройке он обеспечивает надежную защиту трафика и простую маршрутизацию.

Для безопасной настройки WireGuard на Ubuntu:

  1. Установите WireGuard.
  2. Создайте ключи.
  3. Настройте сервер и клиент.
  4. Включите маршрутизацию и пересылку пакетов.
  5. Включите keepalive для работы за NAT.
  6. Проверьте работу.

Следуя этим шагам, вы сможете настроить надежный и безопасный VPN-туннель между устройствами.

Полезные команды​


  • wg — показать текущие интерфейсы.
  • wg showconf wg0 — показать конфигурацию.
  • wg-quick up wg0 — активировать интерфейс.
  • wg-quick down wg0 — деактивировать интерфейс.
  • ip addr show wg0 — показать IP-адреса.
  • ip route show — показать таблицу маршрутизации.
  • iptables -L — показать правила iptables.

Возможные ошибки​


  • Error: No such file or directory — отсутствие файла конфигурации.
  • Error: Invalid argument — неправильный формат конфигурации.
  • No route to host — проблема с маршрутизацией.
  • Connection refused — сервер не слушает.

WireGuard продолжает развиваться, и его использование становится всё более распространённым благодаря своей простоте и безопасности.

Источники​


 
Последнее редактирование модератором:
Назад
Верх Низ