Capítulo 5. Configuração de rede

Índice

5.1. A infra-estrutura de rede básica
5.1.1. A resolução de nome de máquina
5.1.2. O nome da interface de rede
5.1.3. A gama de endereços de rede para a LAN
5.1.4. O suporte a dispositivos de rede
5.2. A configuração moderna de rede para desktop
5.2.1. Ferramentas GUI de configuração de rede
5.3. A ligação e antiga configuração de rede
5.4. O método de ligação de rede (antigo)
5.4.1. A ligação DHCP com Ethernet
5.4.2. A ligação de IP estático com a Ethernet
5.4.3. A ligação PPP com o pppconfig
5.4.4. A ligação PPP alternativa com o wvdialconf
5.4.5. A ligação PPPoE com o pppoeconf
5.5. A configuração básica de rede com ifupdown (legacy)
5.5.1. A sintaxe simplificada de comando
5.5.2. A sintaxe básica de "/etc/network/interfaces"
5.5.3. A interface de rede loopback
5.5.4. A interface de rede servida por DHCP
5.5.5. A interface de rede com IP estático
5.5.6. O básico da interface de rede sem fios
5.5.7. A interface LAN wireless com WPA/WPA2
5.5.8. A interface LAN wireless com WEP
5.5.9. A ligação PPP
5.5.10. A ligação PPP alternativa
5.5.11. A ligação PPPoE
5.5.12. O estado de configuração de rede do ifupdown
5.5.13. A reconfiguração de rede básica
5.5.14. O pacote ifupdown-extra
5.6. A configuração de rede avançada com ifupdown (antigo)
5.6.1. O pacote ifplugd
5.6.2. O pacote ifmetric
5.6.3. A interface virtual
5.6.4. A sintaxe de comando avançada
5.6.5. A estrofe de mapeamento
5.6.6. A configuração manual da rede comutável
5.6.7. Usando scripts com o sistema ifupdown
5.6.8. Mapeando com guessnet
5.7. A configuração de rede de baixo nível
5.7.1. Comandos iproute2
5.7.2. Operações de rede seguras de baixo nível
5.8. Optimização da rede
5.8.1. Encontrar o MTU óptimo
5.8.2. Definir o MTU
5.8.3. Optimização WAN TCP
5.9. Infraestrutura netfilter
[Dica] Dica

Para um guia geral de rede em GNU/Linux, leia o Guia de Administradores de Rede de Linux.

[Dica] Dica

Apesar deste documento ainda utilizar o antigo ifconfig(8) com IPv4 para os seus exemplos de configuração de rede, Debian está a mudar para ip(8) com IPv4+IPv6 no lançamento wheezy. Patches para este documento são bem-vindos.

Vamos rever a infra-estrutura básica de rede do sistema Debian moderno.

Tabela 5.1. Lista de ferramentas de configuração de rede

