Я пытаюсь настроить виртуальную машину 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-интерфейсом, поэтому таблица не используется.
Любой совет отладки это очень ценится.
Большое спасибо