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

Вопрос или проблема

Я подключен к VPS и мне нужно направить конкретное приложение через VPN. Однако, когда я включаю свой VPN через WireGuard, мое SSH-соединение с VPS обрывается. По умолчанию мой VPN перенаправляет весь трафик через себя, но я хочу, чтобы только определенные приложения использовали VPN. Моя цель – настроить WireGuard так, чтобы только приложения, явно привязанные к интерфейсу сети VPN (se-got-wg-001), использовали VPN, в то время как другие продолжали использовать интерфейс по умолчанию (eth0).

Ниже представлена моя текущая конфигурация WireGuard:

[Interface]
PrivateKey = REDACTED
Address = 10.66.127.142/32,fc00:bbbb:bbbb:bb01::3:7f8d/128
DNS = REDACTED

[Peer]
PublicKey = REDACTED
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = REDACTED

Я хочу, чтобы эти изменения сохранялись после перезагрузки. Какие изменения мне нужно внести, чтобы обеспечить использование eth0 в качестве интерфейса по умолчанию, даже когда VPN включен?

Я нашел несколько связанных постов, которые могут помочь, но все еще не совсем понимаю, какие шаги мне нужно предпринять:

Вот информация о моей системе:

root@vmixxx /e/wireguard# neofetch
            .-/+oossssoo+/-.               [email protected] 
        `:+ssssssssssssssssss+:`           --------------------------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 24.04.1 LTS x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-7.2) 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 6.8.1-1009-realtime 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 2 hours, 45 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 1813 (dpkg), 4 (snap) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: fish 3.7.0 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 800x600 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD EPYC 7282 (4) @ 2.794GHz 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   GPU: 00:02.0 Vendor 1234 Device 1111 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Memory: 2630MiB / 5925MiB 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/                            
  +sssssssssdmydMMMMMMMMddddyssssssss+                             
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

WireGuard не обрабатывает маршрутизацию. wg-quick преобразует ваши AllowedIPs в маршруты, поэтому, если у вас есть “AllowedIPs = 0.0.0.0/0”, wg-quick добавит маршрут 0.0.0.0/0 из этого.

В вашей конфигурации wg-quick укажите Table=, чтобы установить маршруты в другую таблицу маршрутизации вместо главной таблицы. Например:

[Interface]
Table = 40

Когда VPN будет включен, выполните ip [-4] [-6] route ls table 40, чтобы проверить, что маршруты действительно помещаются в эту таблицу.

Наконец, используйте ip -4 rule add from 10.66.127.142/32 lookup 40, чтобы система выбирала эту таблицу для любых пакетов, исходящих с IPv4-адреса wg0, и повторите то же самое с ip -6 rule для его IPv6-адреса (вы можете указать from fc00::/8, если это не будет конфликтовать с другими интерфейсами, но лучше сопоставить весь /128).

Настройте PostUp= в wg-quick, чтобы автоматически добавлять эти правила маршрутизации по политике.

Ответ или решение

Для того чтобы настроить VPN на базе WireGuard так, чтобы лишь определённые приложения использовали VPN-соединение, необходимо применить политику маршрутизации, которая позволит контролировать трафик. Ниже приводится пошаговая инструкция для достижения этой цели.

Шаг 1: Измените конфигурацию WireGuard

Ваша текущая конфигурация WireGuard выглядит так:

[Interface]
PrivateKey = REDACTED
Address = 10.66.127.142/32,fc00:bbbb:bbbb:bb01::3:7f8d/128
DNS = REDACTED

[Peer]
PublicKey = REDACTED
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = REDACTED

Замените строку AllowedIPs, чтобы она не включала маршрутизацию всего трафика через VPN. Это можно сделать двумя способами: установить определённые IP-адреса, которые хотите маршрутизировать через VPN, или использовать более свежую методику с таблицами маршрутов.

Шаг 2: Использование таблиц маршрутов

Добавьте следующую строку в раздел [Interface] вашей конфигурации:

Table = 40

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

[Interface]
PrivateKey = REDACTED
Address = 10.66.127.142/32,fc00:bbbb:bbbb:bb01::3:7f8d/128
DNS = REDACTED
Table = 40

[Peer]
PublicKey = REDACTED
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = REDACTED

Шаг 3: Настройка маршрутов

Теперь в конфигурацию wg-quick добавьте команды PostUp и PostDown, чтобы автоматически применять политики маршрутизации при поднятии или поднятии интерфейса. Например:

PostUp = ip -4 rule add from 10.66.127.142/32 lookup 40
PostDown = ip -4 rule delete from 10.66.127.142/32 lookup 40

Эти команды добавляют правила маршрутизации, позволяя пакетам, исходящим из IP вашего WireGuard интерфейса, использовать таблицу маршрутов 40.

Шаг 4: Проверка и настройки

После внесения изменений, активируйте ваш WireGuard интерфейс и проверьте правильность маршрутизации, выполнив команду:

ip -4 route ls table 40

Вы также можете создать правила для IPv6 аналогичным образом.

Шаг 5: Устойчивость изменений

Чтобы обеспечить сохранность ваших настроек после перезагрузки системы, убедитесь, что конфигурация WireGuard правильно сохранена в нужном месте, например, в /etc/wireguard. После перезагрузки сервис должен автоматически поднимать WireGuard с заданным интерфейсом и вашими маршрутами.

Это решение поможет вам избежать отключения SSH-соединения с VPS при активации VPN, поскольку мы изолировали маршрутизируемый трафик, оставив основной поток через eth0.

Вывод

Следуя шагам выше, вы сможете настроить WireGuard так, чтобы только конкретные приложения использовали VPN-соединение, при этом другие приложения продолжат использовать стандартный интерфейс eth0. Убедитесь, что все команды и конфигурации вводятся правильно, чтобы избежать потери подключения к вашему серверу.

Оцените материал
Добавить комментарий

Капча загружается...