pacotes popcon tamanho tipo descrição
ifupdown V:580, I:996 119 config::ifupdown ferramenta standard para activar e desactivar a rede (especifico de Debian)
ifplugd V:3, I:10 352 , , gerir a rede com fios automaticamente
ifupdown-extra V:0, I:2 120 , , script de testes de rede para melhorar o pacote "ifupdown"
ifmetric V:0, I:1 21 , , define métricas de rota para uma interface de rede
guessnet V:0, I:1 532 , , script de mapeamento para melhorar o pacote "ifupdown" via ficheiro "/etc/network/interfaces"
ifscheme V:0, I:0 132 , , scripts de mapeamento para melhorar o pacote "ifupdown"
ifupdown-scripts-zg2 V:0, I:0 147 , , scripts da interface Zugschlus para o método manual do ifupdown
network-manager V:364, I:483 4650 config::NM NetworkManager (daemon): gere a rede automaticamente
network-manager-gnome V:256, I:428 6267 , , NetworkManager (frontend do GNOME)
plasma-widget-networkmanagement V:40, I:66 8067 , , NetworkManager (frontend do KDE)
wicd I:24 16 config::wicd gestor de rede com fios e sem fios (meta-pacote)
wicd-cli V:0, I:3 28 , , gestor de rede com fios e sem fios (cliente de linha de comandos)
wicd-curses V:1, I:6 128 , , gestor de rede com fios e sem fios (cliente Curses)
wicd-daemon V:26, I:30 1103 , , gestor de rede com fios e sem fios (daemon)
wicd-gtk V:20, I:27 387 , , gestor de rede com fios e sem fios (cliente GTK+)
iptables V:238, I:993 1400 config::Netfilter ferramentas administrativas para filtragem de pacotes e NAT (Netfilter)
iproute V:592, I:982 39 config::iproute2 iproute2, IPv6 e outras configurações avançadas de rede: ip(8), tc(8), etc
ifrename V:2, I:3 192 , , renomear interfaces de rede baseado em vários critérios de estatística: ifrename(8)
ethtool V:116, I:208 314 , , mostra ou altera as definições de um dispositivo Ethernet
iputils-ping V:322, I:997 153 test::iproute2 teste de acessibilidade de rede de uma máquina remota pelo nome-de-máquina ou endereço IP (iproute2)
iputils-arping V:3, I:26 76 , , teste de acessibilidade de rede de uma máquina remota especificado pelo endereço ARP
iputils-tracepath V:26, I:290 110 , , rastreia o caminho de rede até uma máquina remota
net-tools V:667, I:998 910 config::net-tools conjunto de ferramentas de rede NET-3 (net-tools, configuração de rede IPv4): ifconfig(8) etc.
inetutils-ping V:0, I:1 338 test::net-tools teste de acessibilidade de rede de uma máquina remota pelo nome-de-máquina ou endereço IP (legacy, GNU)
arping V:3, I:29 46 , , teste de acessibilidade de rede de uma máquina remota especificado pelo endereço ARP (legacy)
traceroute V:96, I:994 176 , , rastreia o caminho de rede até uma máquina remota (legacy, consola)
isc-dhcp-client V:495, I:893 1765 config::low-level Cliente DHCP
wpasupplicant V:388, I:539 1364 , , suporte de cliente para WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:5 790 , , Cliente GUI Qt para o wpa_supplicant
wireless-tools V:81, I:271 325 , , ferramentas para manipular Extensões Wireless do Linux
ppp V:59, I:537 746 , , ligação PPP/PPPoE com chat
pppoeconf V:1, I:20 340 config::helper ajudante de configuração para ligação PPPoE
pppconfig V:0, I:9 990 , , ajudante de configuração para ligação PPP com chat
wvdial V:2, I:13 276 , , ajudante de configuração para ligação PPP com wvdial e ppp
mtr-tiny V:10, I:84 123 test::low-level rastreia o caminho de rede até uma máquina remota (curses)
mtr V:6, I:34 167 , , rastreia o caminho de rede até uma máquina remota (curses e GTK+)
gnome-nettool V:27, I:370 2752 , , ferramentas para operações comuns de informação de rede (GNOME)
nmap V:62, I:465 17329 , , mapeamento de rede / sondagem de portos (Nmap, consola)
zenmap V:2, I:13 2651 , , mapeamento de rede / sondagem de portos (GTK+)
tcpdump V:27, I:200 1037 , , analisador de tráfego de rede (Tcpdump, consola)
wireshark V:11, I:76 2569 , , analisador de tráfego de rede (Wireshark, GTK+)
tshark V:3, I:32 338 , , analisador de tráfego de rede (consola)
nagios3 V:2, I:14 29 , , sistema de monitorização e gestão para máquinas, serviços e redes (Nagios)
tcptrace V:0, I:2 389 , , produz um sumário das ligações a partir da saída do tcpdump
snort V:2, I:3 1707 , , sistema flexível de detecção de intrusos na rede (Snort)
ntop V:5, I:11 1549 , , mostra a utilização da rede num navegador web
dnsutils V:116, I:930 333 , , clientes de rede disponibilizados com BIND: nslookup(8), nsupdate(8), dig(8)
dlint V:2, I:58 96 , , verifica informação de zona DNS usando pesquisas do servidor de nomes
dnstracer V:0, I:3 81 , , rastreia uma cadeia de servidores DNS até à fonte

A resolução de nome de máquina também é suportada actualmente pelo mecanismo NSS (Name Service Switch). O fluxo desta resolução é o seguinte.

  1. O ficheiro "/etc/nsswitch.conf" com "hosts: files dns" dicta a ordem de resolução do nome de máquina. (Isto substitui a funcionalidade antiga de "order" em "/etc/host.conf".)

  2. O método files é invocado primeiro. Se o nome de máquina for encontrado no ficheiro "/etc/hosts", devolve um endereço válido e termina. (O ficheiro "/etc/host.conf" contém "multi on".)

  3. O método dns é invocado. Se o nome de máquina é encontrado pela consulta ao Internet Domain Name System (DNS) identificado pelo ficheiro "/etc/resolv.conf", devolve um endereço válido para ele e termina.

Por exemplo, "/etc/hosts" parece-se com o seguinte.

127.0.0.1 localhost
127.0.1.1 <host_name>

# As linhas seguintes são desejáveis para máquinas capazes de IPv6
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Cada linha começa por um endereço IP e é seguida pelo hostname associado.

O endereço IP 127.0.1.1 na segunda linha deste exemplo pode não ser encontrada nalguns outros sistemas tipo-Unix. O Instalador Debian cria esta entrada para um sistema sem um endereço IP permanente como contenção para algum software (p.e., GNOME) conforme é documentado no bug #719621.

O <host_name> coincide com o nome da máquina definido em "/etc/hostname".

Para um sistema com um endereço IP permanente, esse endereço IP permanente deve ser utilizado aqui em vez do 127.0.1.1.

Para um sistema com um endereço IP permanente e um nome de domínio totalmente qualificado (FQDN) disponibilizado pelo Sistema de Nomes de Domínio (DNS), o <nome_máquina> e <nome_domínio> canónicos devem ser utilizados em vez de apenas <nome_máquina>.

