Por que o roteamento de políticas nas marcas iptables aplicado nas cadeias FORWARD ou OUTPUT pode ser inconsistente?

2

Estou roteando conexões HTTPS por um túnel SSH (-w) usando as regras iptables marks e iproute2 . As razões pelas quais preciso fazer isso são, no mínimo, inventadas, então a maioria das soluções alternativas pode não trabalhe para mim em tudo.

O dispositivo tun0 existe e está funcionando como eu desejo, e o roteamento está funcionando quando eu aplico a MARK na cadeia OUTPUT, mas por alguma razão a regra de roteamento parece não funcionar se a MARK for aplicada na cadeia FORWARD. / p>

O sistema operacional é o CentOS 6.7 com um kernel 2.6.32 e 1.4.7 iptables. A marcação iptables e o registro:

# iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark 1 
# iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1 
# iptables -t mangle -A POSTROUTING -m mark --mark 1 -j LOG --log-prefix "marked: "

A configuração da regra iproute2 :

# cat 201 tunneled >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table tunneled
# ip route add default via 192.168.100.1 dev tun1 table tunneled

E uma pequena seção do log para mostrar resultados:

Feb 17 19:11:35 nhopm kernel: marked: IN= OUT=eth0 SRC=192.168.82.2 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16734 DF PROTO=TCP SPT=34619 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 MARK=0x1 
Feb 17 19:12:00 nhopm kernel: marked: IN= OUT=tun1 SRC=192.168.81.8 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=62747 DF PROTO=TCP SPT=55349 DPT=443 WINDOW=14600 RES=0x00 SYN URGP=0 MARK=0x1 

O host tem 2 NICs eth0 é 192.168.81.8 sendo 192.168.81.1 o gateway padrão e eth1 192.168.82.8 que atua como o gateway padrão para 192.168.82.0/24 - não há problemas com essa configuração , funciona como esperado. O túnel tun0 tem 192.168.100.1 em seu extremo.

Tentei resumir isso à situação mais simples que ilustra o problema sem sobrecarregar os detalhes, mas fornecerá todos os detalhes que julgar necessários para tentar descobrir onde o problema se coloca. Por favor, peça qualquer coisa que possa ser útil comentários. Espero que eu tenha entendido mal uma pequena parte de como isso funciona.

Solução alternativa

Minha tentativa de fazer o acima foi baseada nesse diagrama de iptables : de iptables.info

O que esconde o fato de que o mesmo conjunto de Decisão de Roteamento não é aplicado aos pacotes provenientes da cadeia OUTPUT como aqueles provenientes da cadeia FORWARD.

Para que isso funcione, eu precisava substituir a marcação feita na cadeia FORWARD por uma entrada semelhante na cadeia PREROUTING.

iptables -t mangle -A PREROUTING -p tcp --dport 443 ! -d 192.168.0.0/16 -j MARK --set-mark 1

Que realmente atende às minhas necessidades um pouco melhor de qualquer maneira.

Eu não estou fazendo isso como uma resposta (ainda), embora eu ainda não tenha encontrado documentação sobre isso - se eu fornecer, darei uma resposta, a menos que alguém me impeça.

    
por DanSut 18.02.2016 / 01:57

0 respostas