Имеем: VyOS с балансировкой трафика через несколько провайдеров, OpenVPN за пределами РФ

Необходимо: Траффик до определённых сетей должен проходить через vpn

Вся хитрость в том, что нужно добавить интерфейс vpn подключения в балансинг и разрулить уже на уровне правил балансировки.

Пример настройки OpenVPN клиента

set interfaces openvpn vtun0 authentication password 'password'
set interfaces openvpn vtun0 authentication username 'user'
set interfaces openvpn vtun0 encryption 'aes256'
set interfaces openvpn vtun0 mode 'client'
set interfaces openvpn vtun0 openvpn-option '--nobind'
set interfaces openvpn vtun0 openvpn-option '--float'
set interfaces openvpn vtun0 openvpn-option '--ping 10'
set interfaces openvpn vtun0 openvpn-option '--persist-tun'
set interfaces openvpn vtun0 openvpn-option '--persist-key'
set interfaces openvpn vtun0 openvpn-option '--tun-mtu 1500'
set interfaces openvpn vtun0 openvpn-option '--tun-mtu-extra 32'
set interfaces openvpn vtun0 openvpn-option '--mssfix'
set interfaces openvpn vtun0 openvpn-option '--mute 10'
set interfaces openvpn vtun0 openvpn-option '--resolv-retry infinite'
set interfaces openvpn vtun0 openvpn-option '--fragment 1400'
set interfaces openvpn vtun0 openvpn-option '--verb 5'
set interfaces openvpn vtun0 openvpn-option '--route-nopull'
set interfaces openvpn vtun0 protocol 'udp'
set interfaces openvpn vtun0 remote-host 'vpn-server.net'
set interfaces openvpn vtun0 remote-port '443'
set interfaces openvpn vtun0 tls ca-cert-file '/config/auth/ca.crt'
set interfaces openvpn vtun0 'use-lzo-compression'

Заносим интерфейс в балансировку

set load-balancing wan interface-health vtun0 failure-count '1'
set load-balancing wan interface-health vtun0 nexthop '172.16.x.x'
set load-balancing wan interface-health vtun0 success-count '1'
set load-balancing wan interface-health vtun0 test 10 resp-time '3'
set load-balancing wan interface-health vtun0 test 10 target '8.8.8.8'
set load-balancing wan interface-health vtun0 test 10 ttl-limit '1'
set load-balancing wan interface-health vtun0 test 10 type 'ping'

Здесь важно значение nexthop, зафиксируйте за вашим ботом фиксированный ip адрес на openvpn сервере, что бы ip шлюза не менялся

Правило балансировки для необходимого хоста\подсети. Пускаем этот траффик с клиентов только через vpn

set load-balancing wan rule 100 destination address 'x.x.x.x/32'
set load-balancing wan rule 100 'failover'
set load-balancing wan rule 100 inbound-interface 'eth0'
set load-balancing wan rule 100 interface vtun0 weight '100'
set load-balancing wan rule 100 protocol 'all'

Ну и правило маршрутизации для хоста\подсети. Указываем, что данный трафик надо пускать через vpn

set protocols static interface-route x.x.x.x/32 next-hop-interface 'vtun0'

Для каждой подсети и хоста вам нужно будет создавать правило load-balacing и добавлять маршрут.

Актуальный список подсетей можно взять здесь https://github.com/zapret-info/z-i

Мой телеграм-канал .