O "/etc/resolv.conf" é um ficheiro estático se o pacote resolvconf não estiver instalado. Se instalado, é um link simbólico. De qualquer modo, contém informação que inicializa as rotinas de resolução de nomes. Se o DNS existir no IP="192.168.11.1", contém o seguinte.

nameserver 192.168.11.1

O pacote resolvconf torna este "/etc/resolv.conf" num link simbólico e gere o seu conteúdo automaticamente pelos scripts hook.

Para o PC estação de trabalho do ambiente LAN adhoc típico, o nome de máquina pode ser resolvido via Multicast DNS (mDNS, Zeroconf) adicionalmente aos métodos filese dns básicos.

  • Avahi disponibiliza uma infraestrutura para Multicast DNS Service Discovery em Debian.

  • É o equivalente de Apple Bonjour / Apple Rendezvous.

  • O pacote de plugin libnss-mdns disponibiliza resolução de nomes de máquinas via mDNS para a funcionalidade Name Service Switch (NSS) do GNU da Biblioteca C do GNU (glibc).

  • O ficheiro "/etc/nsswitch.conf" deve ter uma estrofe como "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4".

  • Os nomes de máquinas com o domínio de pseudo nível de topo (TLD) ".local" estão resolvidos.

  • O endereço multicast link-local mDNS IPv4 "224.0.0.251" ou o seu equivalente em IPv6 "FF02::FB" são usados para fazer pesquisas DNS para nomes que terminem com ".local".

A resolução de nome de máquina através do depreciado NETBios sobre TCP/IP utilizada em antigos sistemas Windows pode ser disponibilizada ao instalar o pacote winbind. O ficheiro "/etc/nsswitch.conf" deverá ter um bloco como "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins" para activar esta funcionalidade. (Os sistemas modernos de Windows normalmente utilizam o método dns para a resolução dos nomes de máquinas.)

O nome da interface de rede, p.e. eth0, é atribuído a cada hardware no kernel Linux conforme é encontrado, através do mecanismo de configuração do espaço de utilizador, udev (veja Secção 3.3, “O sistema udev”). O nome da interface de rede é referido como interface física em ifup(8) e interfaces(5).

De modo a assegurar que cada interface de rede seja chamado de modo persistente em cada arranque do sistema utilizando o MAC address e etc., existe um ficheiro de regras "/etc/udev/rules.d/70-persistent-net.rules". Este ficheiro é gerado automaticamente pelo programa "/lib/udev/write_net_rules", provavelmente executado pelo ficheiro de regras persistent-net-generator.rules". Você pode modificá-lo para alterar as regras de nomeação.

[Cuidado] Cuidado

Quando editar o ficheiro de regras "/etc/udev/rules.d/70-persistent-net.rules", você tem de manter cada regra numa única linha e o MAC address em minúsculas. Por exemplo, se você encontrar "FireWire device" e "PCI device" neste ficheiro, provavelmente vai querer nomear o "PCI device" como eth0 e configura-lo como a interface de rede principal.

Debian squeeze e mais recentes podem gerir a ligação de rede através de software daemon de gestão como o NetworkManager (NM) (network-manager e pacotes associados) ou Wicd (wicd e pacotes associados).

  • Vêm com as suas próprias GUIs e programas de linha de comandos como as suas interfaces de utilizador.

  • Vêm com os seus próprios daemons como os seus sistemas de backend.

  • Permitem ligação fácil do seu sistema à Internet.

  • Permitem gestão fácil de configuração de redes com e sem fios.

  • Permitem-nos configurar a rede independentemente do pacote legacy ifupdown.

[Nota] Nota

Não utilize estas ferramentas de configuração de rede automáticas em servidores. Estas são destinadas principalmente para os utilizadores móveis em portáteis.

Estas ferramentas modernas de configuração de rede necessitam ser correctamente configuradas para evitar entrarem em conflito com o pacote legacy ifupdown e o seu ficheiro de configuração "/etc/network/interfaces".

[Nota] Nota

Algumas funcionalidades destas ferramentas automáticas de configuração de rede podem sofrer regressões. Não são tão robustas como o pacote legacy ifupdown. Consulte BTS do network-manager e BTS do wicd para os problemas e limitações actuais.

Documentação oficial para NM e Wicd em Debian são disponibilizadas em "/usr/share/doc/network-manager/README.Debian" e "/usr/share/doc/wicd/README.Debian", respectivamente.

Essencialmente, a configuração de rede para desktop é feita como se segue.

  1. Tornar o utilizador de ambiente de trabalho, p.e. foo, pertencente ao grupo "netdev" com o seguinte (Em alternativa, em ambientes de trabalho modernos como o GNOME e o KDE, faça-o automaticamente através de D-bus).

    $ sudo adduser foo netdev
  2. Mantenha a configuração de "/etc/network/interfaces" tão simples como o seguinte.

    auto lo
    iface lo inet loopback
  3. Reiniciar NM ou Wicd com o seguinte.

    $ sudo /etc/init.d/network-manager restart
    $ sudo /etc/init.d/wicd restart
  4. Configure a sua rede através da GUI.

