[FUG-BR] [OFF Topic] VLAN com FreeBSD

Marcelo/Porks marcelorossi em gmail.com
Segunda Maio 26 21:16:34 BRT 2008


Obrigado pela a atenção. Cristiano, Marcelo Lima e Breno.

Ah.. e eu errei o nome do switch num email anterior. O nome correto é
Dell PowerConnect 2724.
Abaixo tem passo a passo como fiz para configurar.

Mas antes queria uma opinião de vocês.

Estou usando uma placa de rede gigabit da Realtek
$ dmesg | grep re0
re0: <RealTek 8169S Single-chip Gigabit Ethernet> port 0xe800-0xe8ff
mem 0xdffffe00-0xdffffeff irq 18 at device 10.0 on pci0

Fiz um teste transferindo arquivos com essa placa (de uma máquina para
outra com um cabo cross. A outra máquina também tinha uma placa de
rede idêntica a esta).
Não estou lembrado da velocidade que atingi, mas lembro que foi MUITO
satisfatório.

Mas depois que ativei a vlan em cima desta placa, parece que a rede
está dando uma 'travadinha'. Mas é algo muito sutil e acontece as
vezes apenas.

por exemplo ao dar o comando:
$ dmesg | grep re0

As vezes demora um pouquinho para mostrar o resultado (estou conectado
remotamente à está máquina, usando a vlan).
'Localmente' (no teclado da máquina) não percebi nenhuma 'travada'.

A primeira suspeita é que a placa está abrindo o bico, mas será que
pode ser a máquina?
Teria algum jeito de eu ver se não é a máquina (processador, memória)
que está não está aguentando?

Obrigado novamente.

=============================

Bom, talvez para vocês este texto pareça um tanto quanto chato e trivial.

Aviso que antes de sexta-feira (23 de maio) meu conhecimento sobre
vlan era nulo.
E quando eu consigo implementar algo novo, eu tenho costume de
escrever um .txt detalhando o que fiz.
Estou postando aqui pois talvez seja útil para alguém como eu.

=============================

1. Cenário antigo

1.1.Configuração nos Clientes:
Clientes1: subnet 192.168.1.0/24
Clientes2: subnet 192.168.2.0/24
Clientes3: subnet 192.168.3.0/24

1.2. Ligação Física (cabeamento):
<Clientes1> -- <switch_1> -- <Placa 1 Gateway vr0>
<Clientes2> -- <switch_2> -- <Placa 2 Gateway vr1>
<Clientes3> -- <switch_3> -- <Placa 3 Gateway re0>

1.3. Resultado prático:
Os computadores membros de <Clientes1> se enxergam e enxergam a vr0
(192.168.1.1) no <gateway>
Os computadores membros de <Clientes2> se enxergam e enxergam a vr1
(192.168.2.1) no <gateway>
Os computadores membros de <Clientes3> se enxergam e enxergam a re0
(192.168.3.1) no <gateway>

=============================

2. Cenário a ser alcançado

2.1. Configuração nos Clientes:
Clientes1: subnet 192.168.1.0/24
Clientes2: subnet 192.168.2.0/24
Clientes3: subnet 192.168.3.0/24

2.2. Ligação Física (cabeamento):
<Clientes1> -- <switch_1> -- <switch_4> -- <Placa 3 Gateway re0>
<Clientes2> -- <switch_2> -- <switch_4> -- <Placa 3 Gateway re0>
<Clientes3> -- <switch_3> -- <switch_4> -- <Placa 3 Gateway re0>

2.3. Resultado prático:
O <switch_1>, <switch_2> e <switch_3> estariam ligados as <Porta_1>,
<Porta_2> e <Porta_3> (respectivamente) do <switch_4>.
O Gateway estaria ligado apenas na <porta_4> do <switch_4>
Os computadores membros de <Clientes1> se enxergam e enxergam a vlan1
(192.168.1.1) (em cima da re0) no <gateway>
Os computadores membros de <Clientes2> se enxergam e enxergam a vlan2
(192.168.2.1) (em cima da re0) no <gateway>
Os computadores membros de <Clientes3> se enxergam e enxergam a vlan3
(192.168.3.1) (em cima da re0) no <gateway>
Mesmo se algum computador membro de <Clientes1> mudar seu IP para a
subnet do <Clientes2> (ou <Clientes3>) ele não vai ser capaz de
enxergar os computadores do <Clientes2> (ou <Clientes3>).
O dispositivo re0 (uma Placa de Rede da Realtek que existe no
<Gateway>) não tem um IP definido.
Considere 'vlan1', 'vlan2' e 'vlan3' como se fossem placas de rede,
como se fossem clones da re0.

