Установка и настройка WireGuard Server на Ubunu / Debian
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-21 12:51:26 +07:00
create-wg-client.sh Загрузить файлы в «/» 2026-08-18 15:18:50 +07:00
README.md Обновить README.md 2026-08-21 12:51:26 +07:00
wg-monitor.sh Загрузить файлы в «/» 2026-08-20 10:40:44 +07:00

Инструкция по установке и настройке WireGuard VPN

1. Назначение

Данная инструкция описывает установку WireGuard на Debian-сервере, который одновременно выполняет роль:

  • VPN-сервера;
  • маршрутизатора между VPN и локальной сетью;
  • маршрутизатора к дополнительным сетям через VPN-клиентов;
  • NAT-шлюза.

Сервер имеет два сетевых интерфейса:

eth0 — внешняя сеть / Интернет
eth1 — внутренняя сеть

VPN работает через:

wg0

2. Схема сети

Общая схема:

                              INTERNET
                                  │
                                  │
                                 eth0
                                  │
                         ┌────────┴────────┐
                         │ WireGuard Server│
                         │                 │
                         │ eth0 — WAN      │
                         │ eth1 — LAN      │
                         │                 │
                         │ eth1:           │
                         │ 10.218.40.250   │
                         │                 │
                         │ wg0:            │
                         │ 172.18.0.1/24   │
                         └────────┬────────┘
                                  │
                                  │ eth1
                                  │
                         10.218.40.224/27
                                  │
                                  ▼
                         10.218.40.225
                         внутреннее устройство


                         VPN
                          │
                          ▼
                    172.18.0.2
                    VPN-клиент
                          │
             ┌────────────┼────────────┐
             │            │            │
             ▼            ▼            ▼
       10.218.40.x   10.218.41.x   отдельные
       VPN-сети      VPN-сеть      адреса

3. Адресация

WireGuard-сервер

wg0:
172.18.0.1/24

VPN-клиенты

Первый:

172.18.0.2

Второй:

172.18.0.3

Третий:

172.18.0.4

и далее.

Внутренняя сеть

10.218.40.224/27

Сервер:

10.218.40.250

Внутреннее устройство:

10.218.40.225

Диапазон сети:

Network:    10.218.40.224
Hosts:      10.218.40.225 - 10.218.40.254
Broadcast:  10.218.40.255

4. Маршрутизация

На сервере используется следующая схема:

10.218.40.0/27       → wg0
10.218.40.32/27      → wg0
10.218.40.64/27      → wg0
10.218.40.96/27      → wg0
10.218.40.128/27     → wg0
10.218.40.160/27     → wg0
10.218.40.192/27     → wg0

10.218.40.224/27     → eth1

10.218.40.252/32     → wg0
10.218.40.253/32     → wg0
10.218.40.254/32     → wg0

10.218.41.0/24       → wg0

Таким образом:

10.218.40.0 - 223  → VPN
10.218.40.224-251  → локальная сеть
10.218.40.252-254  → VPN
10.218.40.255       → локальная сеть / broadcast
10.218.41.0/24      → VPN

Это позволяет одновременно использовать локальную сеть 10.218.40.224/27 и VPN-сети внутри того же диапазона 10.218.40.0/24.


5. Требования

Перед установкой необходимо убедиться, что:

  • сервер работает под Debian;
  • присутствуют eth0 и eth1;
  • eth0 имеет доступ в Интернет;
  • eth1 подключён к внутренней сети;
  • UDP-порт 51820 доступен из Интернета;
  • если сервер находится за NAT, настроен проброс UDP 51820.

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

ip addr

Проверить маршруты:

ip route

Проверить Интернет:

ping -c 3 8.8.8.8

6. Настройка eth1

Интерфейс eth1 должен иметь:

10.218.40.250/27

Проверить:

ip addr show eth1

Если адрес не установлен:

ip addr add 10.218.40.250/27 dev eth1
ip link set eth1 up

Проверить:

ip addr show eth1

Должно быть:

inet 10.218.40.250/27