[Nota] Nota

Apenas as interfaces que não estão listadas em "/etc/network/interfaces" são geridas pelo NM ou Wicd para evitar conflitos com o ifupdown.

[Dica] Dica

Se desejar estender as capacidades de configuração de rede do NM, por favor procure módulos plug-in apropriados e pacotes suplementares como os network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc. O mesmo vale para o Wicd.

[Cuidado] Cuidado

Estas ferramentas automáticas de configuração de rede podem não ser compatíveis com as configurações esotéricas do legado ifupdown em "/etc/network/interfaces" como aquelas em Secção 5.5, “A configuração básica de rede com ifupdown (legacy)” e Secção 5.6, “A configuração de rede avançada com ifupdown (antigo)”. Consulte BTS do network-manager e BTS do wicd para os problemas e limitações actuais.

Quando o método descrito em Secção 5.2, “A configuração moderna de rede para desktop” não satisfizer as suas necessidades, deve utilizar a ligação de rede e método antigo de configuração que combina muitas ferramentas mais simples.

A antiga ligação de rede é específica para cada método (veja Secção 5.4, “O método de ligação de rede (antigo)”).

Existem 2 tipos de programas para a configuração de rede de baixo nível em Linux (veja Secção 5.7.1, “Comandos iproute2”).

  • Os programas antigos net-tools (ifconfig(8), …) são do sistema de rede Linux NET-3. A maioria estão agora obsoletos.

  • Os novos programs Linux iproute2 (ip(8), …) são o sistema de rede actual do Linux.

Apesar destes programas de rede de baixo nível serem poderosos, não são tão práticos de utilizar. Por isso foram criados sistema de configuração de rede de alto nível.

O pacote ifupdown é o standard de facto para tais sistemas de configuração de rede de alto nível em Debian. Permite-lhe activar a rede simplesmente ao fazer, p. e., "ifup eth0". O seu ficheiro de configuração é o ficheiro "/etc/network/interfaces" e o seu conteúdo típico é o seguinte:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

O pacote resolvconf foi criado como suplemento ao sistema ifupdown para suportar uma fácil configuração da resolução de endereços de rede ao automatizar a rescrita do ficheiro de configuração do resolvedor "/etc/resolv.conf". Agora, a maioria dos pacotes de configuração de rede em Debian estão modificados para utilizar o pacote resolvconf (veja "/usr/share/doc/resolvconf/README.Debian").

Scripts de ajuda do pacote ifupdown tais como ifplugd, guessnet, ifscheme, etc. são criados para automatizar a configuração dinâmica do ambiente de rede para os PCs móveis assim como numa rede com fios. Estes são relativamente difíceis de usar mas funcionam bem com o sistema ifupdown existente.

Estes estão explicados em detalhe com exemplos (veja Secção 5.5, “A configuração básica de rede com ifupdown (legacy)” e Secção 5.6, “A configuração de rede avançada com ifupdown (antigo)”).

[Cuidado] Cuidado

O método de teste de ligação descrito nesta secção destina-se a propósitos de teste. Não se destina a ser utilizado directamente para as ligações do dia-a-dia de rede. Você é avisado para utilizá-lo via NM, Wicd, ou do pacote ifupdown (veja Secção 5.2, “A configuração moderna de rede para desktop” e Secção 5.5, “A configuração básica de rede com ifupdown (legacy)”).

O método de ligação de rede típico e caminho de ligação para um PC pode ser resumido ao seguinte:


Aqui está um sumário dos scripts de configuração para cada método de ligação.


A ligação de rede anónima significa o seguinte.


[Nota] Nota

Os serviços de ligação WAN via TV por cabo são normalmente servidos por DHCP ou PPPoE. Os de ADSL e FTTP são geralmente servidos por PPPoE. Você tem de consultar o seu ISP para os requisitos de configuração exactos para a ligação WAN.

[Nota] Nota

Quando é utilizado um router de banda larga para criar um ambiente LAN caseiro, os PCs na LAN são ligados à WAN através do router com tradução de endereços de rede (NAT). Para tais casos, as interfaces de rede dos PCs na LAN são servidas por DHCP ou IP estático a partir do router. O router tem de ser configurado para ligar à WAN seguindo as instruções do seu ISP.

O script de configuração pppconfig configura a ligação PPP interactivamente ao seleccionar o seguinte.

  • O número de telefone

  • O nome de utilizador do ISP

  • A palavra-passe do ISP

  • A velocidade da porta

  • A porta de comunicação do modem

  • O método de autenticação

Tabela 5.6. Lista de ficheiros de configuração para a ligação PPP com pppconfig