Mas na verdade eles (vlan1, vlan2 e vlan3) não existem fisicamente.
Entretanto eles podem ser usados com o ifconfig, no pf.conf ou seja lá
onde for. Como se fosse um device de rede (assim como re0 é).
Fisicamente falando os pacotes que os <Clientes1>, <Clientes2> e
<Clientes3> enviarem para o <gateway> chegarão pelo cabo de rede
conectado na placa de rede Realtek, mas com o FreeBSD configurado
vamos poder manipular os pacotes dos <Clientes1> no device vlan1, dos
<Clientes2> no device vlan2 e dos <Clientes3> no device vlan3.

=============================

3. Configuração do Switch

o <switch_4> é um Dell PowerConnect 2724, meu problema (além de saber
configurar a vlan no FreeBSD) também foi saber configurar o Switch.
Também foi um problema saber porque devo definir uma porta (do switch)
como Tagged ou Untagged.

3.1. Teoria que me custou 1 sábado:
Um pacote marcado (Tagged) como parte de uma vlan tem acrescentado 4
bytes de informações. Esta informação é para identificar de que rede
virtual (vlan) este pacote é. Imagine esta informação como um número,
então podemos dizer que os pacotes dos <Clientes1> vão ter a
identificação '1', <Clientes2> a identificação '2' e <Clientes3> a
identificação '3'.
Assim o <gateway> conseguirá saber de qual cliente o pacote é.

Um switch, como o que citei, tem a capacidade de adicionar e/ou
remover a tag de vlan.
Uma máquina, sem nenhuma configuração especial não vai conseguir ler
um pacote com a tag de vlan, portanto todo pacote que chegar a está
máquina não pode ter a tag de vlan.
A tag de vlan pode ser adicionada pelo switch ou por um computador. No
cenário que eu propus apenas o <Gateway> e o <switch_4> sabem algo
sobre vlan, então apenas eles (o <Gateway> e o <switch_4>) irão
adicionar, remover ou interpretar as tags de vlan.

Para todas as outras máquinas (<Clientes1>, <Clientes2> e <Clientes3>)
os pacotes devem chegar sem **nenhuma** informação (untagged) sobre a
vlan, pois essas máquinas não terão nenhuma configuração sobre vlan.

3.2. Configuração prática:
3.2.1. Configurar o <switch_4> para ele adicionar a tag '1' a todo
pacote que **entrar** pela <Porta_1>, desde que este pacote não tenha
uma tag definida (No caso não vai ter nenhum pacote com a tag
definida, pois nenhum computador de <Clientes1> sabe trabalhar com
vlan).
3.2.2. Configurar o <switch_4> para ele adicionar a tag '2' a todo
pacote que **entrar** pela <Porta_2>, desde que este pacote não tenha
uma tag definida (No caso não vai ter nenhum pacote com a tag
definida, pois nenhum computador de <Clientes2> sabe trabalhar com
vlan).
3.2.3. Configurar o <switch_4> para ele adicionar a tag '3' a todo
pacote que **entrar** pela <Porta_3>, desde que este pacote não tenha
uma tag definida (No caso não vai ter nenhum pacote com a tag
definida, pois nenhum computador de <Clientes3> sabe trabalhar com
vlan).

Deste modo todos os pacotes que os <Clientes1>, <Clientes2> e
<Clientes3> enviarem para o <Gateway> terão a tag de vlan adicionada
pelo <switch_4> e, então, quando estes pacotes chegarem ao <gateway>
ele vai saber qual cliente enviou.

