Traduções: English - Français - Português (Brasil)
Compartilhar/Ligar Conexões de Rede
Contents
Introdução
Ligar comuma ponte sua conexão de rede é um é um método prático para compartilhar sua conexão de internet entre dois (ou mais) computadores. É útil se você não puder comprar um roteador com mais de uma porta ethernet ou se for um estudante universitário em um dormitório com conectores Ethernet limitados e sem roteador.
Basicamente, uma ponte é conectar um computador a outro computador que já tenha uma conexão a uma rede maior (como a Internet) e permitir que o computador em ponte use a conexão do computador em rede. Para fazer isso, o computador em rede precisa ter duas portas ethernet, uma para a rede grande e outra para o computador em ponte. Antes de começar, certifique-se de que o computador com o qual você fará a ponte possui duas portas Ethernet e que o hardware é capaz de fazer uma ponte entre as conexões Ethernet (provavelmente deveria ser).
Outro cenário de exemplo para usar a ponte é fornecer recursos de rede redundantes. Por exemplo, o uso de duas interfaces de rede para conectar-se a dois switches habilitados para a árvore de abrangência fornece uma conexão redundante no caso de uma falha de cabo, interface ou comutador. Isso requer que a árvore de abrangência seja ativada na interface de ponte e no switch.
Instalação do Programa
O o programa que você precisará é chamado brctl e está incluído no bridge-utils. Encontre-o no Synaptic, ou instale-o usando o comando:
# aptitude install bridge-utils
Este software permite que você configure e use a interface de ponte. A interface de ponte aparece como uma nova interface em ip link, muito parecida com eth0 ou eth1. Ele não existe fisicamente no seu computador, mas, em vez disso, é uma interface virtual que apenas pega os pacotes de uma interface física e os encaminha para os outros de forma transparente.
Configurar sua Ponte
Configurar Manualmente uma Ponte
Nota: Todos esses comandos devem ser emitidos no computador com a conexão de rede existente. Para configurar o computador que será interligado, basta configurá-lo normalmente, como faria com qualquer outro computador. Você pode usar o DHCP, ou você pode usar um endereço estático. Não importa.
Nota: Se, depois de tentar usar a interface bridge, você achar que seu link de rede está inativo e se recusar a funcionar novamente, pode ser que o roteador/switch upstream esteja bloqueando "switches não autorizados" na rede (por exemplo, detectando pacotes BPDU). Você terá que alterar sua configuração para permitir explicitamente a máquina host/porta de rede como um "switch".
O primeiro passo para criar a rede de pontes é realmente criá-la. Rode este comando para dar o pontapé inicial e criar a nova interface.
# brctl addbr br0
O nome br0 é com você e pode ser o que quiser. Agora você precisa adicionar as interfaces que serão interligadas. Você pode cruzar a enumeração de seus dispositivos ethernet com (eth0, eth1, etc. é comum):
# ip addr show
Adicione tanto a interface com o segundo computador, quanto a interface que conecta com a rede. Use brctl:
# brctl addif br0 eth0 eth1
Isto adicionará as duas interfaces eth0 e eth1 para conectar br0. Simples o suficiente. Não há distinção entre como você adiciona as pontes ou a ordem que você faz ou qualquer comando especial que você precise adicionar para diferenciá-las. Então não se preocupe com isso.
Bem, agora temos nossas pontes, então traga todas as interfaces e você estará pronto!
Configuração da ponte em /etc/network/interfaces
Para tornar sua ponte um pouco mais permanente, você precisará editar /etc/network/interfaces. Usando nossos nomes de exemplo, faça com que pareça com isso e você estará pronto (se quiser usar o DHCP):
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Set up interfaces manually, avoiding conflicts with, e.g., network manager iface eth0 inet manual iface eth1 inet manual # Bridge setup iface br0 inet dhcp bridge_ports eth0 eth1
Para trazer sua ponte, você só precisa emitir # ifup br0 e as outras interfaces necessárias serão levantadas sem ter nada no arquivo interfaces sobre as interfaces de ponte.
Se você gosta de IPs estáticos, basta adicionar as opções de IP estático na configuração da interface br0. Por exemplo:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo br0 iface lo inet loopback # Set up interfaces manually, avoiding conflicts with, e.g., network manager iface eth0 inet manual iface eth1 inet manual # Bridge setup iface br0 inet static bridge_ports eth0 eth1 address 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 gateway 192.168.1.1
Opções úteis para ambientes virtualizados
Algumas outras opções úteis para usar em qualquer instância de ambiente virtualizado são:
bridge_stp off # disable Spanning Tree Protocol bridge_waitport 0 # no delay before a port becomes available bridge_fd 0 # no forwarding delay bridge_ports none # if you do not want to bind to any ports bridge_ports regex eth* # use a regular expression to define ports
Configuração das variáveis do kernel relacionadas à ponte
Existem diversas variáveis do kernel que afetam a operação da ponte. Em alguns casos, você pode precisar ajustar essas variáveis. Existem duas opções comuns:
Adicione as variáveis ao /etc/sysctl.conf diretamente
Coloque-os em um fragmento do arquivo de configuração sysctl (por exemplo, /etc/sysctl.d/bridge_local.conf)
No último caso, o script de inicialização procps deve se encarregar de carrega-lo durante o boot. No entanto, no Squeeze isso não acontece, e você precisa reiniciá-lo em /etc/rc.local (ou similar):
# /etc/rc.local # Load kernel variables from /etc/sysctl.d /etc/init.d/procps restart exit 0
Libvirt e pontes
Libvirt é uma API de virtualização que suporta o KVM (e várias outras tecnologias de virtualização). Muitas vezes é desejável e uma interface de rede física com convidados criando uma ponte. Isso geralmente oferece excelente desempenho e não requer NAT. Esta operação é composta de duas partes:
Configure a interface bridge no host conforme descrito neste artigo, aqui ou aqui
- Configure o convidado para usar a ponte recém-criada
O livro de mão da rede do libvirt fornece instruções completas.
Você pode verificar se a ponte está funcionando corretamente, observando a saída brctl:
root@server:/etc/libvirt/qemu# brctl show bridge name bridge id STP enabled interfaces br0 8000.001ec952d26b yes eth0 vnet0 vnet1 vnet2 virbr0 8000.000000000000 yes
Como pode ser visto, as interfaces de rede de convidado vnet0, vnet1 e vnet2 estão ligadas à interface física eth0 na ponte br0. A interface virbr0 é usada apenas pelo libvirt para oferecer aos hóspedes conectividade NAT.
Ponte com uma interface de rede wireless
Assim como você pode conectar duas interfaces Ethernet com fio, você pode fazer a ponte entre uma interface Ethernet e uma interface sem fio. No entanto, a maioria dos pontos de acesso (Access Points - APs) rejeitará os quadros que têm um endereço de origem que não foi autenticado no ponto de acesso. Como o Linux faz a ponte Ethernet de maneira transparente (não modifica os quadros que saem ou que chegam), precisamos configurar algumas regras para fazer isso com um programa chamado ebtables.
Para uma abordagem alternativa da Camada 3 usando proxy ARP e roteamento, consulte Conexões de Ponte através do Proxy Arp.
Visão geral de ebtables
O ebtables é essencialmente como o iptables, exceto que ele opera na sub-camada MAC da camada de enlace de dados do modelo OSI, em vez da camada de rede. No nosso caso, isso permite alterar o endereço MAC de origem de todos os nossos quadros. Isso é útil porque enganamos nosso AP ao pensar que todos os nossos quadros encaminhados vêm da máquina que foi autenticada no AP.
Modificações no bridge-utils Modifications
Antes disso funcionar, você precisará modificar seu arquivo /etc/network/interfaces, e adicionar essa linha para a sua instância da ponte:
pre-up iwconfig wlan0 essid $YOUR_ESSID bridge_hw $MAC_ADDRESS_OF_YOUR_WIRELESS_CARD
Obviamente substituindo $MAC_ADDRESS_OF_YOUR_WIRELESS_CARD com o endereço MAC da sua placa de rede sem fio, e $YOUR_ESSID com o ESSID da sua rede sem fio. Se você não sabe o seu endereço MAC, você pode descobrir digitando:
# ip link show wlan0
Onde wlan0 é sua interface sem fio. Seu endereço MAC é listado como o HWaddr.
Configurando as regras
Primeiro, instale o ebtables:
# aptitude install ebtables
Agora podemos começar a configurar as regras. A sintaxe do ebtables é quase idêntica a do iptables, então se você tem experiência com o iptables, isto parecerá familiar à você.
A primeira regra que configuraremos é usar o endereço MAC de remetente para o endereço MAC da ponte para todos os quadros enviados pelo ponto de acesso (Access Point - AP).
# ebtables -t nat -A POSTROUTING -o wlan0 -j snat --to-src $MAC_OF_BRIDGE --snat-arp --snat-target ACCEPT
A próxima regra necessitará que você saiba o MAC e o IP de cada máquina atrás da ponte. Substitua $MAC e $IP com esses endereços.
# ebtables -t nat -A PREROUTING -p IPv4 -i wlan0 --ip-dst $IP -j dnat --to-dst $MAC --dnat-target ACCEPT # ebtables -t nat -A PREROUTING -p ARP -i wlan0 --arp-ip-dst $IP -j dnat --to-dst $MAC --dnat-target ACCEPT
É tedioso escrever isto sempre que um novo computador é adicionado em um switch atrás da sua ponte, então escrevi um script para fazer isso para você
1 #!/bin/bash
2 # addcomputer
3 # Will Orr - 2009
4
5 INIF="wlan0"
6
7 function add_ebtables () {
8 COMPIP=$1
9 COMPMAC=$2
10
11 ebtables -t nat -A PREROUTING -i $INIF -p IPv4 --ip-dst $COMPIP -j \
12 dnat --to-dst $COMPMAC --dnat-target ACCEPT
13 ebtables -t nat -A PREROUTING -i $INIF -p ARP --arp-ip-dst $COMPIP \
14 -j dnat --to-dst $COMPMAC --dnat-target ACCEPT
15
16 }
17
18 if [[ $# -ne 2 ]]; then
19 echo "Usage: $0 ip mac"
20 elif [[ $(whoami) != "root" ]]; then
21 echo "Error: must be root"
22 else
23 add_ebtables $1 $2
24 fi
Armazenar suas regras
Depois de ter escrito suas regras do ebtables, você precisa salva-los num arquivo atômico. Doutra forma, suas regras não serão preservadas. Preservá-las é bem simples.
# EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-save
Adicione-as para carregar dessa forma:
# EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-commit
Se deseja carregar suas regras ebtables em tempo de boot, um bom lugar para colocar seus comandos é no /etc/rc.local. Apenas coloque-os lá antes da linha exit 0.
Agregação de Conexão (LACP) com VLANs
Aqui está um exemplo do arquivo /etc/network/interfaces para duas interfaces LACP agrupadas com VLANs
Nota: Testado no Debian Jessie 8.0 rc1 em 03/11/2015 (AMD64 arch)
Necessita dos pacotes debian para vlan e agregação de conexão:
aptitude install vlan ifenslave echo "8021q" >> /etc/modules
O /etc/network/interfaces pode ser:
auto lo iface lo inet loopback # there is one other thing I am forgetting here... see bonding setup above ###### Bonded 10Gig setup - LACP Aggregation ####### bond eth4 and eth5 #### (set up from switch as trunk links with LACP) then split out VLANS ## View status with: cat /proc/net/bonding/bond0 auto bond0 iface bond0 inet manual up ifconfig bond0 0.0.0.0 up slaves eth4 eth5 # bond-mode 4 = 802.3ad bond-mode 4 bond-miimon 100 bond-downdelay 200 bond-updelay 200 bond-lacp-rate 1 bond-xmit-hash-policy layer2+3 auto vlan1023 iface vlan1023 inet static address 18.28.4.123 netmask 255.255.255.0 gateway 18.28.4.1 vlan-raw-device bond0 auto vlan1024 iface vlan1024 inet static address 10.15.160.1 netmask 255.255.255.0 gateway 10.15.160.100 vlan-raw-device bond0
Mais informações
FixMe: página desatualizada.