7. Проверка автоматически созданного маршрута

После назначения:

10.218.40.250/27

Linux автоматически создаёт маршрут:

10.218.40.224/27 dev eth1

Проверить:

ip route

Должно быть примерно:

10.218.40.224/27 dev eth1 proto kernel scope link src 10.218.40.250

Это важный маршрут.

Он обеспечивает доступ сервера к локальной сети:

10.218.40.225 - 10.218.40.254

8. Постоянная настройка eth1

Команда:

ip addr add 10.218.40.250/27 dev eth1

действует только до перезагрузки.

Поэтому необходимо настроить адрес постоянно.

Если сеть управляется через /etc/network/interfaces, пример:

auto eth1
iface eth1 inet static
    address 10.218.40.250/27

После изменения проверить конфигурацию.

Если сервер является LXC-контейнером Proxmox, IP eth1 предпочтительно задавать средствами Proxmox/LXC, чтобы адрес сохранялся после перезагрузки контейнера.


9. Установка WireGuard

Обновить список пакетов:

apt update

Установить WireGuard:

apt install -y wireguard-tools

Проверить:

wg --version

10. Включение IP forwarding

WireGuard-сервер должен разрешать маршрутизацию пакетов.

Открыть:

nano /etc/sysctl.conf

Добавить:

net.ipv4.ip_forward=1

Применить:

sysctl --system

Проверить:

sysctl net.ipv4.ip_forward

Результат:

net.ipv4.ip_forward = 1

11. Создание каталога WireGuard

mkdir -p /etc/wireguard
chmod 700 /etc/wireguard

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

Выполнить:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Посмотреть публичный ключ:

cat /etc/wireguard/publickey

Посмотреть приватный ключ:

cat /etc/wireguard/privatekey

Приватный ключ нельзя публиковать.

Не помещайте его в Git или публичный README.


13. Создание конфигурации WireGuard

Создать файл:

nano /etc/wireguard/wg0.conf

Базовая конфигурация:

[Interface]
Address = 172.18.0.1/24
ListenPort = 51820
PrivateKey = <PRIVATE_KEY_SERVER>

## В Proxmox
## IPv4/CIDR: 10.218.40.250/27
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

## Сети которые нужно добавить в маршрут 
[Peer]
AllowedIPs = 10.218.40.0/28, 10.218.40.16/28, 10.218.40.112/28, 10.218.41.0/28, 10.218.41.16/28, 10.218.41.112/28, 10.218.40.252/32, 10.218.40.253/32, 10.218.40.254/32
PublicKey = <PUBLIC_KEY_SERVER>

# Client: 1 (IP: 172.18.0.2)
[Peer]
PublicKey = <PUBLIC_KEY_CLIENT>
AllowedIPs = 172.18.0.2/32


# Client: 2 (IP: 172.18.0.3)
[Peer]
PublicKey = <PUBLIC_KEY_CLIENT>
AllowedIPs = 172.18.0.3/32

Заменить:

<PRIVATE_KEY_SERVER>

на содержимое:

cat /etc/wireguard/privatekey

и:

<PUBLIC_KEY_CLIENT>

на публичный ключ клиента.


14. Права на конфигурацию

Поскольку конфигурация содержит приватный ключ:

chmod 600 /etc/wireguard/wg0.conf

Проверить:

ls -l /etc/wireguard/wg0.conf

15. Создание ключей клиента

На клиентском устройстве установить WireGuard.

Создать ключи:

wg genkey | tee privatekey | wg pubkey > publickey

Получить приватный ключ:

cat privatekey

Получить публичный ключ:

cat publickey

Приватный ключ остаётся на клиенте.

Публичный ключ добавляется на сервер.


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

Для первого клиента:

[Interface]
Address = 172.18.0.2/24
PrivateKey = <PRIVATE_KEY_CLIENT>

[Peer]
PublicKey = <PUBLIC_KEY_SERVER>
AllowedIPs = 10.218.40.0/24, 172.18.0.0/24
Endpoint = <PUBLIC_IP_SERVER>:51820
PersistentKeepalive = 25

