Roteamento estático no GNU/Linux

Publicado por Mauro da fontoura em 20/12/2013

[ Hits: 17.111 ]

 


Roteamento estático no GNU/Linux



Nesta dica, vou demonstrar como configura o sistema operacional GNU/Linux como roteador. Vamos usar dois sistemas distintos para realizar o roteamento, para que o leitor aprenda como se faz em distribuições baseadas em Red Hat e em Debian.

Roteador CentOS 6.4

VirtualBox: máquina virtual com CentOS 6.4 instalado e 4 placas de rede configuradas:

Obs.: as placas de rede nas máquinas virtuais, devem ser configuradas como rede interna. CentOS 6.4 - n1-LinuxRouter1 :: Configurando a rede :: editei os arquivos de configuração de placas de rede no CentOS:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Até a eth3, conforme a tabela:
Linux: Roteamento estático no GNU/Linux

# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
#BOOTPROTO=static
HWADDR=08:00:27:95:1B:87
IPADDR=192.168.0.249
NETMASK=255.255.255.252
#GATEWAY=192.168.0.1
#IPV6INIT=yes
#IPV6_AUTOCONF=yes

ONBOOT=yes
# Fazer para todas as placas


# Intel Corporation 82540EM Gigabit Ethernet Controller

DEVICE=eth1
#BOOTPROTO=static
HWADDR=08:00:27:95:1B:87
IPADDR=192.168.1.254
NETMASK=255.255.255.252
GATEWAY=192.168.0.1249
#IPV6INIT=yes
#IPV6_AUTOCONF=yes

ONBOOT=yes
# Fazer para todas as placas

Reiniciei as interfaces de rede:

# /etc/init.d/network stop
# /etc/init.d/network start


Ficando assim:

# ifconfig | more

eth0      Link encap:Ethernet  Endereço de HW 08:00:27:95:1B:87  
          inet end.: 192.168.0.249  Bcast:192.168.0.251  Masc:255.255.255.252
          endereço inet6: fe80::a00:27ff:fe95:1b87/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:138 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:19704 (19.2 KiB)  TX bytes:6547 (6.3 KiB)

eth1      Link encap:Ethernet  Endereço de HW 08:00:27:69:12:4C  
          inet end.: 192.168.1.254  Bcast:192.168.1.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe69:124c/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:139 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:19755 (19.2 KiB)  TX bytes:6532 (6.3 KiB)

eth2      Link encap:Ethernet  Endereço de HW 08:00:27:CF:E4:39  
          inet end.: 192.168.2.254  Bcast:192.168.2.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fecf:e439/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:139 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:19755 (19.2 KiB)  TX bytes:6532 (6.3 KiB)

eth3      Link encap:Ethernet  Endereço de HW 08:00:27:0B:AD:A7  
          inet end.: 192.168.3.254  Bcast:192.168.3.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe0b:ada7/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:139 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:19755 (19.2 KiB)  TX bytes:6532 (6.3 KiB)

É importante lembrar que o GNU/Linux não se comporta como roteador por padrão, negando todo o encaminhamento de pacotes entre redes distintas.

O comando para instruir o kernel do Linux a fazer roteamento e permitir o tráfego inter-rede, deve ser realizado em ambos os roteadores:

# echo "1" > /proc/sys/net/ipv4/ip_forward

Criei um script chamado ip_forward.sh para ser executado quando a máquina der o boot, para não precisar digitar o comando acima toda vez que o sistema for reiniciado:

# vi ip_forward.sh

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward

Deixei o script ip_forward.sh como executável:

# chmod +x ip_forward

Movi o script para o diretório /usr/local/bin:

# mv ip_forward /usr/local/bin

Consultei o runlevel padrão no CentOS 6.4, para pode criar o link simbólico no diretório correto:

# runlevel
  3

Consultei os serviços que iniciam no diretório /etc/rc3.d:

# ls -l /etc/rc3.d/

Criei um link simbólico em /etc/rc3.d/, com um número de arquivo que não existia:

# ln -s /usr/local/bin/ip_forward /etc/rc3.d/S90ip_forward

Roteador Debian Wheezy

Debian Wheezy - n2-LinuxRouter2 :: Configurando a rede:

# vi /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
           address 192.168.0.250
           netmask 255.255.255.252
           network 192.168.0.248
           broadcast 192.168.0.251
#          gateway 192.168.0.1

# The second network interface

auto eth1
allow-hotplug eth1
iface eth1 inet static
           address 192.168.8.254
           netmask 255.255.255.0
           network 192.168.8.0
           broadcast 192.168.8.255
           gateway 192.168.0.248

# The third network interface
auto eth2
allow-hotplug eth2
iface eth2 inet static
           address 192.168.9.254
           netmask 255.255.255.0
           network 192.168.9.0
           broadcast 192.168.9.255
           gateway 192.168.0.248

Reiniciei as interfaces de rede:

# /etc/init.d/network stop
# /etc/init.d/network start


Ficando assim:

# ifconfig | more

