Я настроил соединение OpenVPN, но не хочу отправлять через него весь трафик.
Моя текущая таблица маршрутизации выглядит так:
$ ip route
default via 192.168.88.1 dev enp7s0 proto dhcp metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
192.168.88.0/24 dev enp7s0 proto kernel scope link src 192.168.88.29 metric 100
Цель состоит в том, чтобы маршрутизировать весь трафикспецифическийпрограмма через tun0
, и первая программа-кандидат, конечно же, - браузер.
Есть ли у вас какие-нибудь идеи, как это можно сделать?
Я знаю оiptablesмаршрутизация источника на основе PID, но это потребовало бы пересоздавать правила iptables каждый раз, когда порождается новый процесс. И поскольку каждая вкладка браузера — это новый процесс... Я, честно говоря, не могу себе представить, как все это можно сделать.
Следующая мысль — использовать локальный прокси-сервер Socks, а затем запустить, скажем google-chrome --proxy-server="socks5://127.0.0.1:1080"
, .
Это отлично работает с SSH-туннелями, поскольку ssh
может выступать в качестве SOCKS-прокси. Однако я не нашел прокси-программу, которая могла бы работать так же, но без SSH-туннеля: т. е. выставлять интерфейс SOCKS и направлять весь трафик через tun0
. Можете ли вы что-нибудь порекомендовать?
решение1
Вы можете использовать iproute2 и uid пользователя, который запускает браузер или что-то еще. Например:
ip route add table 502 default dev tun0
lp rule add uidrange 1000-1002 table 502
решение2
Запустите программы, которые вы хотите направить через VPN, в новом сетевом пространстве имен, используя туннель в качестве шлюза по умолчанию.
Возможно, вам захочется перенастроить свой ПК таким образом, чтобы файл .desktop для браузера (и любой другой программы, которая должна использовать VPN) запускал скрипт для управления поведением, а также добавить скрипт в конфигурацию OpenVPN для настройки пространства имен.