Здесь:

10.218.40.0/24

используется на клиенте как маршрут к нужным адресам сети.

При этом на самом сервере 10.218.40.224/27 остаётся маршрутом через eth1, потому что маршрутизация сервера и маршрутизация клиента — разные таблицы маршрутов.


17. Настройка внутреннего устройства

Основное внутреннее устройство:

10.218.40.225

Маска:

/27

Шлюз:

10.218.40.250

Для Debian/Ubuntu пример:

auto eth0
iface eth0 inet static
    address 10.218.40.225/27
    gateway 10.218.40.250
    dns-nameservers 8.8.8.8 1.1.1.1

Проверить:

ip addr
ip route

Должно быть:

10.218.40.225/27

и:

default via 10.218.40.250

18. Проверка локальной сети

На WireGuard-сервере:

ping -c 3 10.218.40.225

Если сервер получает ответ, локальная сеть работает.

Также:

ip route get 10.218.40.225

Ожидаемый результат:

10.218.40.225 dev eth1 src 10.218.40.250

19. Открытие UDP-порта

WireGuard использует:

UDP 51820

Разрешить вход:

iptables -A INPUT -p udp --dport 51820 -j ACCEPT

Проверить:

ss -lunp | grep 51820

Должно быть примерно:

UNCONN ... 0.0.0.0:51820 ...

Если сервер находится за NAT, необходимо сделать проброс:

UDP 51820
        ↓
WireGuard Server:51820

20. Запуск WireGuard

Запустить:

systemctl start wg-quick@wg0

Добавить автозапуск:

systemctl enable wg-quick@wg0

Проверить:

systemctl status wg-quick@wg0

21. Проверка WireGuard

wg show

Должно быть:

interface: wg0
  listening port: 51820

После подключения клиента:

latest handshake: ...

22. Проверка маршрутов

Выполнить:

ip route show | grep 10.218

Ожидается:

10.218.40.0/27 dev wg0
10.218.40.32/27 dev wg0
10.218.40.64/27 dev wg0
10.218.40.96/27 dev wg0
10.218.40.128/27 dev wg0
10.218.40.160/27 dev wg0
10.218.40.192/27 dev wg0

10.218.40.224/27 dev eth1

10.218.40.252/32 dev wg0
10.218.40.253/32 dev wg0
10.218.40.254/32 dev wg0

10.218.41.0/24 dev wg0

23. Проверка отдельных маршрутов

Локальное устройство

ip route get 10.218.40.225

Должно идти через:

eth1

VPN-сеть

ip route get 10.218.40.100

Должно идти через:

wg0

Адрес 10.218.40.252

ip route get 10.218.40.252

Должно идти через:

wg0

Адрес 10.218.40.253

ip route get 10.218.40.253

Должно идти через:

wg0

Адрес 10.218.40.254

ip route get 10.218.40.254

Должно идти через:

wg0

Сеть 10.218.41.x

ip route get 10.218.41.1

Должно идти через:

wg0

24. Скрипт управления клиентами

Для автоматического создания клиентов используется:

/root/create-wg-client.sh

Установить права:

chmod +x /root/create-wg-client.sh

Скрипт должен быть размещён именно:

/root/create-wg-client.sh

25. Создание клиента

Например:

/root/create-wg-client.sh new laptop

Скрипт создаст нового клиента и назначит ему свободный IP.

Например:

laptop → 172.18.0.2

Следующий:

/root/create-wg-client.sh new phone

получит:

phone → 172.18.0.3

26. Список клиентов

/root/create-wg-client.sh list

Пример:

📋 Список клиентов:
============================================
   👤 laptop -> IP: 172.18.0.2 (🔑 xTbY8K7fJkL3mN5...)
   👤 phone -> IP: 172.18.0.3 (🔑 Zl4q4n6aLOJcLv...)
============================================
Всего клиентов: 2

27. Получение конфигурации клиента

/root/create-wg-client.sh config laptop

