Выборочный роутинг через vpn (dnsmasq)

Автор CoolAller, 20 мая 2023, 19:46:21

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

0 Пользователи и 1 гость просматривают эту тему.

CoolAller

Всем привет  :)

Нужно сделать так, чтобы только сайты из списка использовали vpn соединение (ppp0), а остальные шли через физический интерфейс проводного сетевого подключения (enp3s0), куда приходит интернет с роутера.

Через интерфейс enp3s0, при помощи Network Manager, подключается vpn соединение (L2TP), в результате чего создается вирутальный интерфейс ppp0.

Подскажите, это вообще реально сделать при помощи dnsmasq и Network Manager? С dnsmask я уже наплясался, не знаю как сделать чтобы он заработал. По логам он поднимается, но результата нет, все сайты идут через vpn.

Network Manager очень не хочется сносить. С роутингом при помощи iptable получается очень костыльно и скрипт громоздкий и долго выполняется, так как сейчас практически каждый сайт имеет по несколько IP. Поэтому, лучше всего было бы через dnsmasq сделать при помощи доменных имен, если он такое все еще умеет.

Может есть у кого-то рабочие конфиги? Или кто-то может подсказать?

dzhoser

 

Прежде всего, убедитесь, что у вас установлены следующие утилиты: iproute2, iputils.

1. Определите IP-адрес вашего VPN-сервера:

ping vpn.example.com


2. Установите маршрут до сети VPN через интерфейс ppp0:

sudo ip route add [VPN_NETWORK]/[SUBNET_MASK] dev ppp0


Например:

sudo ip route add 192.168.1.0/24 dev ppp0


где
 `[VPN_NETWORK]` - адрес сети VPN;
 [SUBNET_MASK] - маска подсети.

3. Настройте маршрут по умолчанию через интерфейс enp3s0:

sudo ip route add default via [GATEWAY_IP_ADDRESS] dev enp3s0


где
 `[GATEWAY_IP_ADDRESS]` - IP-адрес вашего шлюза по умолчанию.

4. Создайте список сайтов, которые должны использовать VPN соединение (например, в файле vpn_sites.txt):

```
example.com
vpn.example.com
supersite.ru
```

5. Настройте правила маршрутизации для сайтов из списка:

```bash
while read site; do sudo ip route add $(dig +short $site | head -n1) via [VPN_GATEWAY_IP] dev ppp0; done < vpn_sites.txt
```

где
 [VPN_GATEWAY_IP] - IP-адрес вашего шлюза VPN.

Теперь все запросы на сайты из списка будут отправляться через VPN-соединение (ppp0), а все остальные - через интерфейс enp3s0.
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

CoolAller

#2
dzhoser, советы от чата GPT бестолковые) Скрипт нежизнеспособен) Нужно настроить dnsmasq для использования доменных имен вместо ip-адресов.