Roteamento por origem no Linux

Trabalhando com roteamento por origem no Linux, aprenda a redirecionar o seu tráfego local LAN para vários links
externos. O cenário proposto no artigo, são 3 links externos e uma rede LAN.

[ Hits: 27.457 ]

Por: Vinícius de Oliveira Almeida em 16/02/2012


Introdução



A tempos, precisei atender um cliente cuja requisição era redirecionar sua rede interna (LAN) para links diferentes. Com ajuda de alguns amigos, eu consegui fazê-lo.

As configurações de roteamento são bem simples, o único passo complicado é a parte de compilação de kernel, podendo causar alguns “panics” na inicialização.

- Cenário
  • 4 interfaces de Rede FastEthernet ou GigabitEthernet

- Configuração Gateway Linux

Eth0: Local (LAN):
  • IP: 192.168.0.1/24
  • ALIAS: 192.168.1.1/24
  • ALIAS: 192.168.2.1/24

Eth1: Link 1 (OI):
  • IP: 187.6.85.2/24

Eth2: Link 2 (Internet Embratel):
  • IP: 200.166.196.2/24

Eth3: Link 3 (CTBC):
  • IP: 200.244.185.2/24

Bem, estamos com uma bomba, preciso dizer ao Servidor Linux que o endereço LAN '192.168.0.0/24' saía pelo Gateway OI.
O '192.168.1.1' saía pelo Embratel e o endereço de sub-rede '192.168.2.0/24', aponte para o link CTBC.

Difícil né?

Veja a topologia:
Linux: Roteamento por origem no Linux

Siga o próximo passo.
    Próxima página

Páginas do artigo
   1. Introdução
   2. Compilando Kernel
Outros artigos deste autor

Iptraf Sniffer - noções básicas

Instalando Servidor ELASTIX (PABX-IP)

Leitura recomendada

Instalando o modem NetDragon 56K

Failover de Internet

Aplicações WEB com Prisma [Mozilla Labs]

Compartilhar uma conexão via rádio na rede interna

Tor no Debian Squeeze - Instalação e Configuração

  
Comentários
[1] Comentário enviado por kuruminbranco em 16/02/2012 - 10:57h

E a configuração das interfaces, como ficou?
IP e mascara somente, correto?

[2] Comentário enviado por removido em 16/02/2012 - 11:31h

Ainda não fiz o artigo, porém achei muito bom,

favorito, nota 10!!!

[3] Comentário enviado por mago_dos_chats em 16/02/2012 - 17:13h

Gostei Vinicius, mais só uma questão para ver se funcionaria também, depois de compartilhar a internet no servidor com o MASQUERADE você poderia simplesmente adicionar as rotas como:
route add default gw 192.168.0.0 netmask 255.255.255.0 eth0 (OI)
route add default gw 192.168.1.0 netmask 255.255.255.0 eth1 (EMBRATEL)
route add default gw 192.168.2.0 netmask 255.255.255.0 eth2 (CTBC)

Ai todo trafego com destino a estas subredes sairia por estas interfaces, o que acha?

[4] Comentário enviado por yros em 16/02/2012 - 22:38h

Muito bom o artigo cara, é um assunto que normalmente os artigos são meio confusos, e você conseguiu deixar bem objetivo.

Valeu

[5] Comentário enviado por viniciuspedra em 17/02/2012 - 09:27h

primeiramente parabéns pelo artigo...
eu nunca alterei o kernel do linux porém vou ter que me dedicar a isso

gostaria de saber se não dah para deixar apenas uma faixa de IP, por exemplo a que eu uso que é 192.168.3.0 e determinar pelo IP em qual link q sai?

[6] Comentário enviado por gasparzinho_f em 17/02/2012 - 11:53h

bom dia.
artigo muito bom.
agora, seria muito mais complicado fazer a saida por tipo de serviço do que por subrede ??... pra quem não entendeu, digamos que youtube pelo pelo link1, email/ftp/ssh por link2 e qualquer outra coisa pelo link3... creio que temos que fazer marcação de pacotes e fazer a regra correspondente redirecionar a saida... é correto a idéia ?

[7] Comentário enviado por jose.freitas.rj em 17/02/2012 - 14:34h

