Routing on a stick com Linux
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRmOaCwwEZyrTL6PfVpk-A-4lROVfROBal71xllWt34WL-qDsQ-5PHk02lRz18G9vBkYIgNlelw0XTIuwmLL_HTPJkl8aBaI6lUTFUmwcMv6gYjkB7v-40fnsZn0JP0MU2WC01R7DcZo/s640/Router+on+a+stick.png)
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...
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
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 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
iface eth0.10
inet static address 192.168.10.1
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
vlan_raw_device eth0
auto eth0.20
iface eth0.20
inet static address 192.168.20.1
netmask 255.255.255.0
network 192.168.20.0
broadcast 192.168.20.255
vlan_raw_device eth0
auto eth0.30
iface eth0.30
inet static address 192.168.30.1
netmask 255.255.255.0
network 192.168.30.0
broadcast 192.168.30.255
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
Ou definir regras diferentes para uma VLAN no squid:
acl vlan30 src 192.168.30.0/24
acl vlan20 src 192.168.20.0/24
acl youtube dstdomain youtube.com
http_access deny vlan20 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 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 all
Ou em um switch HP/3com:
# port link-type trunk
# port trunk permit vlan all
Se você usa o Mikrotik RouterOS a coisa pode ser um pouco mais confusa, confira aqui.
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
Ou definir regras diferentes para uma VLAN no squid:
acl vlan30 src 192.168.30.0/24
acl vlan20 src 192.168.20.0/24
acl youtube dstdomain youtube.com
http_access deny vlan20 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 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 all
Ou em um switch HP/3com:
# port link-type trunk
# port trunk permit vlan all
Se você usa o Mikrotik RouterOS a coisa pode ser um pouco mais confusa, confira aqui.
Comentários
Postar um comentário