tl; dr: Добавить явный маршрут к удаленному хосту мистической программы (/32
).
Я посмотрел руководство OpenVPN, но остается неясным, может ли он делать это изначально (через --route
). Чтобы быть в безопасности, используйте скрипты / программы с --up
и --down
. Важно отметить , что изменение маршрутизации конфигурации требует корень, который вы не имеете , когда --down
работает , если --user
также указан.
Чтобы быть переносимым, скрипту / программе --up
потребуется выполнить следующее, в зависимости от того, как соединяется ваша таинственная программа:
- Разрешить удаленный IP-адрес загадочной программы (
$remote_addr
)
- Определите шлюз (
$gateway
) для удаленного IP-адреса - это может или не может быть шлюз по умолчанию
- Добавьте явный маршрут, например,
ip route add $remote_addr via $gateway
Таким образом, он будет правильно работать с --redirect-gateway
.
Скрипт / программа --down
должен будет выполнять почти то же самое, за исключением того, что он должен удалить маршрут.
При написании скрипта (Bash) проблемы действительно начинаются уже с шага 1. Вам нужен только IP-адрес и больше ничего. Что-то вроде getent hosts
сделало бы свое дело, но оно очень предпочитает адреса IPv6, что может или не может быть уместным. Другие инструменты (dig +short
т.д.) Не используют распознаватель ОС, а напрямую запрашивают DNS, что может быть не тем, что вам нужно (например, /etc/hosts
).
Шаг второй относительно легок на любой ОС (ip route get
т.д.), Кроме Windows. В Windows вам нужно запрограммировать алгоритм, чтобы самостоятельно найти наиболее подходящий маршрут.
Если вы чувствуете, что все статично (удаленный IP-адрес, IP-адрес следующего перехода), вы также можете использовать OpenVPN --route
:
route 1.2.3.4 255.255.255.255 10.1.2.3
... где 1.2.3.4
- это удаленный хост тайной программы, а 10.1.2.3
- следующий прыжок на маршрутизацию, чтобы достичь его.
Другое решение - не использовать --persist-tun
, то есть сетевой интерфейс VPN будет полностью закрыт, когда OpenVPN потеряет соединение. Это имеет очень серьезное значение: трафик будет пропадать, как только соединение будет разорвано.