Ver Feed RSS

Tecnologia de Redes, Mobilidade e Inovação

Usando o Linux para Interligar VLANs

Avalie este Post de Blog
O uso de VLANs permite ao administrador isolar redes, separar usuários e facilita a isolação de problemas (se ocorrer algo em uma VLAN, não afeta as demais). No entanto as VLANs também criam ilhas isoladas que - de alguma forma - necessitam de um roteador para se interligarem.

Os switchs L3 permitem essa interconexão, porém possuem alto custo (apesar de ótima performance). Muitas vezes não é necessário algo de alta performance, principalmente quando se trata de acesso à Internet (que não necessita de muita banda, pois o backbone de Internet é normalmente o gargalo).

Sendo assim este texto explica como transformar um servidor Linux em um roteador capaz de interconectar multiplas VLANs e rotea-las para a Internet.

VLAN e 802.1Q

Se você não está familiarizado com VLANs e 802.1Q, recomendo que você leia antes os dois artigos abaixo:
http://under-linux.org/b1447-os-page...tras-das-vlans
http://under-linux.org/b1538-o-que-e...-e-quando-usar

Eles dão algumas dicas sobre quando as VLANs são uteis e explica o que é o 802.1Q e porque ele é importante para um roteador de VLANs.

Cenário do Exemplo

Para facilitar as explicações, vou utilizar o exemplo da figura abaixo. O switch da parte superior chamaremos de switch 1 e o de baixo será o switch 2. Vamos considerar que o administrador configurou o switch 1 conforme o Exemplo 2 do artigo de 802.1Q.

Neste caso a porta 24 seria conectada ao switch 2 e a porta 20 ao Linux roteador. Repare também que não existe nenhum computador da VLAN 55 no switch 2, afinal a porta 24 do switch 1 não está enviando a VLAN 55 para ele.

Todas as VLANs serão enviadas ao Linux através do VLAN tagging (802.1Q). Além disso ele será o default gateway de todas essas redes para que ele possa interligar todas e conecta-las à Internet.

Vamos então utilizar os seguintes endereços no Linux:

VLAN 1: IP 10.0.0.1 Máscara 255.255.255.0
VLAN 50: IP 192.168.1.1 Máscara 255.255.255.0
VLAN 55: IP 192.168.2.1 Máscara 255.255.255.0

Assim os equipamento da VLAN 1 tem IP 10.0.0.x com default gateway 10.0.0.1. Os da VLAN 50 usam IP 192.168.1.x com gateway 192.168.1.1 e os da VLAN 55 usam IP 192.168.2.x com gateway 255.255.255.0. Se for o caso, o Linux pode ser o servidor de DHCP dessas redes, mas isso já foge do escopo deste artigo.

A porta Eth0 do Linux será conectada ao switch e a Eth1 será a porta de saída para a Internet (ligada ao roteador que sai para a Internet).

A figura abaixo exemplifica essa rede. Repare que não desenhei todos os computadores (até porque só iria fazer o desenho ficar confuso), mas seriam dois switchs de 24 portas cada, aonde cada porta está em uma das 3 VLANs: 1, 50 ou 55.

http://under-linux.org/wiki/images/t...1q_exemplo.png

Configurando o Linux como Roteador das VLANs

Configurar o Linux para essa aplicação é relativamente simples, porém não é apenas uma tarefa, mas sim várias pequenas tarefas simples.

Em primeiro lugar, vamos considerar que o Linux já está conectado à Internet e navegando e teremos então apenas que habilitar o roteamento no Linux e configurar o VLAN Tag na Ethernet. Ou seja, não vamos neste exemplo detalhar a configuração da Eth1, apenas da Eth0.

Habilitando o Roteamento

O roteamento do Linux é chamado packet forwarding, para habilita-lo (se já não estiver habilitado) basta configurar o arquivo /etc/sysctl.conf com a seguinte linha:
net.ipv4.ip_forward = 1


Para habilitar o roteamento sem precisar reiniciar o Linux basta usar o comando:
echo 1 > /proc/sys/net/ipv4/ip_forward


Para verificar se o roteamento está habilitado, utilize o comando:
cat /proc/sys/net/ipv4/ip_forward


Se o resultado for "1" é porque o roteamento está habilitado.

Configurando a Eth0

Agora precisamos criar sub-interfaces na Eth0 para as VLANs. Para as VLANs 1, 50 e 55 iremos criar as sub-interfaces eth0.1, eth0.50 e eth0.55 (percebeu que a sub-interface é o número da VLAN?).

