Olá Pessoal.
Tradicionalmente utilizamos switches multi-layer ou roteadores quando precisamos fazer o roteamento inter-VLAN em ambientes que possuem múltiplas VLANs associadas com suas respectivas sub-redes, uma vez que essas caixas especializadas oferecem suporte nativo ao encapsulamento 802.1q (trunk). Em um dos artigos mais lidos do blog, intitulado "Configuração de Switch Multi-Layer", explico ao leitor como configurar um switch Cisco para essa finalidade, através da criação de interfaces virtuais vinculadas às suas VLANs, de maneira que essas interfaces podem ser configuradas com um IP que será o gateway de todas as máquinas membros da respectiva VLAN.
Essa mesma tarefa pode ser configurada em um servidor Linux, por isso a topologia apresentada abaixo será utilizada para exemplificar o processo de configuração de roteamento inter-VLAN no Linux. Assim como nos artigos anteriores, estou considerando que o roteador Linux está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu).
A primeira etapa consiste na instalação do pacote denominado vlan para que, posteriormente, as configurações de rede do Linux ofereçam suporte à criação de interfaces lógicas roteadas (layer-3) do tipo VLAN. Essa tarefa é simples e rápida através do APT:
apt-get install vlan
Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". A partir da interface física eth0 (trunk 802.1q), criaremos duas novas interfaces lógicas denominadas eth0.100 (vlan100) e eth0.200 (vlan200).
###--- em /etc/network/interfaces
auto eth0
iface eth0 inet manual
auto eth0.100
iface eth0.100 inet static
address 192.168.100.254
netmask 255.255.255.0
auto eth0.200
iface eth0.200 inet static
address 192.168.200.254
netmask 255.255.255.0
Na sintaxe eth0.100 fazemos referência à interface física antes do ponto e, depois do ponto, fazemos referência ao número da VLAN vinculada à interface. É somente depois da instalação do pacote vlan que o Linux passa a reconhecer essa sintaxe. Uma alternativa válida seria utilizar uma convenção diferente de nomes em que fazemos referência direta à VLAN na denominação da interface em conjunto com o parâmetro vlan-raw-device para associá-la a sua respectiva VLAN. O exemplo abaixo traz a mesma configuração anterior com essa sintaxe alternativa:
###--- em /etc/network/interfaces
auto eth0
iface eth0 inet manual
auto vlan100
iface vlan100 inet static
vlan-raw-device eth0
address 192.168.100.254
netmask 255.255.255.0
auto vlan200
iface vlan200 inet static
vlan-raw-device eth0
address 192.168.200.254
netmask 255.255.255.0
Como o Linux não permite o roteamento entre sub-redes por padrão, é necessário instruir seu kernel a fazê-lo por meio de um dos comandos abaixos, lembrando que a primeira opção é volátil, ou seja, será perdida em caso de boot, enquanto que a segunda opção é persistente:
opção 1) echo "1" > /proc/sys/net/ipv4/ip_forward
opção 2) sysctl -w net.ipv4.ip_forward=1
Obs.: Vale ressaltar que as interfaces lógicas do tipo VLAN são diferentes das tradicionais sub-interfaces lógicas vinculadas às interfaces físicas. A criação de sub-interfaces lógicas é uma técnica simples de virtualização de interfaces físicas nativamente reconhecida pelo Linux, procedimento realizado através da sintaxe ethX:X. Por outro lado, o Linux torna-se capaz de interpretar cabeçalhos 802.1q (trunk) quando utilizamos o pacote vlan para criar interfaces lógicas roteadas do tipo VLAN (sintaxe ethX.X).
apt-get install vlan
Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". A partir da interface física eth0 (trunk 802.1q), criaremos duas novas interfaces lógicas denominadas eth0.100 (vlan100) e eth0.200 (vlan200).
###--- em /etc/network/interfaces
auto eth0
iface eth0 inet manual
auto eth0.100
iface eth0.100 inet static
address 192.168.100.254
netmask 255.255.255.0
auto eth0.200
iface eth0.200 inet static
address 192.168.200.254
netmask 255.255.255.0
Na sintaxe eth0.100 fazemos referência à interface física antes do ponto e, depois do ponto, fazemos referência ao número da VLAN vinculada à interface. É somente depois da instalação do pacote vlan que o Linux passa a reconhecer essa sintaxe. Uma alternativa válida seria utilizar uma convenção diferente de nomes em que fazemos referência direta à VLAN na denominação da interface em conjunto com o parâmetro vlan-raw-device para associá-la a sua respectiva VLAN. O exemplo abaixo traz a mesma configuração anterior com essa sintaxe alternativa:
###--- em /etc/network/interfaces
auto eth0
iface eth0 inet manual
auto vlan100
iface vlan100 inet static
vlan-raw-device eth0
address 192.168.100.254
netmask 255.255.255.0
auto vlan200
iface vlan200 inet static
vlan-raw-device eth0
address 192.168.200.254
netmask 255.255.255.0
opção 1) echo "1" > /proc/sys/net/ipv4/ip_forward
opção 2) sysctl -w net.ipv4.ip_forward=1
Obs.: Vale ressaltar que as interfaces lógicas do tipo VLAN são diferentes das tradicionais sub-interfaces lógicas vinculadas às interfaces físicas. A criação de sub-interfaces lógicas é uma técnica simples de virtualização de interfaces físicas nativamente reconhecida pelo Linux, procedimento realizado através da sintaxe ethX:X. Por outro lado, o Linux torna-se capaz de interpretar cabeçalhos 802.1q (trunk) quando utilizamos o pacote vlan para criar interfaces lógicas roteadas do tipo VLAN (sintaxe ethX.X).
Façam seus testes...
Samuel.