[MASOCH-L] Redirecionamento de interfaces

Leandro leandro at allchemistry.com.br
Thu May 8 11:21:58 BRT 2014


Davi,

Acho que estou começando a entender. Escrevi um script, baseado no seu, 
para ilustrar o meu caso:

    echo "33 principal" >> /etc/iproute2/rt_tables
    ip rule add from all fwmark 33 table principal
    ip route add via 201.6.246.214 dev eth1 table principal
    iptables -t nat -A PREROUTING -o eth2 -p tcp --dport 25 -j SNAT
    --to-source 201.6.246.214
    iptables -t mangle -I PREROUTING -o eth2 -p tcp --dport 25 -j MARK
    --set-mark 33

Onde 201.6.246.214 é o IP do link principal, eth1 é a interface do link 
principal e eth2 é a interface do link de contingência. A quarta linha 
deve evitar o problema dos pacotes marcianos certo? :-)

O pessoal que colonizar Marte vai ficar muito ofendido com este termo 
"pacote marciano". kkkkkkkkk

Leandro Carlos Rodrigues
TI All Chemistry do Brasil
(11) 3014-7100

Em 08/05/2014 10:33, davi peres escreveu:
> é, ta meio confuso o que te passei pq recortei de 2 lugares diferentes :)
> * Como eu consigo saber quantas tabelas estão ativas e qual é o
>     conjunto de regras de roteamento de cada uma destas tabelas?
> - # ip rule show
> 0:      from all lookup local
> 32764:  from all fwmark 0x2 lookup GVT
> 32765:  from all fwmark 0x1 lookup COPEL
> 32766:  from all lookup main
> 32767:  from all lookup default
>
> 2. Todo pacote novo sempre é criado com qual número de marca (fwmark)
>     antes de ser alterado pelo IPTABLES (qual o fwmark default de um
>     pacote)?
> - Todo pacote novo não tem marcas ( que eu saiba ) vc é quem marca ele com
> o iptables. O fwnark default é a sua rota default...
>
> 3. Neste script que você passou, é mencionado na segunda linha "fwmark
>     1" mas na seguinte aparece "--set-mark 33". Acho que deveria ser
>     "--set-mark 1" estou certo?
> - Sim, errei na correria aqui.
>
> 4. Cada tabela de roteamento tem sua própria rota default?
> - Sim e não, vc quem especifica a roda com o comando "ip".
>
> # ip route show table COPEL
> default via 200.x.x.x dev eth1
>
> # ip route show table GVT
> não mostra nada por exemplo. No meu caso a gvt nao mostra nenhuma rota pois
> está seguindo a rota padrão. Eu poderia criar uma outra rota para a GVT e
> remover a rota padrão do servidor, mas daí teria que marcar TODOS os
> pacotes...
>
> 5. Se eu criar esta tabela "33 PRINCIPAL" que você sugeriu e criar uma
>     rota default para ela, todos os pacotes sem alteração do IPTABLES
>     serão interpretados _apenas_ pela tabela default de roteamento?
> - Se vc criar uma rota default para a tabela 33, todos os pacotes irão para
> esta rota e não seguirão mais a tabela default do pc... mas creio que vc
> não quer fazer isso. Aliás nunca fiz isso tambem. Sempre usei as tabelas de
> rotas para casos específicos, quando quero somente redirecionar algumas
> coisas pq já tem a rota padrão para fazer isso né...
>
> Segue denovo o script... um pouco mais elaborado
>
> echo "33 COPEL" >> /etc/iproute2/rt_tables
> echo "34 GVT" >> /etc/iproute2/rt_tables
>
> ip rule add from all fwmark 33 table COPEL
> ip rule add from all fwmark 34 table GVT
>
> iptables -t mangle -I PREROUTING -p tcp --sport 25 -j MARK --set-mark 33
> iptables -t mangle -I PREROUTING -p tcp --sport 22 -j MARK --set-mark 34
>
> ip route add via *200.x.x.x* dev eth1 table COPEL
> ip route add via *201.x.x.x* dev eth2 table GVT
>
> mas veja uma coisa, vc vai ter que fazer muitos testes aí para manusear os
> pacotes de entrada tambem. Mesmo que vc queira que eles saiam por um link
> tem que prestar a atenção se não estão entrando pelo outro.
>
> Se seus pacotes entrarem por um link e sairem pelo outro vc terá os famosos
> pacotes Marcianos ( vem lá de marte) !!!  Procura aí por pacotes marcianos
> kkk não to brincando.
>
>
> Em 8 de maio de 2014 09:42, Leandro <leandro at allchemistry.com.br> escreveu:
>
>> Davi. Eu fiquei estudando esta solução para ter certeza que algum comando
>> não iria afetar negativamente outras regras de roteamento e firewall já
>> implementadas aqui. Eu vi alguns artigos sobre o assunto e achei a sua
>> solução perfeita. Porém eu gostaria de entender melhor o que acontece nos
>> bastidores para não fazer besteira aqui na empresa.
>>
>> O que acontece é que este conceito de tabelas múltiplas de roteamento é
>> algo novo para mim. Sempre achei que houvesse apenas uma tabela.
>>
>> As dúvidas são as seguintes:
>>
>> 1. Como eu consigo saber quantas tabelas estão ativas e qual é o
>>     conjunto de regras de roteamento de cada uma destas tabelas?
>> 2. Todo pacote novo sempre é criado com qual número de marca (fwmark)
>>     antes de ser alterado pelo IPTABLES (qual o fwmark default de um
>>     pacote)?
>> 3. Neste script que você passou, é mencionado na segunda linha "fwmark
>>     1" mas na seguinte aparece "--set-mark 33". Acho que deveria ser
>>     "--set-mark 1" estou certo?
>> 4. Cada tabela de roteamento tem sua própria rota default?
>> 5. Se eu criar esta tabela "33 PRINCIPAL" que você sugeriu e criar uma
>>     rota default para ela, todos os pacotes sem alteração do IPTABLES
>>     serão interpretados _apenas_ pela tabela default de roteamento?
>>
>> Agradeço muito pela ajuda.
>>
>>
>> Leandro Carlos Rodrigues
>> TI All Chemistry do Brasil
>> (11) 3014-7100
>>
>> Em 07/05/2014 09:25, davi peres escreveu:
>>
>>> Da para fazer isso sim Leandro.
>>>
>>>
>>> echo "33 PRINCIPAL" >> /etc/iproute2/rt_tables
>>> ip rule add from all fwmark 1 table PRINCIPAL
>>> iptables -t mangle -I PREROUTING -p tcp --sport 25 -j MARK --set-mark 33
>>> ip route add via 177.220.129.41 dev eth1 table PRINCIPAL
>>>
>>> Serial algo mais ou menos assim.
>>>
>>>
>>>
>>> Em 7 de maio de 2014 08:42, Leandro <leandro at allchemistry.com.br>
>>> escreveu:
>>>
>>>   Permita-me explicar melhor meu problema. Acredito que não seja possível
>>>> fazer com iptables, por isso recorri a vocês.
>>>>
>>>> Tenho dois links que servem como acesso à Internet. Um deles é o link
>>>> principal e o outro serve apenas para contingência. Quando algum problema
>>>> ocorre no principal, o meu script transfere todo o roteamento de Internet
>>>> para o link de contingência.
>>>>
>>>> Até ai normal. O problema é que todo e-mail enviado por nós deve sair
>>>> pelo
>>>> link principal e de forma alguma pelo de contingência. Para evitar que
>>>> algum e-mail saia pelo link de contingência, eu coloquei uma regra no
>>>> iptables para dropar todos os pacotes da porta 25 saindo deste link, por
>>>> garantia. A situação normal quando o link principal cai é congelar todos
>>>> os
>>>> envios e a guardar o link principal voltar.
>>>>
>>>> O problema é que ocorreu uma situação incomum ontem. O link principal não
>>>> caiu, mas estava com problema de transmissão de pacotes para determinados
>>>> destinos, fazendo com que muitos conteúdos web não aparecessem
>>>> corretamente
>>>> nos navegadores dos funcionários. Para solucionar o problema dos
>>>> conteúdos
>>>> web, sem parar o serviço de email, pensei em transferir todo o tráfego
>>>> para
>>>> o link de contingência exceto aqueles cujos pacotes sejam da porta 25.
>>>> Tentei usar o route, mas o manual diz que você só pode configurar redes
>>>> nele e não portas (o que faz muito sentido). Então pensei no iptables,
>>>> mas
>>>> não achei nada no Google que mencionasse transferência de pacotes (sem
>>>> alteração do conteúdo do pacote) de uma interface para outra.
>>>>
>>>> Ontem mesmo o problema do link principal foi resolvido pela operadora.
>>>> Depois disto eu vi também que é possível configurar o Exim4 para
>>>> transmitir
>>>> apenas por uma interface. Entretanto para curiosidade técnica, gostaria
>>>> de
>>>> saber se existe alguma forma de rotear pacotes pela porta (apenas) entre
>>>> interfaces, e sem alterar o conteúdo dos pacotes. Gostaria de saber isto
>>>> até para conseguir solucionar outros problemas semelhantes, onde não
>>>> existe
>>>> possibilidade de configurar um determinado sofware para transmitir apenas
>>>> para uma determinada interface, por exemplo.
>>>>
>>>> Leandro Carlos Rodrigues
>>>> TI All Chemistry do Brasil
>>>> (11) 3014-7100
>>>>
>>>> Em 06/05/2014 13:34, Rafael Possamai escreveu:
>>>>
>>>>   Voce vai ter que habilitar o forwarding de pacotes entre interfaces, e
>>>>> como
>>>>> mencionou iptables, imagino que esteja usando Linux, entao seria algo
>>>>> assim:
>>>>>
>>>>> sysctl -w net.ipv4.conf.all.forwarding=1
>>>>>
>>>>> A sua regra seria mais ou menos assim:
>>>>>
>>>>> iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport YY -d x.x.x.x -j
>>>>> ACCEPT
>>>>>
>>>>> Mas depende muito de como quer fazer... Neste caso ele aceita pacotes
>>>>> saindo da eth1 indo para ip x.x.x.x:YY que esta atras da eth2.
>>>>>
>>>>> Nao se esqueca de adicionar as rotas corretas para cada subnet servida
>>>>> por
>>>>> cada interface, se nao o forwarding entre pacotes nao vai funcionar.
>>>>>
>>>>>
>>>>> Att.,
>>>>> Rafael
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2014-05-06 9:00 GMT-05:00 Leandro <leandro at allchemistry.com.br>:
>>>>>
>>>>>    Pessoal,
>>>>>
>>>>>> Alguém sabe a regra de iptables para redirecionar todos os pacotes de
>>>>>> uma
>>>>>> certa porta de destino de uma interface para outra interface?
>>>>>>
>>>>>> --
>>>>>> Leandro Carlos Rodrigues
>>>>>> TI All Chemistry do Brasil
>>>>>> (11) 3014-7100
>>>>>>
>>>>>> __
>>>>>> masoch-l list
>>>>>> https://eng.registro.br/mailman/listinfo/masoch-l
>>>>>>
>>>>>>    __
>>>>>>
>>>>> masoch-l list
>>>>> https://eng.registro.br/mailman/listinfo/masoch-l
>>>>>
>>>>>   __
>>>> masoch-l list
>>>> https://eng.registro.br/mailman/listinfo/masoch-l
>>>>
>>>>   __
>>> masoch-l list
>>> https://eng.registro.br/mailman/listinfo/masoch-l
>>>
>> __
>> masoch-l list
>> https://eng.registro.br/mailman/listinfo/masoch-l
>>
> __
> masoch-l list
> https://eng.registro.br/mailman/listinfo/masoch-l



More information about the masoch-l mailing list