Команда выводит готовую конфигурацию WireGuard.


28. Получение QR-кода

/root/create-wg-client.sh qr laptop

QR-код можно отсканировать приложением WireGuard на смартфоне.


29. Удаление клиента

/root/create-wg-client.sh delete phone

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

/root/create-wg-client.sh list

30. Перезапуск WireGuard

/root/create-wg-client.sh restart

Либо напрямую:

systemctl restart wg-quick@wg0

31. Справка скрипта

/root/create-wg-client.sh help

Доступные команды:

new <имя>     Создать нового клиента
list          Показать список клиентов
config <имя>  Показать конфигурацию
qr <имя>      Показать QR-код
delete <имя>  Удалить клиента
restart       Перезапустить WireGuard
help          Показать справку

32. Добавление нового клиента

Если клиент создаётся скриптом:

/root/create-wg-client.sh new laptop

необходимо убедиться, что скрипт добавил [Peer] в:

/etc/wireguard/wg0.conf

Проверить:

wg show

После создания клиента его адрес должен появиться среди AllowedIPs.


33. Сети за VPN-клиентом

Если конкретный клиент является маршрутизатором для дополнительных сетей, его [Peer] на сервере должен содержать эти сети.

Например:

[Peer]
PublicKey = <PUBLIC_KEY_CLIENT>
AllowedIPs = 172.18.0.2/32, 10.218.40.0/27, 10.218.40.32/27, 10.218.40.64/27, 10.218.40.96/27, 10.218.40.128/27, 10.218.40.160/27, 10.218.40.192/27, 10.218.40.252/32, 10.218.40.253/32, 10.218.40.254/32, 10.218.41.0/24

Если разные сети находятся за разными VPN-клиентами, их необходимо указать в [Peer] соответствующего клиента.


34. NAT

В данной конфигурации используется:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Первое правило:

-o eth1

используется для трафика VPN-клиентов в локальную сеть.

Второе:

-o wg0

используется для трафика к сетям, расположенным за VPN-клиентами.

Это позволяет работать с сетями, в которых нет обратного маршрута к:

172.18.0.0/24

35. Проверка NAT

Проверить:

iptables -t nat -L POSTROUTING -n -v

Должны присутствовать правила:

MASQUERADE ... eth1
MASQUERADE ... wg0

36. Проверка FORWARD

iptables -L FORWARD -n -v

Должен разрешаться трафик:

wg0 → eth1
eth1 → wg0

а также трафик через wg0.


37. Проверка соединения с VPN-клиента

На VPN-клиенте:

ping -c 3 172.18.0.1

Затем:

ping -c 3 10.218.40.225

Если всё работает, клиент имеет доступ к локальному устройству.


38. Проверка обратного соединения

На внутреннем устройстве:

ping -c 3 172.18.0.2

Если используется NAT, ответ должен возвращаться через WireGuard-сервер.


39. Проверка сети за VPN-клиентом

Например:

ping -c 3 10.218.41.1

Проверить маршрут:

ip route get 10.218.41.1

Ожидается:

10.218.41.1 dev wg0

40. Проверка WireGuard handshake

На сервере:

wg show

Найти:

latest handshake:

Если handshake отсутствует:

  1. Проверить публичный IP сервера.
  2. Проверить Endpoint клиента.
  3. Проверить UDP 51820.
  4. Проверить NAT/port forwarding.
  5. Проверить firewall.
  6. Проверить публичные ключи.
  7. Проверить, что WireGuard запущен.

41. Проверка порта

ss -lunp | grep 51820

Если сервер находится за NAT, с внешней сети должен быть доступен:

UDP 51820

42. Проверка IP forwarding

sysctl net.ipv4.ip_forward

Должно быть:

net.ipv4.ip_forward = 1

43. Проверка службы WireGuard

systemctl status wg-quick@wg0

Логи:

journalctl -u wg-quick@wg0 -n 100 --no-pager

В реальном времени:

journalctl -u wg-quick@wg0 -f

44. Перезапуск после изменения конфигурации

