[Dica do Dia]Cuidados com o Alvo(Target) MARK no iptables

Demorei 3 dias para entender este problema e encontrar a solução para ele, e acho que pode ser útil para outras pessoas, a medida que aumenta-se a oferta e disponibilidade de serviços de acesso a internet.

Como todos sabem é simples e eficiente fazer balanceamento de carga entre dois links de internet com Linux.
Isso é feito utilizando o Alvo(Target) MARK do iptables em conjunto com algumas regras do iproute2[1].

O problema aparece quando começamos a trabalhar com vários alvos MARK. No meu caso específico encontrei este problema quando comecei a utilizar o NoCat como autenticador da rede, ele identifica o pacote já autenticado através de marcas relacionadas a pacotes, 0x4 para não autenticados e 0x3,0x2 e 0x1 para os autenticados, dependendo do grupo ele escolhe entre as marcas 3,2 e 1.
Quando eu precisei fazer com que determinados pacotes saissem por uma segunda conexão com a internet os problemas começaram. De forma alguma eu consegui fazer funcionar. Eu removia todas as regras subia apenas as regras necessárias ao roteamento e funcionava, quando misturava com as regras nada de funcionar.

Após ler muitos logs e fazer muitos testes comecei a entender o funcionamento.
No geral quando um pacote casa com uma regra o iptables para o processamento na chain e passa para a próxima chain (ou para o envio do pacote quando chega na última chain). Mas no caso do alvo MARK, como o pacote não foi aceitado nem rejeitado, o processamento não para, ele simplesmente associa o pacote à marca e segue para próxima regra. Se houver alguma outra regra de MARK conflitante, que também case com o pacote, a marca do pacote será alterada.

Exemplo:
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 200.xxx.xxx.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 0/0 -j MARK --set-mark 2
Neste caso todos os pacotes com origem em 192.168.0.0/24 serão marcados com 2 no final do processamento
Se a última regra desta chain fosse:
iptables -t mangle -A PREROUTING -s 0/0 -d 0/0 -j MARK --set-mark 5
Todos os pacotes seriam marcados com 5.

Desta forma é preciso muita atenção para criar regras de marcação de pacotes, a fim de evitar que a marca não seja aplicada corretamente.
No caso do exemplo a melhor ordem para as regras seria:
iptables -t mangle -A PREROUTING -s 0/0 -d 0/0 -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 0/0 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -d 200.xxx.xxx.0/24 -j MARK --set-mark 1

Desta forma todos os pacotes com origem em 192.168.0.0/24 com destino a 200.xxx.xxx.0/24 recebem marca 1, com origem 192.168.0.0/24 e qualquer destino recebem marca 2 e os demais pacotes marca 5

Espero que seja útil para mais alguém esta informação

Abraços a todos!
[1] http://lartc.org/

[Dia a Dia] Relax Paraguariensis

De: Humberto Gessinger

"Hoje eu acordei mais cedo
Tomei sozinho o chimarrão
Procurei a noite na memória... procurei em vão
Hoje eu acordei mais leve (nem li o jornal)
Tudo deve estar suspenso... nada deve pesar
Já vivi tanta coisa, tenho tantas a viver
Tô no meio da estrada e nenhuma derrota vai me vencer
Hoje eu acordei livre: não devo nada a ninguém
Não há nada que me prenda

Ainda era noite, esperei o dia amanhecer
Como quem aquece a água sem deixar ferver
Hoje eu acordei, agora eu sei viver no escuro
Até que a chama se acenda
Verde... quente... erva... ventre... dentro... entranhas
Mate amargo noite adentro estrada estranha

Nunca me deram mole, não (melhor assim)
Não sou a fim de pactuar (sai pra lá)
Se pensam que tenho as mãos vazias e frias (melhor assim)
Se pensam que as minhas mãos estão presas (surpresa)

Mãos e coração, livres e quentes: chimarrão e leveza
Mãos e coração, livres e quentes: chimarrão e leveza

... ilex paraguariensis...
... ilex paraguariensis..."

[Dica do Dia] Instalar o Debian via SSH

Uma vez me mostraram uma forma de instalar o SuSE via VNC, e eu achei o máximo, fiquei pensando depois, poxa, como seria legal se no debian tivesse essa opção também.
E não é que tem?

Na hora de iniciar o instalador basta usar install DEBCONF_PRIORITY=medium e na hora de selecionar os extras ativar o network install.

Deste moto basta quem está "do outro lado" iniciar o instalador e configurar a rede, o resto é feito via ssh :D

Lindo neh?

Abraços a todos!

[Dia a Dia] Frio, frio, frio

Puta que o pariu, tah mto frio, dói nos ossos, doi muito este frio.

Frio, frio, frio, puta que o pariu, tá muito frio nesta cidade!

Abraços a todos!