Routing on a stick é a técnica usada para “rotear” tráfego inter VLAN’s usando um único roteador conectado com um único cabo a uma única porta de transporte (porta trunk ou VLAN tagged). Um roteador deve ter um pé em cada rede que ele encaminha tráfego, mas se ele tem apenas uma porta de rede podemos criar interfaces virtuais e atribuir cada uma à uma VLAN usando o encapsulamento 802.1q. Um roteador pode ser, é claro, um pc modesto com uma distro Linux qualquer instalada. Primeiro basta que a porta do switch esteja configurada como trunk, usando o encapsulamento 802.1q, marcando os frames com o ID da VLAN de origem. A interface do roteador recebe os frames e atribui a cada interface virtual segundo a respectiva VLAN. Veja a imagem abaixo:
Veja que existem 3 VLAN’s no switch, uma para cada porta. O roteador está conectado em uma única porta de onde tem acesso a todas as VLAN’s, o tráfego de uma e outra é diferenciado pelo protocolo 802.1q.
Se quiser entender mais sobre VLAN’s consulte este artigo: goo.gl/YWJOdS
Neste guia vou criar 2 VLAN interfaces sobre uma interface real. Com as interfaces criadas você pode referenciá-las para manipular qualquer configuração no sistema, como regras de firewall, roteamento, etc…
Sem mais para teoria vamos à prática.
Criando as interfaces
Antes de tudo instale o pacote “vlan”. No Debian e derivados seria:
apt-get install vlan
Em seguida carregue o módulo “8021q”, e coloque uma linha para ele no arquivo “/etc/modules”, para que seja carregado sempre:
# modprobe 8021q
# echo 8021q >> /etc/modules
Com o módulo carregado pelo kernel você pode exibir as configurações das VLAN interfaces no arquivo “/proc/net/vlan/config”. E o comando para manipular as interfaces é o “vconfig”:
cat /proc/net/vlan/config
vconfig –help
vconfig –help
Existem algumas opões quanto à nomenclatura das interfaces, mas você pode alterar usando o “vconfig set_name_type”. Por exemplo, as interfaces da vlan 30 podem ser nomeadas como vlan0030 ou vlan30 ou eth0.30. Consulte o help e veja a nomenclatura atual no arquivo “/proc/net/vlan/config”.
Para adicionar uma VLAN interface com VLAN ID 45 na interface eth0 seria:
# vconfig add eth0 45
Veja se a interface foi criada verificando o arquivo “/proc/net/vlan/config”. Uma interface será criada com o nome eth0.45 ou vlan45, dependendo do “name-type” definido.
Para remover uma VLAN interface:
# vconfig rem eth0.45
Você deve declarar as configurações da interface no arquivo “/etc/network/interfaces” normalmente, exatamente como as interfaces reais, mas com apenas um parâmetro a mais, o que identifica a interface física da vlan:
auto eth0.45
iface eth0.45 inet static
address 192.168.45.1
netmask 255.255.255.0
network 192.168.45.0
broadcast 192.168.45.255
vlan_raw_device eth0
auto eth0.50
iface eth0.50 inet static
address 192.168.50.1
netmask 255.255.255.0
network 192.168.50.0
broadcast 192.168.50.255
vlan_raw_device eth0
Veja que no exemplo defini 2 VLANs na interface eth0, a 45 e a 50.
Agora você pode montar as configurações da máquina baseadas nas interfaces das VLANs. Por exemplo, impedir que o tráfego de uma VLAN seja encaminhado para outra:
# iptables -A FORWARD -i eth0.45 -o eth0.50 -j REJECT
# iptables -A FORWARD -i eth0.50 -o eth0.45 -j REJECT
Ou definir regras diferentes para uma VLAN no squid:
acl vlan45 src 192.168.45.0/24
acl vlan50 src 192.168.50.0/24
acl youtube dstdomain youtube.com
http_access deny vlan50 youtube
Configuração do Switch
Para que o tráfego chegue na interface da VLAN correta, os frames devem vir com a marcação 802.1q. Para isto a porta do switch deve estar configurada corretamente como trunk e permitindo as VLAN’s é claro.
Em um switch Cisco a configuração seria:
switch(config-if) switchport mode trunk
switch(config-if) switchport trunk allow vlan all
switch(config-if) switchport trunk allow vlan all
Ou em um switch HP/3com:
port link-type trunk
port trunk permit vlan all
port trunk permit vlan all
Se você usa o RouterOS a coisa pode ser mais confusa, confira aqui: goo.gl/Lw4qMO