Моя шпаргалка :)

Мануалы и настройки => Настройки *nix (почта, web, система etc) => Тема начата: George от Июнь 03, 2026, 04:53

Название: Настройка WireGuard клиента на Ubuntu Server как шлюза (NAT)
Отправлено: George от Июнь 03, 2026, 04:53
Настройка WireGuard клиента на Ubuntu Server как шлюза (NAT) с сохранением локального доступа

Часто при поднятии WireGuard на удаленном сервере Ubuntu с конфигом 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

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

sudo apt update && sudo apt install wireguard resolvconf -y
Шаг 2. Включение маршрутизации (IP Forwarding) в ядре

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

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

Создаем или редактируем файл /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
Вставляем ваш конфиг, используя символ обратного слэша \ для переноса длинных строк. Это позволит сохранить читаемость файла без поломки скрипта:

[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. Запуск и автозапуск

Запускаем туннель:
sudo wg-quick up wg0Проверяем, что связь по SSH не прервалась. Если всё ок, добавляем интерфейс в автозапуск при старте системы:
sudo systemctl enable wg-quick@wg0
Для проверки статуса подключения можно использовать команду:
sudo wg
Финал: Теперь достаточно на вашем основном роутере (например, в IP -> Routes на MikroTik) завернуть трафик нужных локальных клиентов, указав шлюзом IP-адрес нашей Ubuntu (192.168.11.50), и они пойдут в интернет через WireGuard.