ficheiro função
/etc/ppp/peers/<nome_do_isp> O ficheiro de configuração gerado pelo pppconfig para um pppd específico para <nome_de_isp>
/etc/chatscripts/<nome_do_isp> O ficheiro de configuração gerado pelo pppconfig para chat especifico com <nome_de_isp>
/etc/ppp/options O parâmetro de execução geral para o pppd
/etc/ppp/pap-secret Dados de autenticação para PAP (risco de segurança)
/etc/ppp/chap-secret Dados de autenticação para CHAP (mais seguro)

[Cuidado] Cuidado

O valor "<nome_do_isp>" do "provedor" é assumido se os comandos pon e poff forem invocados sem argumentos.

Você pode testar a configuração usando ferramentas de configuração de baixo nível como as seguintes.

$ sudo pon <nome_do_isp>
...
$ sudo poff <nome_do_isp>

Veja "/usr/share/doc/ppp/README.Debian.gz".

A configuração tradicional de rede TCP/IP no sistema Debian utiliza o pacote ifupdown como uma ferramenta de alto nível. Existem 2 casos típicos:

Estes métodos de configuração tradicionais são muito úteis se desejar definir configurações avançadas; encontre detalhes no seguinte.

O pacote ifupdown disponibiliza uma estrutura standard para a configuração de rede de alto nível no sistema Debian. Nesta secção, aprendemos a configuração básica de rede com o ifupdown com uma introdução simplificada e muitos exemplos típicos.

Após preparar o sistema com Secção 5.4.1, “A ligação DHCP com Ethernet”, a interface de rede servida por DHCP é configurada ao criar a entrada de configuração no ficheiro "/etc/network/interfaces" como o seguinte:

allow-hotplug eth0
iface eth0 inet dhcp

Quando o kernel Linux detecta a interface física eth0, a estrofe allow-hotplug faz com que ifup active a interface e a estrofe iface faz com que ifup utilize DHCP para configurar a interface.

A LAN sem fios (WLAN resumindo) disponibiliza a ligação sem fios mais rápida através da difusão espectral de bandas de rádio não licenciadas baseada no conjunto de standards chamado IEEE 802.11.

As interfaces de WLAN são quase iguais às interfaces Ethernet normais mas necessitam que lhes seja disponibilizado um ID de rede e dados de chave de encriptação quando são inicializadas. As suas ferramentas de rede de alto nível são exactamente as mesmas das interfaces Ethernet com a excepção que os nomes das interfaces são um pouco diferentes como eth1, wlan0, ath0, wifi0, … dependendo das drivers de kernel usadas.

[Dica] Dica

O dispositivo wmaster0 é o dispositivo mestre o qual é um dispositivo interno usado apenas por SoftMAC com a nova API mac80211 do Linux.

Aqui estão algumas palavras chave para lembrar para a WLAN.


A escolha actual do protocolo é normalmente limitada pelo router wireless que você possui.

Tem de instalar o pacote wpasupplicant para suportar a WLAN com o novo WPA/WPA2.

No caso de IP servido por DHCP em ligação WLAN, a entrada no ficheiro "/etc/network/interfaces" deverá ser conforme a seguinte:

allow-hotplug ath0
iface ath0 inet dhcp
 wpa-ssid homezone
 # hexadecimal psk is encoded from a plaintext passphrase
 wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Veja "/usr/share/doc/wpasupplicant/README.modes.gz".

Tem de instalar o pacote wireless-tools para suportar a WLAN com o antigo WEP. (O seu router pode ainda usar esta infraestrutura insegura, mas é melhor do que nada.)

[Cuidado] Cuidado

Por favor note o seu tráfego de rede em WLAN com WEP pode ser interceptado por outros.

No caso de IP servido por DHCP em ligação WLAN, a entrada no ficheiro "/etc/network/interfaces" deverá ser conforme a seguinte:

allow-hotplug eth0
iface eth0 inet dhcp
 wireless-essid Home
 wireless-key1 0123-4567-89ab-cdef
 wireless-key2 12345678
 wireless-key3 s:password
 wireless-defaultkey 2
 wireless-keymode open

Veja "/usr/share/doc/wireless-tools/README.Debian".

Tem de configurar a ligação PPP primeiro como descrito antes (veja Secção 5.4.3, “A ligação PPP com o pppconfig”). Depois, adicione a entrada no ficheiro "/etc/network/interfaces" para o dispositivo PPP principal ppp0 como se segue.

iface ppp0 inet ppp
 provider <nome_do_isp>

Necessita primeiro de configurar a ligação PPP alternativa com o wvdial como descrito antes (veja Secção 5.4.4, “A ligação PPP alternativa com o wvdialconf”). Depois, adicione a entrada no ficheiro "/etc/network/interfaces" para o dispositivo PPP principal ppp0 como se segue.

iface ppp0 inet wvdial

Para um PC ligado directamente à WAN servido por PPPoE, você precisa de configurar o sistema com a ligação PPPoE como descrito antes (veja Secção 5.4.5, “A ligação PPPoE com o pppoeconf”). Depois, adicione a entrada no ficheiro "/etc/network/interfaces" para o dispositivo PPPoE principal eth0 como se segue.