Então basta criar essas sub-interfaces e habilitar a VLAN nelas, algo muito simples. Vamos ao diretório /etc/sysconfig/network-scripts/ e copiar o arquivo ifcfg-eth0 três vezes, cada um com um nome diferente. Vamos chama-los ifcfg-eth0.1, ifcfg-eth0.50 e ifcfg-eth0.55 (novamente, reparou que o nome do arquivo é o nome da VLAN?).

O seu arquivo ifcfg-eth0 deve conter algo assim:

DEVICE=eth0
IPADDR=192.168.50.2
NETMASK=255.255.255.0
NETWORK=192.168.50.0
BROADCAST=192.168.50.255
GATEWAY=200.88.100.27
ONBOOT=yes

Não se preocupe se o conteúdo não for exatamente o mesmo. Na verdade, é bem capaz que seu arquivo tenha muito mais linhas, o importante é que o IPADDR não conflite com nenhum dos IPs das VLANs citados acima. O gateway tem que ser o IP do roteador de saída para a Internet, que deve estar na eth1 (não é o IP da eth1, é o IP do roteador conectado na eth1).

Basta agora editar os arquivos criados. O ifcfg-eth0.1 deve ficar assim:

DEVICE=eth0.1
IPADDR=10.0.0.1
NETMASK=255.255.255.0
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
GATEWAY=200.88.100.27
ONBOOT=yes
VLAN=yes

O ifcfg-eth0.50 deve ficar assim:

DEVICE=eth0.50
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=200.88.100.27
ONBOOT=yes
VLAN=yes

O ifcfg-eth0.55 deve ficar assim:

DEVICE=eth0.55
IPADDR=192.168.2.1
NETMASK=255.255.255.0
NETWORK=192.168.2.0
BROADCAST=192.168.2.255
GATEWAY=200.88.100.27
ONBOOT=yes
VLAN=yes

Pronto, para ativar as novas configurações basta digitar service network restart e a interface Eth0 já vai estar aceitando VLAN Tagging.

Testando

Para testar, primeiro conecte um cabo Ethernet da porta 20 do switch no Linux.

VLAN 1

Coloque um computador com IP 10.0.0.2 e default gateway 10.0.0.1 em uma porta do switch da VLAN1 (por exemplo porta 5). Esse PC deve ser capaz de acessar o Linux (IP 10.0.0.1) e navegar na Internet.

VLAN 50

Coloque um computador com IP 192.168.1.2 e default gateway 192.168.1.1 em uma porta do switch da VLAN1 (por exemplo porta 12). Esse PC deve ser capaz de acessar o Linux (IP 192.168.1.1) e navegar na Internet.

VLAN 55

Coloque um computador com IP 192.168.2.2 e default gateway 192.168.2.1 em uma porta do switch da VLAN1 (por exemplo porta 18). Esse PC deve ser capaz de acessar o Linux (IP 192.168.2.1) e navegar na Internet.

Como Funciona o Roteamento

Vamos ver alguns exemplos de como irão caminhar os pacotes. Para isso vamos escolher e dar nomes a 4 computadores. Vamos chama-los de 1, 2, 3 e 4 conforme a figura abaixo.

http://under-linux.org/wiki/images/2..._exemploii.png

O 1, 2 e 3 estão na VLAN 50 e o 4 está na VLAN 1. Eles estão configurados assim:

1: IP 192.168.1.10 máscara 255.255.255.0 e gateway 192.168.1.1
2: IP 192.168.1.220 máscara 255.255.255.0 e gateway 192.168.1.1
3: IP 192.168.1.52 máscara 255.255.255.0 e gateway 192.168.1.1
4: IP 10.0.0.80 máscara 255.255.255.0 e gateway 10.0.0.1

Vamos ver o primeiro caso: computador 1 falando com o 2. Até ai tranqüilo, tudo dentro do mesmo switch.

http://under-linux.org/wiki/images/t..._exemplo12.png

A seta indica que o tráfego vai direto do 1 para o 2.

Quando o 1 se comunica com o 3, é necessário passar pelo link entre os switchs. O switch de cima marca o pacote como sendo da VLAN 50, envia ao switch de baixo que permite então que ele chegue ao 3.

http://under-linux.org/wiki/images/t..._exemplo13.png

A coisa fica começa a ficar complexa quando o 1 tenta se comunicar com o 4 que está em outra VLAN. O 1 envia o pacote para seu default gateway (Linux), chega até ele taggeado como VLAN 50, o Linux roteia para a interface da VLAN 1, devolve ao switch (agora com tag VLAN 1) e é encaminhado para o switch de baixo, aonde chega ao computador 4.

