Routing on a stick com Linux
Autor: João Lucas B. Macedo | Publicado: 2013-12-19T07:01:00-08:00


Router on a stick é a técnica usada para encaminhar o tráfego de diferentes VLAN's usando um único roteador conectado a uma única porta de transporte (porta trunk ou VLAN tagged). Um roteador deve ter uma interface conectada em cada rede que ele encaminha o tráfego, mas se você não tem o switch layer 3, ou um roteador que tenha suporte à VLAN, você pode usar o Linux. Com uma única porta de rede é possível criar interfaces virtuais e atribuir uma VLAN a cada uma usando o encapsulamento 802.1q. Este 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 de saída com o ID da VLAN de origem. A interface do roteador recebe os frames em cada interface virtual segundo a respectiva VLAN. Veja a imagem abaixo:
 Existem 3 VLAN's no switch acima, 10, 20 e 30. O servidor, que fará o papel de roteador, está conectado em uma única porta onde tem acesso as 3 VLAN's. O tráfego de uma ou de outra é diferenciado pelo protocolo 802.1q.
Se quiser entender mais sobre VLAN's consulte este artigo.

Em seguida vou criar 3 VLAN interfaces sobre a interface eth0. Com as interfaces criadas você pode referenciá-las para manipular qualquer configuração no sistema, como regras de firewall, roteamento, etc...&nbsp;


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 &gt;&gt; /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

Existem algumas opões quanto à nomenclatura das interfaces, mas você 
pode alterar usando o "vconfig set_name_type". Por exemplo, as 
interfaces da vlan 3 podem ser nomeadas como vlan0030 ou vlan30 ou eth0.30. Consulte o help e veja a nomenclatura atual no arquivo "/proc/net/vlan/config":
# cat /proc/net/vlan

Para adicionar uma VLAN interface com VLAN ID 10 na interface eth0 seria:

# vconfig add eth0 10

Veja se a interface foi criada verificando o arquivo "/proc/net/vlan/config". Uma interface será criada com o nome eth0.10 ou vlan10, dependendo do "name-type" definido.
Para remover uma VLAN interface:

# vconfig rem&nbsp; eth0.10

Você deve declarar as configurações da interface normalmente, exatamente como as interfaces reais, mas com apenas um parâmetro a mais, o que identifica a interface física associada à vlan. No caso do Debian o arquivo é o "/etc/network/interfaces":

auto eth0.10&nbsp;&nbsp;&nbsp; iface eth0.10&nbsp;&nbsp;&nbsp; inet static address 192.168.10.1&nbsp;&nbsp;&nbsp; netmask 255.255.255.0&nbsp;&nbsp;&nbsp; network 192.168.10.0&nbsp;&nbsp;&nbsp; broadcast 192.168.10.255&nbsp;&nbsp;&nbsp; vlan_raw_device eth0 auto eth0.20&nbsp;&nbsp;&nbsp; iface eth0.20&nbsp;&nbsp;&nbsp; inet static address 192.168.20.1&nbsp;&nbsp;&nbsp; netmask 255.255.255.0&nbsp;&nbsp;&nbsp; network 192.168.20.0&nbsp;&nbsp;&nbsp; broadcast 192.168.20.255&nbsp;&nbsp;&nbsp; vlan_raw_device eth0auto eth0.30&nbsp;&nbsp;&nbsp; iface eth0.30&nbsp;&nbsp;&nbsp; inet static address 192.168.30.1&nbsp;&nbsp;&nbsp; netmask 255.255.255.0&nbsp;&nbsp;&nbsp; network 192.168.30.0&nbsp;&nbsp;&nbsp; broadcast 192.168.30.255&nbsp;&nbsp;&nbsp; vlan_raw_device eth0 


Veja que no exemplo defini 3 VLANs na interface eth0, a 10 , a 20 e a 30. 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.20 -o eth0.30 -j REJECT# iptables -A FORWARD -i eth0.30 -o eth0.20 -j REJECT&nbsp; Ou definir regras diferentes para uma VLAN no squid:acl vlan30 src 192.168.30.0/24acl vlan20 src 192.168.20.0/24acl youtube dstdomain youtube.comhttp_access deny vlan20 youtubeConfiguração do SwitchPara que o tráfego chegue na interface da VLAN correta, os frames devem vir com a marcação 802.1q. Para isso a porta do switch deve estar configurada corretamente como trunk e permitindo tráfego das VLAN's desejadas.Em um switch Cisco a configuração seria:# switch(config-if) switchport mode trunk# switch(config-if) switchport trunk allow vlan allOu em um switch HP/3com:# port link-type trunk# port trunk permit vlan allSe você usa o Mikrotik RouterOS a coisa pode ser um pouco mais confusa, confira aqui.