3.2.4. Entretanto, os pacotes que **saírem** pela <Porta_1> têm como
destino os computadores do <Clientes1>. Esses pacotes devem ter a tag
de vlan removida, pois esses computadores (<Clientes1>) não possuem
nenhuma configuração especial sobre vlan. O mesmo vale para os pacotes
que **SAIREM** pelas <Porta_2> e <Porta_3>.
3.2.5. Configurar o <switch_4> para **não remover** a tag de vlan dos
pacotes que **saírem** pela <Porta_4>, pois o <gateway> vai precisar
ler a tag para saber de que rede este pacote é.
3.2.6. Configurar o <switch_4> para ele adicionar a tag '4095' a todo
pacote que **entrar** pela <Porta_4>, desde que este pacote não tenha
uma tag definida.
Teoricamente o <switch_4> não precisa adicionar a tag de vlan nos
pacotes que **entrarem** pela <Porta_4>, pois o <gateway> deve ser o
responsável por fazer este trabalho.

Lembre-se que os pacotes que o <gateway> quiser enviar para os
<Clientes1>, <Clientes2> e <Clientes3> entrarão no <switch_4> pela
<Porta_4>. Estes pacotes já estarão com a tag de vlan definida (Ver
item 4 (a seguir), para saber como <gateway> deve ser configurado para
definir a tag de vlan).

Quando um pacote com a tag '1' entrar pela <Porta_4> o <switch_4>
encaminhará este pacote para a <Porta_1>, pois apenas esta porta faz
parte da vlan1.
Quando um pacote com a tag '2' entrar pela <Porta_4> o <switch_4>
encaminhará este pacote para a <Porta_2>, pois apenas esta porta faz
parte da vlan2.
Quando um pacote com a tag '3' entrar pela <Porta_4> o <switch_4>
encaminhará este pacote para a <Porta_3>, pois apenas esta porta faz
parte da vlan3.

Os pacotes que **não estiverem com a tag de vlan definida** e entrarem
pela <Porta_4> terão a tag '4095'. Geralmente os pacotes com essa tag
são dropados pelo switch.

Na verdade aconselho vocês a definirem todas as outras portas que não
serão usadas para receberem a tag '4095', assim se algum engraçadinho
espetar um cabo em alguma porta não terá acesso a absolutamente nada.

3.3 Passo a passo do item 3.2 para o Switch Dell PowerConnect 2724

3.3.1. Selecione no menu a esquerda 'VLAN Port Settings'.

Aqui definiremos algumas informações nos pacotes que estão
**ENTRANDO** pelas portas do switch.

Esta configuração é feita via Navegador, portanto você deve estar
sentado em um computador que está ligado a um cabo de rede que por sua
vez está ligado a uma Porta do <switch_4>, certifique-se que esta
porta que você esta ligado seja a <Porta_5> ou então que seja alguma
porta do <switch_1>. Digo isto, pois na configuração a seguir apenas a
<Porta_1> e <Porta_5> terão seus pacotes marcados com a tag da vlan
'1' e me parece que o switch Dell PowerConnect 2724 apenas permite que
a interface Configuração via Web seja acessada por Portas que estejam
na vlan '1'.

Na direita, em 'Interface' selecione 'Port 1', defina a caixa 'PVID
(1-4095)' para o valor '1', 'Frame Type' deve estar como 'Admit All',
'Ingress Filtering' como 'Enable' e, então, clique no Botão 'Apply
Changes'
Na direita, em 'Interface' selecione 'Port 2', defina a caixa 'PVID
(1-4095)' para o valor '2', 'Frame Type' deve estar como 'Admit All',
'Ingress Filtering' como 'Enable' e, então, clique no Botão 'Apply
Changes'
Na direita, em 'Interface' selecione 'Port 3', defina a caixa 'PVID
(1-4095)' para o valor '3', 'Frame Type' deve estar como 'Admit All',
'Ingress Filtering' como 'Enable' e, então, clique no Botão 'Apply
Changes'
Na direita, em 'Interface' selecione 'Port 4', defina a caixa 'PVID
(1-4095)' para o valor '4095', 'Frame Type' deve estar como 'Admit
All', 'Ingress Filtering' como 'Enable' e, então, clique no Botão
'Apply Changes'
Na direita, em 'Interface' selecione 'Port 5', defina a caixa 'PVID
(1-4095)' para o valor '1', 'Frame Type' deve estar como 'Admit All',
'Ingress Filtering' como 'Enable' e, então, clique no Botão 'Apply
Changes'
Na direita, em 'Interface' selecione 'Port 6', defina a caixa 'PVID
(1-4095)' para o valor '4095', 'Frame Type' deve estar como 'Admit
All', 'Ingress Filtering' como 'Enable' e, então, clique no Botão
'Apply Changes'
...
Na direita, em 'Interface' selecione 'Port 24', defina a caixa 'PVID
(1-4095)' para o valor '4095', 'Frame Type' deve estar como 'Admit
All', 'Ingress Filtering' como 'Enable' e, então, clique no Botão
'Apply Changes'