http://under-linux.org/wiki/images/7..._exemplo14.png

E agora vamos ver a comunicação do computador 3 com o 4. Repare que ele passa duas vezes pelo link entre os switchs e isso é totalmente normal.

http://under-linux.org/wiki/images/t..._exemplo34.png

No entanto o tráfego tem que ser bem dimensionado para não sobrecarregar a interconexão entre os switchs. Quanto de tráfego será gerado entre o computador 3 e o 4? Se o tráfego for grande, podemos pensar em instalar um Linux no switch de baixo para fazer esse roteamento, no entanto repare que neste caso teremos dois roteadores para a VLAN 1 e VLAN 50 agregando mais complexidade. Uma configuração recomendada apenas para os bravos que gostem de emoções fortes e que compreendem **muito** bem os conceitos de roteamento.

Uma evolução futura dessa redes seria o uso de switchs L3 que iriam fazer o trabalho de roteamento. No entanto isso só seria indicado caso houvesse um tráfego muito grande (centenas de Mbps) entre as VLANs. O switch L3 nada mais é um roteador instalado dentro do switch (é como se o Linux viesse dentro do switch), no entanto a topologia seria rigorosamente a mesma.

Continuando

Agora você pode pensar em configurar o Linux como DHCP server para cada uma dessas sub-interfaces e talvez habilitar o firewall (iptables) para garantir a segurança entre elas. A partir de agora as interfaces ifcfg-eth0.1, ifcfg-eth0.50 e ifcfg-eth0.55 são praticamente iguais às interfaces eth0 ou eth1 que você usaria nessas configurações.

Atualizado 22-11-2009 em 11:35 por mlrodrig

Categorias
Não Categorizado

