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 aparelhos 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 moderna configuração de rede sem GUI
5.4. A configuração de rede de baixo nível
5.4.1. Comandos iproute2
5.4.2. Operações de rede seguras de baixo nível
5.5. Optimização da rede
5.5.1. Encontrar o MTU óptimo
5.5.2. Optimização WAN TCP
5.6. Infraestrutura netfilter
[Dica] Dica

Para um guia moderno específico Debian sobre rede, veja O Livro de Mão do Administrador Debian — Configurar a Rede.

[Dica] Dica

Sob systemd, pode ser usado o networkd para gerir as redes. Veja systemd-networkd(8).

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
network-manager V:360, I:426 15210 config::NM NetworkManager (daemon): gere a rede automaticamente
network-manager-gnome V:124, I:357 5351 config::NM NetworkManager (frontend do GNOME)
ifupdown V:612, I:989 217 config::ifupdown ferramenta standard para ativar e desativar a rede (especifico de Debian)
isc-dhcp-client V:222, I:980 686 config::low-level Cliente DHCP
pppoeconf V:0, I:8 192 config::helper ajudante de configuração para ligação PPPoE
wpasupplicant V:335, I:491 3439 , , suporte de cliente para WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:2 780 , , Cliente GUI Qt para o wpa_supplicant
wireless-tools V:180, I:239 297 , , ferramentas para manipular Extensões Wireless do Linux
iw V:320, I:467 293 , , tool for configuring Linux wireless devices
iproute2 V:695, I:937 2867 config::iproute2 iproute2, IPv6 e outras configurações avançadas de rede: ip(8), tc(8), etc
iptables V:314, I:990 2521 config::Netfilter ferramentas administrativas para filtragem de pacotes e NAT (Netfilter)
iputils-ping V:224, I:997 113 test teste de acessibilidade de rede de uma máquina remota pelo nome-de-máquina ou endereço IP (iproute2)
iputils-arping V:7, I:98 55 test teste de acessibilidade de rede de uma máquina remota especificado pelo endereço ARP
iputils-tracepath V:4, I:53 72 test rastreia o caminho de rede até uma máquina remota
ethtool V:103, I:266 597 test mostra ou altera as definições de um aparelho Ethernet
mtr-tiny V:6, I:55 161 test::low-level rastreia o caminho de rede até uma máquina remota (curses)
mtr V:4, I:46 214 , , rastreia o caminho de rede até uma máquina remota (curses e GTK)
gnome-nettool V:1, I:38 2105 , , ferramentas para operações comuns de informação de rede (GNOME)
nmap V:27, I:246 4509 , , mapeamento de rede / sondagem de portos (Nmap, consola)
zenmap V:1, I:8 2939 , , mapeamento de rede / sondagem de portos (GTK)
tcpdump V:19, I:208 1329 , , analisador de tráfego de rede (Tcpdump, consola)
wireshark I:54 65 , , analisador de tráfego de rede (Wireshark, GTK)
tshark V:3, I:33 408 , , analisador de tráfego de rede (consola)
tcptrace V:0, I:3 401 , , produz um sumário das ligações a partir da saída do tcpdump
snort V:0, I:1 2206 , , sistema flexível de detecção de intrusos na rede (Snort)
ntopng V:1, I:2 969 , , mostra a utilização da rede num navegador web
dnsutils V:59, I:490 261 , , clientes de rede disponibilizados com BIND: nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:6 53 , , verifica informação de zona DNS a usar pesquisas do servidor de nomes
dnstracer V:0, I:1 61 , , rastreia uma cadeia de servidores DNS até à fonte

A resolução de nome de máquina também é suportada atualmente 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-le um endereço válido e termina.

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

127.0.0.1 localhost
127.0.1.1 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

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, é uma ligação simbólica. 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 faz deste "/etc/resolv.conf" uma ligação simbólica e gere o conteúdo dele 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 equivalente dele 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 ativar esta funcionalidade. (Os sistemas modernos de Windows normalmente utilizam o método dns para a resolução dos nomes de máquinas.)

[Nota] Nota

A expansão Top-Level Domains genéricos (gTLD) no Domain Name System está em desenvolvimento. Tenha cuidado com a colisão de nomes quando escolher um nome de domínio usado apenas dentro da LAN.

As interfaces de rede são tipicamente iniciadas em "networking.service" para a interface lo e "NetworkManager.service" para as outras interfaces em sistemas Debian modernos sob systemd.

Debian can manage the network connection via management daemon software such as NetworkManager (NM) (network-manager and associated packages).

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

  • Vêm com os daemons próprios como os backends deles.

  • Permitem uma 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 ficheiro de configuração dele "/etc/network/interfaces".

Official documentations for NM on Debian are provided in "/usr/share/doc/network-manager/README.Debian".

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

  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. Restart NM by the following.

    $ sudo systemctl restart network-manager
  4. Configure a sua rede através da GUI.

[Nota] Nota

Only interfaces which are not listed in "/etc/network/interfaces" are managed by NM to avoid conflict with ifupdown.

[Dica] Dica

If you wish to extend network configuration capabilities of NM, please seek appropriate plug-in modules and supplemental packages such as network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc.

Sob systemd, a rede pode ser configurada em /etc/systemd/network/. Veja systemd-resolved(8), resolved.conf(5) e systemd-networkd(8).

Isto permite a configuração moderna de rede sem GUI.

Uma configuração de cliente DHCP pode ser definida ao criar /etc/systemd/network/dhcp.network". Ex.:

[Match]
Name=en*

[Network]
DHCP=yes

Uma configuração de rede estática pode ser definida ao criar "/etc/systemd/network/static.network". Ex.:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

For the low level network configuration on Linux, use the iproute2 programs (ip(8), …) .

Pode usar comandos de rede de baixo nível como a seguir 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 objetivo desta documentação. 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

Try MTU=1454 instead of MTU=1500

You see ping(8) succeed with MTU=1454.

If MTU is not 1500, you may want to configure MTU settings in NM.

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 de FTTP anterior o qual utilizava Modo de Transferência Assíncrona (ATM) com a coluna vertebral da rede dele e servia os seus clientes com PPPoE. O valor de PMTU real depende do seu ambiente, p.e. 1500 para o meu provedor de FTTP novo.


Adicionalmente a estas regras básicas, 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.

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.6, “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.8.1, “A inicialização de módulos do kernel”).


O principal programa de utilizador para o netfilter é o iptables(8). Pode configurar manualmente e interativamente o netfilter a partir da shell, gravar o estado dele 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 comandos iptables(8) e função de kernel netfilter aplicam-se às séries 2.6 e 3.x do kernel Linux.