[MASOCH-L] Redirecionamento de interfaces
Rafael Possamai
rafael at gav.ufsc.br
Thu May 8 11:42:08 -03 2014
Leandro,
Aqui tem um artigo bem completo sobre PBR.
http://www.cisco.com/c/en/us/td/docs/ios/12_2/qos/configuration/guide/fqos_c/qcfclass.html#wpxref35843
Nao sei como funciona no Linux, mas em *BSD voce pode rodar duas instancias
do mesmo daemon em FIBs diferentes. Mesma coisa com qualquer outro comando,
por exemplo:
tabela 0 - default
tabela 1 - backup
No console:
setfib 0 ping google.com - pacotes vao utilizar a tabela de roteamento
default
setfib 1 ping google.com - pacotes vao utilizar a tabela de roteamento
backup
Isso voce pode implementar nos scripts conforme necessario.
Att.,
Rafael
2014-05-08 9:21 GMT-05:00 Leandro <leandro at allchemistry.com.br>:
> 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
>>
>
> __
> masoch-l list
> https://eng.registro.br/mailman/listinfo/masoch-l
>
More information about the masoch-l
mailing list