редактировать
Я решил проблему, написав скрипт для генерации таблиц и правил маршрутизации, после перехода по ссылке @ MariusMatutiae на введение в policy routing
.
Я пытаюсь запустить два клиента OpenVPN на моем Raspberry Pi с Minibian и привязать конкретное приложение (get_iplayer) к одной из VPN с помощью bind.so, как описано здесь и здесь. Первоначально я следовал за руководство здесь, установка iproute
и загрузки и компиляции bind.so
, как указано там.
VPN
Я использую файлы конфигурации, предоставленные Private Internet Access.
Один VPN указывает на их сервер в Швейцарии, использует udp, и я установил опцию dev tun0
, так как я хочу, чтобы это был основной туннель, через который проходит весь трафик, за исключением того, который я объявляю явно с помощью bind.so
Этот туннель работает нормально, весь трафик проходит через него.
Второй VPN указывает на сервер в Лондоне, Великобритания, использует tcp и имеет параметр dev tun1
установленный для работы в качестве второго туннеля. Этот туннель работает нормально, когда работает сам по себе. Я могу правильно запустить get_iplayer.
Проблема возникает, когда я запускаю оба экземпляра одновременно. Похоже, трафик не проходит через интерфейс tun1
, даже когда я пытаюсь использовать bind.so и подход LD_PRELOAD
как объяснено в ссылках выше.
bind.so
Насколько я знаю, я правильно скомпилировал bind.so, скопировал его в /usr/lib
и т.д. К сожалению, я однажды все заработал, но понятия не имею, как это произошло.
команды
Я использовал ip route
чтобы найти адрес шлюза; Я уверен, что я использую правильный IP-адрес. например:
$ ip route
0.0.0.0/1 via 10.30.1.17 dev tun1
0.0.0.0/1 via 10.198.1.5 dev tun0
default via 192.168.1.254 dev eth0
10.30.1.1 via 10.30.1.17 dev tun1
10.30.1.17 dev tun1 proto kernel scope link src 10.30.1.18
10.198.1.1 via 10.198.1.5 dev tun0
10.198.1.5 dev tun0 proto kernel scope link src 10.198.1.6
104.238.169.140 via 192.168.1.254 dev eth0
128.0.0.0/1 via 10.30.1.17 dev tun1
128.0.0.0/1 via 10.198.1.5 dev tun0
179.43.177.66 via 192.168.1.254 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.84
Затем работает:
BIND_ADDR="10.30.1.17" LD_PRELOAD=/usr/lib/bind.so get_iplayer --type=tv
не приводит к соединению и ничего в журнале для VPN VPN.
Остановка швейцарского VPN и выполнение той же команды get_iplayer приводит к загрузке соединения и информации. ip route
выдает следующее:
$ ip route
0.0.0.0/1 via 10.30.1.17 dev tun1
default via 192.168.1.254 dev eth0
10.30.1.1 via 10.30.1.17 dev tun1
10.30.1.17 dev tun1 proto kernel scope link src 10.30.1.18
104.238.169.119 via 192.168.1.254 dev eth0
128.0.0.0/1 via 10.30.1.17 dev tun1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.84
Так что нет никаких изменений в IP-адресе или что-то странное, насколько я могу судить по маршрутизации при открытии или закрытии различных VPN.
Я в растерянности относительно того, почему bind.so
похоже, не имеет никакого эффекта. Нет вывода в терминал, чтобы показать, успешен он или нет, и я не уверен, где искать журнал, если он что-то выводит (вывод в терминале для команды, то есть get_iplayer).
Очевидно, что я мог запускать задания / сценарии cron, чтобы открывать и закрывать VPN, чтобы позволить мне успешно запустить get_iplayer / через британскую VPN, но я бы предпочел оставить обе VPN открытыми, весь мой трафик проходил через интерфейс tun0
и использовать только tun1
для get_player, когда мне нужно с bind.so
Кто-нибудь может помочь? Если мы не сможем решить эту проблему, была бы полезна некоторая помощь в написании конкретных таблиц маршрутизации или правил для процесса get_iplayer.
Благодарю.