3.3.2. Selecione no menu a esquerda 'VLAN Membership'.

Aqui definiremos algumas informações sobre os pacotes que estão
**SAINDO** pela vlan. definiremos se o switch removerá ou não removerá
as informações sobre vlan dos pacotes que **ENTRAREM**. W também quais
portas fazem parte de quais VLAN e

N - Representa uma porta do switch que não é membro da vlan (na
configuração WEB do switch você vai ver no lugar N um espaço
**VAZIO**).
U - Representa uma porta do switch que é membro da vlan e os pacotes
que **saírem** por esta porta **terão** a tag de vlan removida.
T - Representa uma porta do switch que é membro da vlan e os pacotes
que **saírem** por esta porta **não terão** a tag de vlan removida.

Verifique se na direita está selecionada a opcao 'Select VLAN ID 1'.
Na figura na região inferior Deixe marcado como Tagged a <Porta_4> e
Untagged a <Porta_1>:
UNNTNNNN NNNNNNNN NNNNNNNN

Clique no Botao 'Apply Changes'


Selecione na direita 'Create VLAN' e digite na caixa '2' (sem aspas).
Na figura na região inferior Deixe marcado como Tagged a <Porta_4> e
Untagged a <Porta_2>:
NUNTNNNN NNNNNNNN NNNNNNNN

Clique no Botao 'Apply Changes'


Selecione na direita 'Create VLAN' e digite na caixa '3' (sem aspas).
Na figura na região inferior Deixe marcado como Tagged a <Porta_4> e
Untagged a <Porta_3>:
NNUTNNNN NNNNNNNN NNNNNNNN

Clique no Botao 'Apply Changes'

=============================

4. Configuração do <Gateway> usando FreeBSD

Nota: Este item é praticamente uma cópia do que Marcelo Lima escreveu [1]

Testado em FreeBSD 7.0 (com 'kldload if_vlan') e 6.2 (com o 'device
vlan' compilado no kernel)

Para habilitar o suporte a vlans sem ter que recompilar o kernel
utilizaremos o comando abaixo:
# kldload if_vlan

Não podemos esquecer de adicionar a entrada if_vlan_load="YES" no
arquivo /boot/loader.conf

Caso você queira compilar o suporte nativamente, adicione a entrada
abaixo no seu arquivo de configuração e recompile o seu kernel:
 device vlan

Adicionar no arquivo /etc/rc.conf as entradas abaixo:
ifconfig_re0="up"
cloned_interfaces="vlan1 vlan2 vlan3"
ifconfig_vlan1="inet 192.168.1.1 netmask 255.255.255.0 vlan 1 vlandev re0"
ifconfig_vlan2="inet 192.168.2.1 netmask 255.255.255.0 vlan 2 vlandev re0"
ifconfig_vlan3="inet 192.168.3.1 netmask 255.255.255.0 vlan 3 vlandev re0"

Reinicie o FreeBSD (gosto de reiniciar apenas para garantir que em
caso de um 'reboot' tudo vai funcionar)

=============================

5. Conclusão

Meu objetivo (descrito no item 2) foi alcançado.
Meu problema era mais sobre conceito de vlan do que sobre FreeBSD,
portanto peço desculpas pelo [OFF Topic]
Pelo que andei lendo VLAN tem outras aplicações além desta e também
existe outro tipo de VLAN.


Abraços.

=============================

6. Referências

[1] http://www.fug.com.br/content/view/232/60/
[2] http://www.tech-faq.com/vlan.shtml
[3] http://techrepublic.com.com/i/tr/downloads/netadmin/book_chapter/1587050897_chapter_7.pdf
[4] http://www.techimo.com/forum/networking-internet/69575-vlan-dlink-des-3226s-2.html
[5] http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4997&pagina=1

-- 
Marcelo Rossi
"This e-mail is provided "AS IS" with no warranties, and confers no rights."


Mais detalhes sobre a lista de discussão freebsd