Roteamento estático no GNU/Linux
Dica publicada em Linux / Introdução
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.
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:
Reiniciei as interfaces de rede:
# /etc/init.d/network stop
# /etc/init.d/network start
Ficando assim:
É 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
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
# vi /etc/network/interfaces
Reiniciei as interfaces de rede:
# /etc/init.d/network stop
# /etc/init.d/network start
Ficando assim:
# 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
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
-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.
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:

# 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
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)
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
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
# 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)
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
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