Comentários

  1. Avatar de konlinux
    Olá
    Bem didático.
    particularmente uso:
    echo 1 > /proc/sys/net/ipv4/ip_filter

    Este artigo estah excelente.
    Parabéns.

    Konlinux
  2. Avatar de mlrodrig
    Citação Postado originalmente por konlinux
    Olá
    Bem didático.
    particularmente uso:
    echo 1 > /proc/sys/net/ipv4/ip_filter

    Este artigo estah excelente.
    Parabéns.

    Konlinux
    Obrigado pelo elogio. Quanto ao truque do "echo 1 >" não é criação minha, mas é um truque que nunca é demais lembrar.
  3. Avatar de kalz
    Muito interessante este artigo, parabens.

    Agora, estou com um projeto meio confuso e estou vendo algumas soluções para o que eu preciso.

    Não sei se funciona, poderia me esclarecer esta duvida.

    Veja, tenho que distribuir internet para um condominio de empresas que tem aproximadamente 140 escritórios, porem uma maquina não poderá enchergar a outra. Será um servidor Firewall (WAN e LAN) e switches para interligar os clientes.

    Pensei em Vlan taggeada mas somente um gateway para comunicação, criando cada porta do switch uma vlan e taggear a porta do servidor em cada uma delas, mas eis questão, consigo fazer isso somente com um gateway, pelo que vi a interface vlan do Linux tem que ser do mesmo ID da vlan, correto? Se sim, desse modo não consigo, pois terei any vlans para um gateway somente.

    Pensei em dividir redes /30 sendo que cada cliente terá seu gateway e as redes não se enchergam.

    Alguma ideia diferente dessas?


    Obrigado
  4. Avatar de mlrodrig
    Citação Postado originalmente por kalz
    Muito interessante este artigo, parabens.

    Agora, estou com um projeto meio confuso e estou vendo algumas soluções para o que eu preciso.

    Não sei se funciona, poderia me esclarecer esta duvida.

    Veja, tenho que distribuir internet para um condominio de empresas que tem aproximadamente 140 escritórios, porem uma maquina não poderá enchergar a outra. Será um servidor Firewall (WAN e LAN) e switches para interligar os clientes.

    Pensei em Vlan taggeada mas somente um gateway para comunicação, criando cada porta do switch uma vlan e taggear a porta do servidor em cada uma delas, mas eis questão, consigo fazer isso somente com um gateway, pelo que vi a interface vlan do Linux tem que ser do mesmo ID da vlan, correto? Se sim, desse modo não consigo, pois terei any vlans para um gateway somente.

    Pensei em dividir redes /30 sendo que cada cliente terá seu gateway e as redes não se enchergam.

    Alguma ideia diferente dessas?


    Obrigado
    Utilizando VLAN tagging no Linux você vai necessitar de um default gateway para cada VLAN (até porque quando você dividir a rede em pedaços de tamanho /30, cada cliente terá como possibilidade de default gateway apenas o outro IP desse "bloco"). É possível de se fazer sim, apenas que dá trabalho para configurar tantas VLANs no Linux.

    Existem switchs que possuem o conceito de Assymetric VLAN que pode ser uma outra opção. Eles permitem com que as portas estejam cada uma em uma VLAN diferente, mas uma das portas pertença a todas as VLANs (sem necessitar de VLAN tagging). Assim, por exemplo, você configura a porta 1 desse switch como pertencendo a todas as VLANS (ela se comunica com todas as outras e todas as outras se comunicam com ela), e depois cada porta em uma VLAN diferente. Ficaria assim (por exemplo):

    VLAN 10: porta 1 e 2 (untagged)
    VLAN 11: porta 1 e 3 (untagged)
    VLAN 12: porta 1 e 4 (untagged)
    ...
    VLAN 150: porta 1 e 142 (untagged)

    Como a quantidade de portas é grande (não cabe em um único switch) eu utilizaria - por exemplo - 6 switchs interligados (a interconexão entre eles seria com VLAN tag).
    Assim, por exemplo, o switch 1 receberia o gateway e também 1 porta de cada um dos demais switchs. Por exemplo gateway na porta 1, switch 2 na porta 2, switch 3 na porta 3 até o switch 6 na porta 6. Essa topologia pode inclusive crescer com o tempo (vc compra mais switchs de acordo com que consegue mais clientes).

    No switch 1 você colocaria os clientes nas portas 7 até 24
    No switch 2 você usuaria a porta 1 para ligar com switch 1 e clientes nas portas 2 a 24
    No switch 3 você usuaria a porta 1 para ligar com switch 1 e clientes nas portas 2 a 24
    ...
    No switch 6 você usuaria a porta 1 para ligar com switch 1 e clientes nas portas 2 a 24

    As portas 2, 3, 4, 5 e 6 do switch 1 e as portas 1 dos demais tem que ser taggeadas para que a informação das VLANs passem por eles livremente.

    Ou seja, no final ficaria algo assim:

    Switch 1

    VLAN 10
    switch 1 porta 1 (gateway)
    switch 1 porta 7 (primeiro cliente)

    VLAN 11
    switch 1 porta 1 (gateway)
    switch 1 porta 8 (próximo cliente do switch 1)

    ...

    VLAN 27
    switch 1 porta 1 (gateway)
    switch 1 porta 24 (último cliente do switch 1)

    Switch 2

    VLAN 28
    switch 1 porta 1 (gateway)
    switch 1 porta 2 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 1 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 2 (primeiro cliente do switch 1)

    VLAN 29
    switch 1 porta 1 (gateway)
    switch 1 porta 2 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 1 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 3 (segundo cliente do switch 1)

    ...

    VLAN 50
    switch 1 porta 1 (gateway)
    switch 1 porta 2 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 1 taggeada (conexão entre switch 1 e 2)
    switch 2 porta 24 (último cliente do switch 1)

    Switch 3

    VLAN 51
    switch 1 porta 1 (gateway)
    switch 1 porta 3 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 1 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 2 (primeiro cliente do switch 3)

    VLAN 52
    switch 1 porta 1 (gateway)
    switch 1 porta 3 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 1 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 3 (segundo cliente do switch 3)

    ...

    VLAN 73
    switch 1 porta 1 (gateway)
    switch 1 porta 3 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 1 taggeada (conexão entre switch 1 e 3)
    switch 3 porta 24 (último cliente do switch 3)

    Vai assim até o último switch.

    Resumo

    Você pode usar VLANs normais, taggear a porta Ethernet do Linux e criar 140 VLANs e 140 IPs no Linux (mais simples de configurar os switchs, mais complexo de configurar o Linux) ou então usar Assymetric VLAN e usar um único IP no Linux (mais simples de configurar o Linux, mais complexa a configuração dos switchs).

    Em ambos os casos a configuração não é complexa, apenas trabalhosa. Se você for organizado e documentar tudo direitinho (não importando a opção que escolher), sobrevive. Se você for bagunçado e não gostar de documentar as coisas, vai morrer louco.
    Atualizado 05-12-2009 em 19:10 por mlrodrig
  5. Avatar de kalz
    Muito obrigado pela ajuda, é como imaginei um gateway para cada vlan que saco!!!

    Vou ver os preços de switches com função assimétrica vlan ou senão passar para configuração de redes /30 mesmo.

    Valeu pela ajuda e otimo post...Parabens


    Abraços

    --Kalz--

+ Enviar Comentário