Traduções: English - Français - Português (Brasil)


Compartilhar/Ligar Conexões de Rede

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:

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:

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.


CategoryNetwork