allow-hotplug eth0
iface eth0 inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down
# O seguinte é usado apenas internamente
iface dsl inet ppp
 provider dsl-provider

A funcionalidade do pacote ifupdown pode ser melhorada para além do que foi descrito em Secção 5.5, “A configuração básica de rede com ifupdown (legacy)” com conhecimentos avançados.

As funcionalidades descritas aqui são completamente opcionais. Estou a ser preguiçoso e minimalista, raramente me incomodo a utilizar isto.

[Cuidado] Cuidado

Se não conseguir configurar a ligação de rede com a informação de Secção 5.5, “A configuração básica de rede com ifupdown (legacy)”, irá agravar a situação ao utilizar a informação em baixo.

O pacote ifplugd é uma antiga ferramenta de configuração automática de rede que apenas pode gerir ligações Ethernet. Isto resolve situações de ligar/desligar cabos Ethernet para portáteis e etc. Se tiver o NetworkManager ou o Wicd (veja Secção 5.2, “A configuração moderna de rede para desktop”) instalado, não precisa deste pacote.

Este pacote corre um daemon e substitui as funcionalidades auto ou allow-hotplug (veja Tabela 5.10, “Lista de estrofes em "/etc/network/interfaces"”) e inicia as interfaces após a sua ligação à rede.

Aqui está como utilizar o pacote ifplugd para a porta Ethernet interna, ex. eth0.

  1. Remova a estrofe em "/etc/network/interfaces": "auto eth0" ou "allow-hotplug eth0".

  2. Mantenha a estrofe em "/etc/network/interfaces": "iface eth0 inet …" e "mapping …".

  3. instale o pacote ifplugd.

  4. Corra "sudo dpkg-reconfigure ifplugd".

  5. Coloque eth0 como a "interface estática para ser correspondida pelo ifplugd".

Agora, a configuração de rede funciona como deseja.

  • Após o ligar da máquina ou após a descoberta do hardware, a interface não é activada por si própria.

  • Após encontrar o cabo Ethernet, a interface é activada.

  • Após algum tempo depois de desligar o cabo Ethernet, a interface é desactivada automaticamente.

  • Após ligar outro cabo Ethernet, a interface é activada sob o novo ambiente de rede.

[Dica] Dica

Os argumentos para o comando ifplugd(8) podem definir o seu comportamento tal como o atraso para reconfigurar interfaces.

O pacote ifupdown oferece configuração de rede avançada utilizando o nome de configuração de rede e o nome de interface de rede. Eu utilizo uma terminologia ligeiramente diferente da usada em ifup(8) e interfaces(5).


Os comandos de configuração de rede básicos em Secção 5.5.1, “A sintaxe simplificada de comando ” necessitam que o testemunho de nome da configuração de rede da estrofe iface corresponda ao nome da interface de rede em "/etc/network/interfaces".

Os comandos de configuração de rede avançados activam a separação do nome da configuração de rede e o nome da interface de rede em "/etc/network/interfaces" como se segue.


Nós saltamos a explicação da estrofe mapping no "/etc/network/interfaces" em Secção 5.5.2, “A sintaxe básica de "/etc/network/interfaces"” para evitar complicações. Esta estrofe tem a seguinte sintaxe:

mapping <glob_de_nome_de_interface>
 script <nome_de_script>
 map <script_de_entrada1>
 map <script_de_entrada2>
 map ...

Isto disponibiliza funcionalidades avançadas ao ficheiro "/etc/network/interfaces" ao automatizar a escolha da configuração com o script de mapeamento especificado por <nome_do_script>.

Vamos seguir a execução do seguinte.

$ sudo ifup eth0

Quando o "<glob_de_nome_de_interface>" corresponde a "eth0", esta execução leva à execução do seguinte comando para configurar automaticamente eth0.

$ sudo ifup eth0=$(echo -e '<script_entrada1> \n <script_entrada2> \n ...' | <nome_do_script> eth0)

Aqui, as linhas de entrada do script com "map" são opcionais e podem ser repetidas.

[Nota] Nota

O glob para a estrofe mapping funciona como o glob de nome de ficheiro em shell (veja Secção 1.5.6, “Glob da shell”).

Aqui está como mudar manualmente entre várias configurações de rede sem reescrever o ficheiro "/etc/network/interfaces" como em Secção 5.5.13, “A reconfiguração de rede básica”.

Para todas as configurações de rede que necessite aceder, crie uma estrofe separada no ficheiro "/etc/network/interfaces" conforme o seguinte:

auto lo
iface lo inet loopback

iface config1 inet dhcp

iface config2 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 dns-domain example.com
 dns-nameservers 192.168.11.1

iface pppoe inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down

# O seguinte é usado apenas internamente
iface dsl inet ppp
 provider dsl-provider

iface pots inet ppp
 provider provider

