Estou tentando configurar uma VM do Ubuntu 17.10 para usar várias conexões VPN e carregar balanceamento de conexões entre elas. Estou tentando fazer isso executando vários clientes openvpn e tentando marcar conexões com iptables / connmark e usando o modo random para marcar diferentes conexões com diferentes valores, combinando-os com diferentes tabelas de roteamento de VPN. No entanto, não estou tendo sucesso, então tentei simplificar a situação para tentar entender o que está errado.
Reduzi o cenário para uma única conexão VPN, com toda a lógica de roteamento em uma tabela de roteamento dedicada e tentando marcar todos os pacotes para usar essa tabela de roteamento.
Se eu forçar todo o tráfego a usar essa tabela, tudo funcionará bem. Se eu tentar marcar todos os pacotes e então combinar essa marca para usar a tabela, isso não funcionará.
Aqui estão as regras que funcionam:
0: from all lookup local 10: from all lookup VPN2 32766: from all lookup main 32767: from all lookup default
e aqui estão as regras que não funcionam:
0: from all lookup local 10: from all fwmark 0x14 lookup VPN2 32766: from all lookup main 32767: from all lookup default
E aqui está minha tabela mangle do iptables que deve marcar tudo:
# 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
Eu entendo que minhas regras são um pouco inúteis aqui (a restauração, antes de marcar de qualquer maneira), mas eu apenas tentei marcar tudo para entender onde está o problema.
Como eu digo, se eu tiver tudo, use a tabela de roteamento VPN2, ele funciona bem - e eu posso ver as conexões marcadas com 20
( 0x14
) usando conntrack -L
Mas, se eu tentar fazer o roteamento com base na marca, isso não funcionará e a tentativa de conexão nem será visível em conntrack -L
, mesmo que eu veja o status SYN_SENT
em netstat
. Eu também vejo que o IP de origem não é minha interface tun VPN, então a tabela não está sendo usada.
Qualquer conselho para depurar isso é muito apreciado.
Muito obrigado
Tags networking vpn iptables routing linux