- Shell 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| create-wg-client.sh | ||
| README.md | ||
| wg-monitor.sh | ||
Инструкция по установке и настройке 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 отсутствует:
- Проверить публичный IP сервера.
- Проверить
Endpointклиента. - Проверить UDP
51820. - Проверить NAT/port forwarding.
- Проверить firewall.
- Проверить публичные ключи.
- Проверить, что 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
После выполнения этих шагов сервер готов к работе.