После ручного изменения:

/etc/wireguard/wg0.conf

выполнить:

systemctl restart wg-quick@wg0

Проверить:

systemctl status wg-quick@wg0
wg show
ip route

45. Полная проверка после установки

Выполнить последовательно.

1. Интерфейсы

ip addr

Проверить:

eth1 → 10.218.40.250/27
wg0  → 172.18.0.1/24

2. IP forwarding

sysctl net.ipv4.ip_forward

Должно быть:

1

3. WireGuard

wg show

4. Маршруты

ip route show | grep 10.218

5. Локальное устройство

ping -c 3 10.218.40.225

6. Маршрут к локальному устройству

ip route get 10.218.40.225

Должно быть:

dev eth1

7. Маршрут к VPN

ip route get 10.218.40.100

Должно быть:

dev wg0

8. Специальные адреса

ip route get 10.218.40.252
ip route get 10.218.40.253
ip route get 10.218.40.254

Должно быть:

dev wg0

9. Сеть .41.x

ip route get 10.218.41.1

Должно быть:

dev wg0

10. UDP

ss -lunp | grep 51820

11. Клиенты

/root/create-wg-client.sh list

46. Полезные команды

Статус WireGuard

wg show

Маршруты

ip route

Только маршруты 10.218.x.x

ip route show | grep 10.218

Проверка конкретного маршрута

ip route get 10.218.40.225
ip route get 10.218.40.252
ip route get 10.218.41.1

Проверка локального устройства

ping -c 3 10.218.40.225

Проверка VPN-сервера

ping -c 3 172.18.0.1

Проверка сервиса

systemctl status wg-quick@wg0

Перезапуск

systemctl restart wg-quick@wg0

Порт

ss -lunp | grep 51820

Firewall

iptables -L -n -v

NAT

iptables -t nat -L -n -v

Логи

journalctl -u wg-quick@wg0 -n 100 --no-pager

47. Итоговая схема маршрутизации

В итоге сервер должен работать следующим образом:

                       WireGuard Server
                       172.18.0.1
                            │
             ┌──────────────┼──────────────┐
             │              │              │
             ▼              ▼              ▼
        wg0 → VPN      wg0 → VPN       eth1 → LAN
             │              │              │
             │              │              │
    10.218.40.0/27    10.218.41.0/24   10.218.40.224/27
    10.218.40.32/27                   │
    10.218.40.64/27                    ▼
    10.218.40.96/27              10.218.40.225
    10.218.40.128/27
    10.218.40.160/27
    10.218.40.192/27

    10.218.40.252
    10.218.40.253
    10.218.40.254

Главное правило:

10.218.40.0-223    → wg0
10.218.40.224-251  → eth1
10.218.40.252-254  → wg0
10.218.40.255      → eth1
10.218.41.0/24     → wg0

48. Финальная проверка

Если всё настроено правильно, должны одновременно выполняться следующие условия:

✓ eth1 = 10.218.40.250/27
✓ wg0 = 172.18.0.1/24
✓ IP forwarding = 1
✓ UDP 51820 открыт
✓ WireGuard запущен
✓ 10.218.40.225 доступен через eth1
✓ 10.218.40.0/27 доступна через wg0
✓ 10.218.40.32/27 доступна через wg0
✓ 10.218.40.64/27 доступна через wg0
✓ 10.218.40.96/27 доступна через wg0
✓ 10.218.40.128/27 доступна через wg0
✓ 10.218.40.160/27 доступна через wg0
✓ 10.218.40.192/27 доступна через wg0
✓ 10.218.40.252 доступен через wg0
✓ 10.218.40.253 доступен через wg0
✓ 10.218.40.254 доступен через wg0
✓ 10.218.41.0/24 доступна через wg0
✓ VPN-клиент получает handshake
✓ VPN-клиент может подключиться к 10.218.40.225
✓ create-wg-client.sh создаёт новых клиентов
✓ QR-код клиента корректно импортируется в WireGuard

После выполнения этих шагов сервер готов к работе.