Por favor note que o nome de configuração de rede o qual é o testemunho após iface não usa o testemunho para o nome da interface de rede. Também, não existe nenhuma estrofe auto nem estrofe allow-hotplug para iniciar a interface de rede eth0 automaticamente após eventos.

Agora está pronto para comutar a configuração de rede.

Vamos levar o seu PC para uma LAN servida por DHCP. Você activa a interface de rede (a interface física) eth0 ao atribuir-lhe o nome de configuração de rede (o nome lógico da interface) config1 com o seguinte.

$ sudo ifup eth0=config1
Password:
...

A interface eth0 está activa, configurada por DHCP e ligada a LAN.

$ sudo ifdown eth0=config1
...

A interface eth0 está inactiva e desligada da LAN.

Vamos levar o seu PC para uma LAN servida por IP estático. Você activa a interface de rede eth0 ao atribuir-lhe o nome de configuração de rede config2 para ela com o seguinte.

$ sudo ifup eth0=config2
...

A interface eth0 está activa, configurada com IP estático e ligada à LAN. Os parâmetros adicionais dados como dns-* configuram o conteúdo de "/etc/resolv.conf". Este "/etc/resolv.conf" é melhor is better gerido se o pacote resolvconf estiver instalado.

$ sudo ifdown eth0=config2
...

A interface eth0 está inactiva e desligada da LAN, outra vez.

Vamos levar o seu PC para uma porta em modem-BB ligado ao serviço servido de PPPoE. Você activa a interface de rede eth0 ao atribuir o nome de configuração de rede pppoe a ela com o seguinte.

$ sudo ifup eth0=pppoe
...

A interface eth0 está activa, configurada com ligação PPPoE directamente ao ISP.

$ sudo ifdown eth0=pppoe
...

A interface eth0 está inactiva e desligada, outra vez.

Vamos levar o seu PC para uma localização sem LAN ou modem BB mas com POTS e modem. Você activa a interface de rede ppp0 ao atribuir o nome de configuração de rede pots a ela com o seguinte.

$ sudo ifup ppp0=pots
...

A interface ppp0 está activa e ligada à Internet com PPP.

$ sudo ifdown ppp0=pots
...

A interface ppp0 está inactiva e desligada da Internet.

Você deve verificar o ficheiro "/etc/network/run/ifstate" para o estado actual da configuração de rede do sistema ifupdown.

[Atenção] Atenção

Talvez necessite ajustar os números no final de eth*, ppp*, etc. se possuir várias interfaces de rede.

O sistema ifupdown corre automaticamente scripts instalados em "/etc/network/*/" enquanto exporta variáveis de ambiente para os scripts.


Aqui, cada variável de ambiente, "$IF_<OPTION>", é criada a partir do nome da opção correspondente tal como <opção1> e <opção2> ao preceder com "$IF_", convertendo para maiúsculas, substituindo hífenes por underscores, e descartando os caracteres não-alfanuméricos.

[Dica] Dica

Veja Secção 5.5.2, “A sintaxe básica de "/etc/network/interfaces"” para <família_de_endereços>, <nome_de_método>, <opção1> e <opção2>

O pacote ifupdown-extra (veja Secção 5.5.14, “O pacote ifupdown-extra”) utiliza estas variáveis de ambiente para estender a funcionalidade do pacote ifupdown. O pacote ifmetric (veja Secção 5.6.2, “O pacote ifmetric”) instala o script "/etc/network/if-up.d/ifmetric" o qual define a métrica via variável "$IF_METRIC". O pacote guessnet (veja Secção 5.6.8, “Mapeando com guessnet”), que disponibiliza um estrutura simples e poderosa para a selecção automática da configuração de rede através do mecanismo de mapeamento, também as utiliza.

[Nota] Nota

Para exemplos mais específicos de scripts personalizados de configuração de rede que utilizam estas variáveis de ambiente, você deve consultar os scripts de exemplo em "/usr/share/doc/ifupdown/examples/*" e os scripts utilizados nos pacotes ifscheme e ifupdown-scripts-zg2. Estes scripts adicionais têm algumas sobreposições de funcionalidades com os pacotes básicos ifupdown-extra e guessnet. Se você instalar estes scripts adicionais, deve personalizar estes scripts para evitar interferências.

Em vez de escolher manualmente a configuração conforme descrito em Secção 5.6.6, “A configuração manual da rede comutável”, pode utilizar o mecanismo de mapeamento descrito em Secção 5.6.5, “A estrofe de mapeamento” para seleccionar automaticamente a configuração de rede com scripts personalizados.

O comando guessnet-ifupdown(8) disponibilizado pelo pacote guessnet foi desenhado para ser usado como um script de mapeamento e disponibiliza uma estrutura poderosa para melhorar o sistema ifupdown.

  • Liste as condições de teste como o valor para as opções do guessnet para cada configuração de rede sob a estrofe iface.

  • O mapeamento escolhe a iface com o primeiro resultado não-ERRO como a configuração de rede.

