Instalando e Configurando o VLAN no Debian Squeeze

O objetivo deste artigo é mostrar como o Linux pode ser usado em uma configuração com VLANs, assumindo o papel de roteador e permitindo um melhor controle das redes locais. O uso de VLANs é algo relativamente comum hoje em dia, sendo esta característica suportada por vários switches existentes no mercado. Entretanto, o seu uso associado a máquinas Linux ainda não é muito difundido e merece ser explicado em detalhes.

Porque usar VLANs

Existem várias boas razões para se usar VLANs:

  • Ganho em performance. Com o emprego de VLANs, o domínio de broadcast fica reduzido, sendo repassado somente dentro da VLAN onde foi gerado e evitando tráfego desnecessário.
  • Aumento na segurança. Através das VLANs pode-se fazer uma separação já no nível de enlace, dificultando o acesso para possíveis invasores que não fazem parte da LAN virtual. Além disso, somente o tráfego que se deseja rotear é repassado entre VLANs. Mas fique alerta: os equipamentos utilizados podem conter falhas na implementação de VLANs e permitir algum tipo de repasse de dados.
  • Geração de grupos virtuais de trabalho. Grupos afins podem estar virtualmente interligados através de VLANs, mesmo quando não estão fisicamente interconectados na mesma sub-rede física, comunicando-se mais rapidamente e com mais segurança, sem gerar tráfego desnecessário para outros grupos.
  • Administração facilitada. O processo de reconfiguração com VLANs é bastante facilitado, isto é, a adição de máquinas ou sub-redes a uma VLAN e feito de forma lógica, sem que sejam necessárias mudanças físicas. Os switches em geral possuem interfaces de configuração baseadas em web, simples e intuitivas.
  • Redução de custos. Além da redução do custo de administração, o emprego de VLANs pode evitar a aquisição de roteadores, caso seja usado um switch com suporte a roteamento entre VLANs (comumente conhecido como switch camada 3). Uma outra opção é empregar uma máquina máquina Linux com suporte a VLANs, agindo como roteador da rede.

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Agora vamos instalar o pacote necessário no Debian.

apt-get install vlan -y

Agora vamos carregar o módulo

modprobe 8021q

Agora vamos inserir ele na inicialização do sistema

echo 8021q >> /etc/modules

Criando VLANs

A criação de VLANs em Linux passa pelo comando vconfig. Basicamente ele irá criar novas interfaces de redes virtuais à partir de uma interface de rede real, atribuindo números de VLANs diferentes para cada rede criada. A sintaxe básica do comando para adicionar e remover interfaces de redes virtuais associadas a VLANs está a seguir:

Vamos levar em consideração que a interface que vamos utilizar é a eth0

Para adicionar somente uma vlan a uma interface podemos fazer da seguinte forma

vconfig add eth0 10
Added VLAN with VID == 10 to IF -:eth0:-

Agora para remover uma vlan de uma interface podemos fazer da seguinte forma

vconfig rem eth0.10
Removed VLAN -:eth0.10:-

Note que para remover precisamos informar eth0.10 aonde o .10 é da VLAN.

Agora vamos criar as VLANs para teste

vconfig add eth0 2
vconfig add eth0 3

Agora precisamos tirar todo o tráfego da eth0

ifconfig eth0 0.0.0.0 up

Agora vamos setar o ips para as VLANs

Vamos configurar a VLAN 2 primeiro

ifconfig eth0.2 10.1.1.1 broadcast 10.1.1.255 netmask 255.255.255.0 up

Agora vamos configurar a VLAN 3

ifconfig eth0.3 10.1.2.1 broadcast 10.1.2.255 netmask 255.255.255.0 up

Agora se precisarmos do tráfego entre essas VLANs precisamos habilitar o roteamento

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

Agora você precisa configurar a suas porta do switch para pertencer a VLAN 2 e 3 ao mesmo tempo, e conectar seu servidor nesta porta para que funcione.

Agora vamos acertar o roteamento da vlan 2

route add -net 10.1.1.0 netmask 255.255.255.0 dev eth0.2

Agora vamos acertar o roteamento da vlan 3

route add -net 10.1.2.0 netmask 255.255.255.0 gw eth0.3

Agora vamos configurar as VLANs é como se fossemos configurar uma interface de rede comum

vim /etc/network/interfaces
#Loopback
auto lo
iface lo inet loopback

auto vlan10
iface vlan10 inet static
address 10.101.0.25
netmask 255.255.255.0
network 10.101.0.0
broadcast 10.101.0.255
mtu 1500

#VLAN LAN
auto vlan10
iface vlan10 inet static
address 10.101.0.23
netmask 255.255.255.0
network 10.101.0.0
broadcast 10.101.0.255
gateway 10.101.0.254
mtu 1500
vlan_raw_device eth0

#VLAN DMZ
auto vlan172
iface vlan_172 inet static
address 172.12.101.8
netmask 255.255.255.0
network 172.12.101.0
broadcast 172.12.101.255
mtu 1500
vlan_raw_device eth0

#VLAN BKP
auto vlan192
iface vlan192 inet static
address 192.168.0.23
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
mtu 1500
vlan_raw_device eth0

Agora vamos reiniciar a interface de rede para que seja carregada a nossa vlan

/etc/init.d/networking restart
Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces ... (warning).
Reconfiguring network interfaces...Set name-type for VLAN subsystem. Should be visible in /proc/net/vlan/config
Added VLAN with VID == 10 to IF -:eth0:-
Set name-type for VLAN subsystem. Should be visible in /proc/net/vlan/config
Added VLAN with VID == 172 to IF -:eth0:-
Set name-type for VLAN subsystem. Should be visible in /proc/net/vlan/config
Added VLAN with VID == 192 to IF -:eth0:-
done.

Agora vamos visualizar as nossas VLAN

ifconfig
eth0      Link encap:Ethernet  Endereço de HW 08:00:27:3f:b0:b8  
          inet end.: 10.101.0.25  Bcast:10.101.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:6389 errors:0 dropped:0 overruns:0 frame:0
          TX packets:928 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:546769 (533.9 KiB)  TX bytes:115906 (113.1 KiB)

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)

vlan10    Link encap:Ethernet  Endereço de HW 08:00:27:3f:b0:b8  
          inet end.: 10.101.0.25  Bcast:10.101.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

vlan172   Link encap:Ethernet  Endereço de HW 08:00:27:3f:b0:b8  
          inet end.: 172.12.101.8  Bcast:172.12.101.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

vlan192   Link encap:Ethernet  Endereço de HW 08:00:27:3f:b0:b8  
          inet end.: 192.168.0.23  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

Vamos visualizar elas com o comando ip

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:3f:b0:b8 brd ff:ff:ff:ff:ff:ff
3: vlan0@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 08:00:27:3f:b0:b8 brd ff:ff:ff:ff:ff:ff
4: vlan10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 08:00:27:3f:b0:b8 brd ff:ff:ff:ff:ff:ff
7: vlan172@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 08:00:27:3f:b0:b8 brd ff:ff:ff:ff:ff:ff
8: vlan192@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 08:00:27:3f:b0:b8 brd ff:ff:ff:ff:ff:ff

Agora vamos reiniciar a maquina para que não aparece mais a interface eth0 e somente as vlans

reboot

Não esqueça de ajustar o seu switch para identificar as VLANs que foram configuradas na porta que o servidor Linux estiver conectado.