Как настроить VPN на Linux, чтобы он работал только для определенных приложений или сайтов?

Как настроить маршрутизацию трафика через VPN на уровне приложения или доменов для конкретных браузеров или определенных сайтов на десктопе с Debian 12, используя услуги VPN провайдера xeovo.com с протоколами Wireguard и OpenVPN на выбор? Желательно, чтобы решение было совместимо с данным провайдером и также реализовало функционал, который представлен в приложении AmneziaVPN.
  • 28 декабря 2023 г. 12:17
Ответы на вопрос 2
Для настройки VPN на Linux с выбором определенных приложений или сайтов для работы через него, вы можете использовать функции iptables и маршрутизации трафика.

Перед началом настройки VPN, вам необходимо установить VPN-клиент провайдера xeovo.com на вашей системе. Они должны предоставить вам файлы конфигурации VPN (для протоколов OpenVPN или WireGuard).

1. Установите необходимые пакеты:
```
sudo apt-get install openvpn wireguard iptables curl
```

2. Создайте файл конфигурации для VPN в директории /etc/openvpn/ или /etc/wireguard/, в зависимости от используемого протокола VPN.

3. Установите права доступа к файлу конфигурации:
```
sudo chmod 600 /etc/openvpn/[config_file].ovpn
sudo chmod 600 /etc/wireguard/[config_file].conf
```

4. Подключитесь к VPN, используя команду:
```
sudo openvpn --config /etc/openvpn/[config_file].ovpn
sudo wg-quick up /etc/wireguard/[config_file].conf
```

5. Проверьте, что VPN-туннель активен и работает:
```
curl ifconfig.co
```
Вывод должен показывать IP-адрес, назначенный VPN-сервером.

6. Добавьте правила маршрутизации для маркировки пакетов, которые должны проходить через VPN-туннель:
```
# Для OpenVPN
sudo iptables -t mangle -A OUTPUT -o tun0 -j MARK --set-mark 0x1
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# Для WireGuard
sudo iptables -A OUTPUT -m mark --mark 0x1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
```

7. Создайте таблицу маршрутизации для маркированных пакетов:
```
sudo ip rule add fwmark 0x1 table 100
```

8. Добавьте маршруты в таблицу маршрутизации для пакетов, которые должны идти через VPN-туннель:
```
# Для OpenVPN
sudo ip route add default via [VPN_server_ip] table 100

# Для WireGuard
sudo ip route add [VPN_network] via [VPN_server_ip] table 100
```

Замените [VPN_server_ip] на IP-адрес VPN-сервера и [VPN_network] на IP-подсеть, используемую VPN-сервером.

9. Добавьте правила iptables для проброски пакетов через таблицу маршрутизации:
```
sudo iptables -t nat -A PREROUTING -i [interface] -p tcp -j DNAT --to-destination [VPN_server_ip]
sudo iptables -t nat -A PREROUTING -i [interface] -p udp --dport [VPN_port] -j DNAT --to-destination [VPN_server_ip]
```

Замените [interface] на имя вашего сетевого интерфейса (например, eth0) и [VPN_port] на номер порта VPN-сервера.

10. Теперь вы можете определить приложения или сайты, которые нужно направлять через VPN-туннель, добавив маршруты для соответствующих IP-адресов или доменов в таблицу маршрутизации 100. Например:
```
sudo ip route add [app_or_website_ip] via [VPN_server_ip] table 100
sudo ip route add [app_or_website_domain] via [VPN_server_ip] table 100
```

После настройки правил маршрутизации и маркировки пакетов, только выбранные прилож
1. Отключить прохождение всего трафика через VPN 
2. Установить на linux десктопе любой http\socks проксисервер, который будет в качестве выходного интерфейса иметь VPN и отправлять трафик в VPN.
3. Настроить работу через прокси в приложении\браузере, поставить расширение типа foxyproxy, которое будет перенаправлять по именам сайтов трафик через определенный прокси.

А еще есть socksify\proxyfy приложения, которые умеют перенаправлять весь трафик с приложений в определенный прокси.
Похожие вопросы