Esta utilização dupla do ficheiro "/etc/network/interfaces" pelo script de mapeamento, guessnet-ifupdown, e a infraestrutura original de configuração de rede, ifupdown, não causa impactos negativos porque as opções do guessnet apenas exportam variáveis de ambiente extras para scripts executados pelo sistema ifupdown. Veja detalhes em guessnet-ifupdown(8).

[Nota] Nota

Quando são necessárias múltiplas linhas de opção guessnet em "/etc/network/interfaces", use linhas de opção começadas com guessnet1, guessnet2, e assim em diante, porque o pacote ifupdown não permite que as strings de inicio das linhas de opção sejam repetidas.

Você pode usar comandos de rede de baixo nível como se segue em segurança pois eles não mudam a configuração de rede.


[Dica] Dica

Algumas destas ferramentas de configuração de baixo nível residem em "/sbin/". Pode necessitar de escrever o caminho do comando completo tal como "/sbin/ifconfig" ou adicionar "/sbin" à lista "$PATH" no seu "~/.bashrc".

A optimização de rede genérica está para além do objectivo desta documentação. Eu apenas toco em assuntos pertinentes às ligações de grau de consumidor.


O valor Maximum Transmission Unit (MTU) pode ser determinado experimentalmente com ping(8) com a opção "-M do" a qual envia pacotes ICMP com tamanho de dados inicial de 1500 (com offset de 28 bytes para o cabeçalho IP+ICMP) e encontra o tamanho maior sem fragmentação IP.

Por exemplo, tente o seguinte:

$ ping -c 1 -s $((1500-28)) -M do www.debian.org
PING www.debian.org (194.109.137.218) 1472(1500) bytes of data.
From 192.168.11.2 icmp_seq=1 Frag needed and DF set (mtu = 1454)

--- www.debian.org ping statistics ---
0 packets transmitted, 0 received, +1 errors

Tente 1454 em vez de 1500

Observe ping(8) com sucesso com 1454.

Este processo é a descoberta do Caminho MTU (PMTU) (RFC1191) e o comando tracepath(8) pode automatizar isto.

[Dica] Dica

O exemplo acima com valor PMTU de 1454 é para o meu provedor FTTP anterior o qual utilizava Modo de Transferência Assíncrona (ATM) com a coluna vertebral da sua rede e servia os seus clientes com PPPoE. O valor de PMTU real depende do seu ambiente, p.e. 1500 para o meu novo provedor FTTP.


Adicionalmente a estas regras básicas, você deve saber o seguinte:

  • Qualquer utilização de métodos de túnel (VPN etc.) pode reduzir o MTU óptimo pelo excesso que adicionam.

  • O valor MTU não deve exceder o valor PMTU determinado experimentalmente.

  • O maior valor MTU é geralmente melhor quando são conhecidas outras limitações.

Aqui estão exemplos para definir o valor MTU desde a sua predefinição 1500 até 1454.

Para o DHCP (veja Secção 5.5.4, “A interface de rede servida por DHCP”), você pode substituir as linhas de estrofe iface pertinentes em "/etc/network/interfaces" com o seguinte.

iface eth0 inet dhcp
 pre-up /sbin/ifconfig $IFACE mtu 1454

Para IP estático (veja Secção 5.5.5, “A interface de rede com IP estático”), você pode substituir as linhas pertinentes de iface em "/etc/network/interfaces" com o seguinte.

iface eth0 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 mtu 1454
 dns-domain exemplo.com
 dns-nameservers 192.168.11.1

Para o PPPoE directo (veja Secção 5.4.5, “A ligação PPPoE com o pppoeconf”), você pode substituir a linha "mtu" pertinente no "/etc/ppp/peers/dsl-provider" com o seguinte.

mtu 1454

O tamanho de segmento máximo (MSS) é usado como uma alternativa ao tamanho do pacote. As relações entre MSS e MTU são as seguintes.

  • MSS = MTU - 40 para IPv4

  • MSS = MTU - 60 para IPv6

[Nota] Nota

A optimização baseada no iptables(8) (veja Secção 5.9, “Infraestrutura netfilter”) pode apertar o tamanho do pacote pelo MSS e é útil para o router. Veja "TCPMSS" em iptables(8).

Netfilter disponibiliza uma infra-estrutura para firewall de estado e tradução de endereços de rede (NAT) com módulos do kernel Linux (veja Secção 3.3.1, “A inicialização de módulos do kernel”).


O principal programa de utilizador para o netfilter é o iptables(8). Pode configurar manualmente e interactivamente o netfilter a partir da shell, salvar o seu estado com iptables-save(8), e restaurá-lo via script init com iptables-restore(8) após o reiniciar do sistema.

Scripts de ajuda de configuração como o shorewall facilitam este processo.

Veja documentação em http://www.netfilter.org/documentation/ (ou em "/usr/share/doc/iptables/html/").

[Dica] Dica

Apesar destes terem sido escritos para o Linux 2.4, ambos comando iptables(8) e função de kernel netfilter aplicam-se às séries 2.6 e 3.x do kernel Linux.