Я пытаюсь настроить виртуальную машину Ubuntu 17.10 для использования нескольких VPN-подключений и балансировки нагрузки между ними. Я пытаюсь сделать это, запустив несколько клиентов openvpn, и пометив соединения с помощью iptables/connmark, и используя режим random, чтобы пометить разные соединения разными значениями, а затем сопоставить их с разными таблицами маршрутизации VPN. Однако я не добился успеха, поэтому я попытался упростить ситуацию, чтобы понять, что происходит не так.

Я сократил сценарий до одного VPN-соединения со всей моей логикой маршрутизации в отдельной таблице маршрутизации и пытался пометить все пакеты для использования этой таблицы маршрутизации.

Если я заставлю весь трафик использовать эту таблицу, она будет работать нормально. Если я попытаюсь пометить все пакеты и затем сопоставить эту отметку, чтобы использовать таблицу, это не сработает.

Вот правила, которые работают:

0:      from all lookup local
10:     from all lookup VPN2
32766:  from all lookup main
32767:  from all lookup default

и вот правила, которые не работают:

0:      from all lookup local
10:     from all fwmark 0x14 lookup VPN2
32766:  from all lookup main
32767:  from all lookup default

А вот моя таблица manptable iptables, которая должна помечать все:

# iptables -nvL -t mangle
Chain PREROUTING (policy ACCEPT 6785 packets, 464K bytes)
 pkts bytes target     prot opt in     out     source               destination
 8013  545K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK restore
 7981  543K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            MARK set 0x14
 7958  541K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK save

Chain INPUT (policy ACCEPT 6773 packets, 463K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 4382 packets, 1132K bytes)
 pkts bytes target     prot opt in     out     source               destination
 4636 1159K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK restore
 4516 1146K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            MARK set 0x14
 4382 1132K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK save

Chain POSTROUTING (policy ACCEPT 4151 packets, 1116K bytes)
 pkts bytes target     prot opt in     out     source               destination

Я понимаю, что мои правила здесь немного бессмысленны (восстановление, прежде чем пометить в любом случае), но я просто пытался заставить его пометить все, чтобы понять, в чем проблема.

Как я уже сказал, если я все использую таблицу маршрутизации VPN2, она работает нормально - и я вижу соединения, отмеченные 20 (0x14), используя conntrack -L

Но если я попытаюсь настроить маршрутизацию на основе метки, она не будет работать, и попытка подключения даже не будет видна в conntrack -L , даже если я вижу состояние SYN_SENT в netstat . Я также вижу, что исходный IP-адрес не является моим VPN-интерфейсом, поэтому таблица не используется.

Любой совет отладки это очень ценится.

Большое спасибо

0