Olá vinicius.almeida! Primeiramente te dou os parabéns pelo bom artigo! Falando sobre as regras de entrada e saída via iptables, eu teria que criar uma regra pra cada rede interna assossiando a elas as portas e as interfaces que são de saída? Por exemplo,
iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -m tcp -p tcp --dport 3128 -o eth1 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.2.0/24 -m tcp -p tcp --dport 3128 -o eth2 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.3.0/24 -m tcp -p tcp --dport 3128 -o eth3 -j MASQUERADE

iptables -A INPUT -i eth1 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 110 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth2 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 110 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth3 -s 0/0 -d xxxxxxxx -p tcp -m tcp --dport 110 -j TOS --set-tos 16
iptables -A PREROUTING -t nat -i eth3 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 110 -j DNAT --to 192.168.3.253:110

[8] Comentário enviado por viniciuspedra em 17/02/2012 - 16:19h

uma coisa q eu estava analisando agora é a dificuldade de encontrar uma placa mãe com 3 entradas PCI...
então o negócio é placa de rede dual que por sinal tmb não está facil =D

[9] Comentário enviado por jose.freitas.rj em 18/02/2012 - 13:54h

Fala viniciuspedra! Essas placas-mãe você até encontra no mercado, mas geralmente são todas offboard. Sempre uso placas Intel com processadores Intel, sempre... Mas no caso de ter poucos slots pci procuro criar ETHs virtuais (eth0:0, eth0:1,eth0:2...), mas eu sempre procuro colocar placa físicas separadas pra cada trâmiti.

[10] Comentário enviado por viniciuspedra em 19/02/2012 - 09:07h

poiseh jose.freitas.rj... pior acaso eu tenho uma, antiga mas com 3 slots pci...
eu to usando eth virtuais porém eu me deparei com um problemão: uso proxy...
descriminei os proxys e nenhum deles funcionou...
alguém já fez esse tipo de roteamento utilizando proxy?

[11] Comentário enviado por viniciuspedra em 19/02/2012 - 09:19h

ah... consegui...
eu criei o eth0 com o ip do proxy e depois o eth0:1 e eth0:2 com os outros IPs... funcionou... agora vou para o roteamento :D

[12] Comentário enviado por jose.freitas.rj em 19/02/2012 - 13:36h

Entendi Vinícius Pedra, eu também já fiz isso que você fez sobre o proxy e funcionou. Agora, o que está pegando é nas regras do firewall com tantas ETHs de saída. Como tenho 2 links de internet distintos em placas separadas eu queria saber como será as regras de entradas e saídas desses 2 links. Cito um exemplos abaixo que eu acho que deveria funcionar pra cada link.

iptables -A INPUT -i eth1 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 25 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth2 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 110 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth3 -s 0/0 -d xxxxxxxx -p tcp -m tcp --dport 80 -j TOS --set-tos 16
iptables -A PREROUTING -t nat -i eth3 -s 0/0 -d xxxxxxxx -m tcp -p tcp --dport 21 -j DNAT --to 192.168.3.253:21

OBS: Bem como terei algumas rotas de entrada e saída em funcionamento no mesmo servidor como está neste artigo acho eu que deveria funcionar.

[13] Comentário enviado por removido em 19/02/2012 - 21:24h

oi aí, meu vizinho!!!
10.
;-))

[14] Comentário enviado por jose.freitas.rj em 29/02/2012 - 08:21h

Aê pessoal, alguém saberia responder minha pergunta? Abraços...

[15] Comentário enviado por danistation em 17/10/2013 - 22:55h

entendi. as suas redes privadas estão divididas cada qual para um link de internet. OK. mas como fica a rota padrão do seu linux?

melhor... essa tabela de rotas, como ficaria?

0.0.0.0 metric 0 via eth1
0.0.0.0 metric 0 via eth2
0.0.0.0 metric 0 via eth3

?

se fo assim, como o linux lida com os pacotes com origem 127.0.0.1?

tenho essa duvida pq quero montar um cenario semelhante. mas o que aconteceria se eu fizesse nessa topologia um SSH para seu ip público na OI? beleza, na máquina linux chega, mas como ela responderia? por qual gateway irá sair? afinal de contas, se sua tabela de rotas estiver:

0.0.0.0 metric 0 via eth1
0.0.0.0 metric 0 via eth2
0.0.0.0 metric 0 via eth3

como ele vai decidir por qual delas responder a essas requisições que se originam, por exemplo, do link da OI?

resumindo, a minha dúvida é:

se vier uma requisição externa, pelo link da oi, por exemplo, o linux reponde pela mesma interface (caso do SSH para a própria maquina linux)?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts