WireGuard: настройка VPN-сервера на Linux

0
14
Обложка статьи: WireGuard: настройка VPN-сервера на Linux

WireGuard даёт защищённый удалённый доступ к сети с минимальной конфигурацией: один файл на сервере и один на клиенте. Ниже установка на Debian/Ubuntu, маршрутизация и проверка. Ключи и адреса в примерах условные.

Шаг 1. Установка и ключи

apt install -y wireguard
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub

Приватный ключ никому не передают. Права на /etc/wireguard должны быть только у root. Для каждого клиента создайте свою пару ключей на его устройстве.

Шаг 2. Конфигурация сервера

Файл /etc/wireguard/wg0.conf:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

В AllowedIPs на стороне сервера указывайте только адрес этого клиента. Это одновременно маршрут и фильтр: клиент не сможет подставить чужой адрес.

Шаг 3. Маршрутизация в сеть

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

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl --system

Добавьте в блок [Interface] правила (замените eth0 на ваш внешний интерфейс):

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Если у вас nftables или firewalld, оформите эти правила в них: настройка firewall в Linux. Откройте порт: 51820/udp.

Шаг 4. Клиент

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 10.8.0.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 10.8.0.0/24, 192.168.10.0/24
PersistentKeepalive = 25

Если указать AllowedIPs = 0.0.0.0/0, весь трафик клиента пойдёт через сервер. Для доступа только к офисной сети перечислите нужные подсети, как выше.

Шаг 5. Запуск

systemctl enable --now wg-quick@wg0

Как проверить

wg show                      # на сервере: у peer есть latest handshake
ping 10.8.0.1                # с клиента
ip route get 192.168.10.5    # маршрут идёт через wg0

Если handshake не появляется, проверьте, что открыт 51820/udp, совпадают публичные ключи и верен Endpoint.

Риски и ограничения

  • Один компрометированный клиентский ключ даёт доступ ко всем подсетям из его AllowedIPs. Удаляйте peer сразу при потере устройства: wg set wg0 peer CLIENT_PUBLIC_KEY remove.
  • WireGuard не имеет встроенных учётных записей и MFA. Если нужна привязка к пользователям и второй фактор, используйте надстройки или другой продукт. Подробнее: MFA и управление доступом.
  • Для нового сервера сначала выполните базовый hardening.

Официальная документация: wireguard.com/quickstart.

Оставьте свой ответ