iptables definindo o connmark, mas a regra do ip não corresponde

0

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

    
por Danny Trigo 27.05.2018 / 18:57

0 respostas