eth0      Link encap:Ethernet  Endereço de HW 08:00:27:c3:5f:22
          inet end.: 192.168.0.250  Bcast:192.168.0.251  Masc:255.255.255.252
          endereço inet6: fe80::a00:27ff:fec3:5f22/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:578 (578.0 B)

eth1      Link encap:Ethernet  Endereço de HW 08:00:27:9b:d4:9d
          inet end.: 192.168.8.254  Bcast:192.168.8.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe9b:d49d/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:578 (578.0 B)

eth2      Link encap:Ethernet  Endereço de HW 08:00:27:af:cc:34
          inet end.: 192.168.9.254  Bcast:192.168.9.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:feaf:cc34/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:578 (578.0 B)

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:16436  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# echo "1" > /proc/sys/net/ipv4/ip_forward

Criei um script chamado ip_forward.sh para ser executado quando a máquina der o boot:

# vi ip_forward.sh

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward

Deixei o script ip_forward.sh como executável:

# chmod +x ip_forward

Movi o script para o diretório /usr/local/bin:

# mv ip_forward /usr/local/bin

Consultei o runlevel padrão no Debian para pode criar o link simbólico no diretório correto:

# runlevel
  3

Consultei os serviços que iniciam no diretório /etc/rc3.d:

Criei um link simbólico em /etc/rc3.d/S91ip_forward, com um número de arquivo que não existia:

# ln -s /usr/local/bin/ip_forward /etc/rc3.d/S91ip_forward

Configuração manual de rotas e testes

Inserindo as rotas:

-Roteador CentOS:

# route add -net 192.168.8.0/24 gateway 192.168.0.250
# route add -net 192.168.9.0/24 gateway 192.168.0.250


-Roteador Debian Wheezy:

# route add -net 192.168.1.0/24 gateway 192.168.0.249
# route add -net 192.168.2.0/24 gateway 192.168.0.249
# route add -net 192.168.3.0/24 gateway 192.168.0.249


Após realizar as configurações, faça teste de ping em todas as interfaces de rede, e execute o comando:

# route -n

Para visualizar a tabela de rotas.

Bibliografia

  • Blog LabCisco
  • Redes de Computadores Gabriel Torres
  • Certificação Linux - Uirá Ribeiro

Outras dicas deste autor

Ativando SSH no Raspberrypi no Sistema Operacional Raspbian (sem trocas de cabos)

Atualizando o Adobe Flash Player no Debian 8 (Jessie)

Debian Wheezy - Alterando hostname sem reiniciar

Leitura recomendada

BigLinux - Uma boa opção pra quem quer começar no mundo Linux

Acesso a internet via bluetooth com Razr V3 via GPRS usando Fedora Core 6

Manual de instalação do giFT (traduzido)

The Chakra Project

Virtualização dos sistemas operacionais: CentOS, Debian, Slackware e Ubuntu (parte 2)

  

Comentários
[1] Comentário enviado por thyagobrasileiro em 23/12/2013 - 17:55h

Bem explicado. Ja tentasse fazer o mesmo no Vyatta?

[2] Comentário enviado por MauroFontoura em 26/12/2013 - 19:04h

Posso tentar fazer ele no Vyatta.
Obrigado

[3] Comentário enviado por refinski em 15/04/2014 - 08:11h

Bom dia amigo, queria tirar uma dúvida, estou usando o Debian, fiz exatamente o que esta descrito no seu tutorial, fiz uma rede bem simples conforme abaixo:

maquina1-------R1--------R2---------maquina2

maquina1- 192.168.10.4/24

R1:
eth0- 192.168.30.1/24
eth1- 192.168.10.1/24

R2:
eht0- 192.168.30.2/24
eth1- 192.168.20.1/24

maquina2- 192.168.20.3/24


Consigo pingar da maquina1 para o R1 tranquilamente mas da maquina1 para a maquina2 ou para o R2 não consigo pingar.

Estou usando como eth0 nos dois roteadores Debian uma placa 3com, se eu dou um ifconfig as duas placas estão em UP mas olhando atrás nenhuma delas esta piscando a luz verde, até mesmo já coloquei duas placas novas.

Será que falta alguma configuração?
Preciso colocar algo no resolv.conf?

Obrigado.

[4] Comentário enviado por maurofontoura em 16/04/2014 - 08:22h

Ola Amigo Bom Dia
No resolv.conf acredito que não é o rpoblema.

Vc consegue pingar as duas interfaces de R1?

Vc esta conectando as placas com cabo crossover?

[5] Comentário enviado por refinski em 17/04/2014 - 11:38h

Opa, realmente foi baba minha, eu nao estava usando cabo crossover, agora esta funcionando, mas a questão das rotas continuo apanhando muito, eu adiciono as rotas, incluo elas no network/interfaces e as vezes pinga as vezes nao, reiniciei a maquina e perdi tudo , tive que adicionar tudo de novo agora nao pinga da maquina 1 para maquina 2, mas consigo pingar da maquina1 para R1, tambem consigo pingar do R1 para R2, acredito que seja alguma baba nova minha, estou apanhando das rotas mas quando eu acertar acredito que nao esqueço nunca mais. abraço.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts