Привет
Есть машина, на которой поднята пара соединений с OVPN серверами.
При направлении трафика в одно из них всё работает хорошо.
default via vpn-gateway-1-ip \ default via vpn-gateway-2-ip
Если же я добавляю в схему маршрутизации второе, через nexthop, – возникают проблемы.
scope global default
nexthop via vpn-gateway-1-ip weight 1
nexthop via vpn-gateway-2-ip weight 1
Под проблемами подразумеваю то, что при пинге какого-либо ресурса возвращаются лишь чётные пакеты
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=119 time=271 ms
^C
--- 8.8.8.8 ping statistics ---
11 packets transmitted, 5 received, 54,5455% packet loss, time 10079ms
rtt min/avg/max/mdev = 270.648/270.672/270.691/0.016 ms
либо же они вообще могут не вернуться
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=270 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=119 time=270 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=119 time=279 ms
^C
--- 8.8.8.8 ping statistics ---
8 packets transmitted, 4 received, 50% packet loss, time 7067ms
rtt min/avg/max/mdev = 270.264/272.631/279.198/3.793 ms
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=271 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=119 time=270 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 2 received, 50% packet loss, time 3026ms
rtt min/avg/max/mdev = 270.292/270.453/270.615/0.161 ms
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=271 ms
^C
--- 8.8.8.8 ping statistics ---
29 packets transmitted, 1 received, 96,5517% packet loss, time 28627ms
rtt min/avg/max/mdev = 270.649/270.649/270.649/0.000 ms
Ресурсы по http(-s) открываются по своему усмотрению.
Например, морда гугла может открыться и запросы на его сервера будут проходить. Но не все используемые на странице гуглом ресурсы будут доступны, что приведёт к «бесконечной» загрузке.
Яндекс и абсолютное большинство из других проверенных мной ресурсов недоступны.
Нашёл информацию о том, что линь умеет то что мне нужно из коробки с версии ядра >= 4.4 линк
IPv4: Hash-based multipath routing. When the routing cache was removed in 3.6, the IPv4 multipath algorithm changed from more or less being destination-based into being quasi-random per-packet scheduling. This increased the risk of out-of-order packets and made it impossible to use multipath together with anycast services. In this release, the multipath routing implementation is replaced with a flow-based load balancing based on a hash over the source and destination addresses merge commit
Однако в одном из ответов к вопросу на https://unix.stackexchange.com/ человек написал, что этот способ балансировки подойдёт лишь в том случае, если выходной адрес балансируемых интерфейсов будет одинаков. Например, два канала под одним и тем же айпишником.
Ищу помощь. Подскажите куда посмотреть, где копнуть. Может кто-нибудь уже решал подобную проблему? Подходит ли для решения вопроса nexthop?
Список маршрутов:
default
nexthop via 10.16.0.1 dev tun0 weight 1
nexthop via 10.81.0.1 dev tun1 weight 1
10.16.0.0/16 dev tun0 proto kernel scope link src 10.16.0.4
10.81.0.0/16 dev tun1 proto kernel scope link src 10.81.0.2
x.x.x.x via 192.168.2.1 dev enswww
y.y.y.y via 192.168.2.1 dev enswww
192.168.2.0/24 dev enswww proto kernel scope link src 192.168.2.254 metric 101
192.168.3.0/24 dev enslll proto kernel scope link src 192.168.3.252 metric 100
Где,
x.x.x.x и y.y.y.y IP адреса VPN гейтов.
enswww (w от wan), enslll (l от lan) – физические интерфейсы.
Система:
Linux pc 5.4.0-45-generic #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Linuxmint
Description: Linux Mint 20
Release: 20
Codename: ulyana
P.S.
Для чистоты эксперимента проверил тот же конфиг на чистом дебиане – то же самое.
Linux debian 4.19.0-10-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64 GNU/Linux