Настройка WireGuard клиента на Ubuntu Server как шлюза (NAT)

Автор George, Июнь 03, 2026, 04:53

« назад - далее »

George

Настройка WireGuard клиента на Ubuntu Server как шлюза (NAT) с сохранением локального доступа

Часто при поднятии WireGuard на удаленном сервере Ubuntu с конфигом
Код: bash
AllowedIPs = 0.0.0.0/0
сервер намертво забивает на локальную сеть и отправляет весь трафик (включая ответы на ваш SSH) внутрь туннеля. Как результат — моментальная потеря связи с сервером.

Ниже пошаговая инструкция, как настроить клиента, завернуть весь внешний трафик в VPN, сохранить доступ к локальным подсетям за вашим основным роутером (например, MikroTik) и превратить саму Ubuntu в шлюз (NAT) для других устройств.

Исходные данные для примера:
* Интерфейс Ubuntu: ens192
* IP-адрес Ubuntu: 192.168.11.50
* Шлюз (локальный роутер): 192.168.11.1
* Локальные подсети, которые НЕ надо пускать в VPN: 192.168.10.0/24, 192.168.20.0/24, 172.16.0.0/24



Шаг 1. Установка WireGuard и resolvconf

Поскольку в клиентских конфигах часто прописана строка
Код: bash
DNS = ...
, WireGuard при старте будет искать утилиту для управления резолвом. Установим сам пакет и нужный обработчик:

Код: bash
sudo apt update && sudo apt install wireguard resolvconf -y

Шаг 2. Включение маршрутизации (IP Forwarding) в ядре

Чтобы Ubuntu могла работать как роутер и пересылать пакеты из локальной сети в VPN, нужно разрешить форвардинг.

Включаем прямо сейчас:
Код: bash
sudo sysctl -w net.ipv4.ip_forward=1

Чтобы настройка сохранялась после перезагрузки, открываем файл конфигурации:
Код: bash
sudo nano /etc/sysctl.conf
Находим и раскомментируем (или добавляем в конец файла) строчку:
Код: bash
net.ipv4.ip_forward=1

Шаг 3. Настройка конфигурационного файла WireGuard

Создаем или редактируем файл /etc/wireguard/wg0.conf:
Код: bash
sudo nano /etc/wireguard/wg0.conf

Вставляем ваш конфиг, используя символ обратного слэша
Код: bash
\
для переноса длинных строк. Это позволит сохранить читаемость файла без поломки скрипта:

Код: bash
[Interface]
PrivateKey = <ВАШ_ПРИВАТНЫЙ_КЛЮЧ>
Address = 10.0.0.2/32, fd00::2/128
DNS = 1.1.1.1

# --- Скрипты включения интерфейса (PostUp) ---
# 1. Исправляем асимметричную маршрутизацию (SSH не отвалится)
PostUp = ip rule add from 192.168.11.50 table 200; \
         ip route add default via 192.168.11.1 dev ens192 table 200;
# 2. Добавляем маршруты до локальных подсетей в обход VPN
PostUp = ip route add 192.168.10.0/24 via 192.168.11.1 dev ens192; \
         ip route add 192.168.20.0/24 via 192.168.11.1 dev ens192; \
         ip route add 172.16.0.0/24 via 192.168.11.1 dev ens192;
# 3. Настраиваем правила пересылки и NAT (Маскарадинг)
PostUp = iptables -A FORWARD -i ens192 -o wg0 -j ACCEPT; \
         iptables -A FORWARD -i wg0 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT; \
         iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

# --- Скрипты выключения интерфейса (PostDown) ---
# 1. Удаляем правила асимметричной маршрутизации
PostDown = ip rule del from 192.168.11.50 table 200; \
           ip route del default via 192.168.11.1 dev ens192 table 200;
# 2. Удаляем локальные маршруты
PostDown = ip route del 192.168.10.0/24 via 192.168.11.1 dev ens192; \
           ip route del 192.168.20.0/24 via 192.168.11.1 dev ens192; \
           ip route del 172.16.0.0/24 via 192.168.11.1 dev ens192;
# 3. Удаляем правила пересылки и NAT
PostDown = iptables -D FORWARD -i ens192 -o wg0 -j ACCEPT; \
           iptables -D FORWARD -i wg0 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT; \
           iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

[Peer]
PublicKey = <КЛЮЧ_СЕРВЕРА>
Endpoint = 198.51.100.5:51820
AllowedIPs = 0.0.0.0/0, ::/0

Шаг 4. Запуск и автозапуск

Запускаем туннель:
Код: bash
sudo wg-quick up wg0
Проверяем, что связь по SSH не прервалась. Если всё ок, добавляем интерфейс в автозапуск при старте системы:
Код: bash
sudo systemctl enable wg-quick@wg0

Для проверки статуса подключения можно использовать команду:
Код: bash
sudo wg

Финал: Теперь достаточно на вашем основном роутере (например, в IP -> Routes на MikroTik) завернуть трафик нужных локальных клиентов, указав шлюзом IP-адрес нашей Ubuntu (192.168.11.50), и они пойдут в интернет через WireGuard.
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.