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 moderna de rede para nuvem
5.4.1. A configuração moderna de rede para nuvem com DHCP
5.4.2. A configuração moderna de rede para nuvem com IP estático
5.4.3. A configuração moderna de rede para nuvem com Network Manager
5.5. A configuração de rede de baixo nível
5.5.1. Comandos iproute2
5.5.2. Operações de rede seguras de baixo nível
5.6. Optimização da rede
5.6.1. Encontrar o MTU óptimo
5.6.2. Optimização WAN TCP
5.7. 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:392, I:459 15542 config::NM NetworkManager (daemon): gere a rede automaticamente
network-manager-gnome V:121, I:369 5583 config::NM NetworkManager (frontend do GNOME)
netplan.io V:1, I:5 319 config::NM+networkd Netplan (gerador): Interface unificada e declarativa para os backends NetworkManager e systemd-networkd
ifupdown V:608, I:979 199 config::ifupdown ferramenta standard para ativar e desativar a rede (especifico de Debian)
isc-dhcp-client V:217, I:981 2875 config::low-level Cliente DHCP
pppoeconf V:0, I:5 186 config::helper ajudante de configuração para ligação PPPoE
wpasupplicant V:353, I:513 3862 config::helper suporte de cliente para WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:1 774 config::helper Cliente GUI Qt para o wpa_supplicant
wireless-tools V:179, I:244 292 config::helper ferramentas para manipular Extensões Wireless do Linux
iw V:34, I:475 302 config::helper ferramenta para configuração de dispositivos sem fios Linux
iproute2 V:736, I:972 3606 config::iproute2 iproute2, IPv6 e outras configurações avançadas de rede: ip(8), tc(8), etc
iptables V:319, I:718 2414 config::Netfilter ferramentas administrativas para filtragem de pacotes e NAT (Netfilter)
nftables V:106, I:701 182 config::Netfilter ferramentas de administração para filtragem de pacotes e NAT (Netfilter) (sucessor de {ip,ip6,arp,eb}tables)
iputils-ping V:194, I:997 122 teste 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:36 50 teste teste de acessibilidade de rede de uma máquina remota especificado pelo endereço ARP
iputils-tracepath V:2, I:30 47 teste rastreia o caminho de rede até uma máquina remota
ethtool V:95, I:267 739 teste mostra ou altera as definições de um aparelho Ethernet
mtr-tiny V:5, I:46 156 test::low-level rastreia o caminho de rede até uma máquina remota (curses)
mtr V:4, I:41 209 test::low-level rastreia o caminho de rede até uma máquina remota (curses e GTK)
gnome-nettool V:0, I:17 2492 test::low-level ferramentas para operações comuns de informação de rede (GNOME)
nmap V:25, I:199 4498 test::low-level mapeamento de rede / sondagem de portos (Nmap, consola)
tcpdump V:17, I:175 1340 test::low-level analisador de tráfego de rede (Tcpdump, consola)
wireshark I:45 10417 test::low-level analisador de tráfego de rede (Wireshark, GTK)
tshark V:2, I:25 400 test::low-level analisador de tráfego de rede (consola)
tcptrace V:0, I:2 401 test::low-level produz um sumário das ligações a partir da saída do tcpdump
snort V:0, I:0 2203 test::low-level sistema flexível de detecção de intrusos na rede (Snort)
ntopng V:0, I:1 15904 test::low-level mostra a utilização da rede num navegador web
dnsutils V:16, I:280 276 test::low-level clientes de rede disponibilizados com BIND: nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:3 53 test::low-level verifica informação de zona DNS a usar pesquisas do servidor de nomes
dnstracer V:0, I:1 59 test::low-level 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.

Uma estação de trabalho típica pode ser instalada com seu nome de host definido como, por exemplo, "host_name" e seu nome de domínio opcional definido como uma string vazia. Então, o "/etc/hosts" tem o seguinte aspeto.

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 corresponde ao nome de anfitrião definido no ficheiro "/etc/hostname" (ver Secção 3.7.1, “O nome da máquina”).

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 a estação de trabalho PC no ambiente típico de LAN adhoc, o nome do anfitrião pode ser resolvido através do Multicast DNS (mDNS), para além dos métodos básicos de files e dns.

  • 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" (veja /usr/share/doc/libnss-mdns/README.Debian para outras configurações).

  • Um nome de anfitrião sufixado com o pseudo-domínio de topo ".local" é resolvido enviando uma mensagem de consulta mDNS num pacote UDP multicast utilizando o endereço IPv4 "224.0.0.251" ou o endereço IPv6 "FF02::FB".

[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.

[Nota] Nota

O uso de pacotes como o libnss-resolve em conjunto com o systemd-resolved, ou libnss-myhostname, ou libnss-mymachine, com listagens correspondentes na linha"hosts" no ficheiro"/etc/nsswitch.conf" pode sobrepor-se à configuração de rede tradicional discutida em cima. Veja nss-resolve(8), systemd-resolved(8), nss-myhostname(8), e nss-mymachines(8) para mais informação.

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 pode gerir a ligação de rede através de software daemon de gestão como o NetworkManager (NM) (gestor de rede 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 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".

As documentações oficiais para o NM em Debian são disponibilizadas em "/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 usermod -a -G foo netdev
  2. Mantenha a configuração de "/etc/network/interfaces" tão simples como o seguinte.

    auto lo
    iface lo inet loopback
  3. Reinicie o NM da seguinte forma.

    $ sudo systemctl restart network-manager
  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 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.

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

A configuração de rede moderna para a nuvem pode usar os pacotes cloud-init e netplan.io (ver Secção 3.7.4, “Inicialização do sistema de nuvem”).

O pacote netplan.io suporta systemd-networkd e NetworkManager como seus backends de configuração de rede, e permite a configuração de rede usando dados YAML. Quando você altera o YAML:

  • Execute o comando "netplan generate" para gerar toda a configuração de backend necessária a partir de YAML.

  • Execute o comando "netplan apply" para aplicar a configuração gerada aos backends.

Veja "Documentação Netplan", netplan(5), netplan-generate(8) e netplan-apply(8).

Consulte também "Documentação de Inicialização na Nuvem" (especialmente em "Fontes de configuração" e "Netplan Passthrough") para saber como o cloud-init pode integrar a configuração do netplan.io com fontes de dados alternativas.

Para a configuração de rede de baixo nível no Linux, use os programas iproute2 (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 "/usr/sbin/". Pode necessitar de escrever o caminho do comando completo tal como "/usr/sbin/ifconfig" ou adicionar "/usr/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.


Normalmente, o NM define automaticamente a Unidade Máxima de Transmissão (MTU) ideal.

Nalgumas ocasiões, pode desejar definir o MTU manualmente após experiências com o ping(8) com a opção "-M do" para enviar um pacote ICMP com vários tamanhos de pacotes de dados. MTU é o tamanho máximo do pacote de dados sucessivo sem fragmentação de IP mais 28 bytes para o IPv4 e mais 48 bytes para o IPv6. Por exemplo, o seguinte indica que a MTU da ligação IPv4 é 1460 e a MTU da ligação IPv6 é 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

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


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.7, “Infraestrutura netfilter”) pode apertar o tamanho do pacote pelo MSS e é útil para o router. Veja "TCPMSS" em iptables(8).

A taxa de transferência TCP pode ser maximizada ajustando os parâmetros de tamanho do buffer TCP como em "TCP tuning" para a moderna WAN de alta largura de banda e alta latência. Até agora, as configurações padrão atuais do Debian servem bem até mesmo para minha LAN conectada pelo rápido serviço FTTP de 1G bps.

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

Tabela 5.7. Lista de ferramentas de firewall

pacotes popcon tamanho descrição
nftables V:106, I:701 182 ferramentas de administração para filtragem de pacotes e NAT (Netfilter) (sucessor de {ip,ip6,arp,eb}tables)
iptables V:319, I:718 2414 ferramentas de administração para netfilter (iptables(8) para IPv4, ip6tables(8) para IPv6)
arptables V:0, I:1 100 ferramentas de administração para netfilter (arptables(8) para ARP)
ebtables V:14, I:29 276 ferramentas de administração para netfilter (ebtables(8) para criação de pontes Ethernet)
iptstate V:0, I:2 119 monitoriza continuamente o estado do netfilter (semelhante ao top(1))
ufw V:55, I:77 859 Uncomplicated Firewall (UFW) é um programa para gerir filtros de pacotes de rede
gufw V:5, I:10 3660 interface gráfica do utilizador para a Uncomplicated Firewall (UFW)
firewalld V:11, I:16 2613 O firewalld é um programa de filtro de pacotes gerido dinamicamente com suporte para zonas de rede
firewall-config V:0, I:3 1163 interface gráfica do utilizador para o firewalld
shorewall-init V:0, I:0 88 Inicialização de Shoreline Firewall
shorewall V:3, I:8 3090 Shoreline Firewall, gerador de ficheiro de configuração netfilter
shorewall-lite V:0, I:0 71 Shoreline Firewall, gerador de ficheiro de configuração (versão leve) netfilter
shorewall6 V:0, I:1 1334 Shoreline Firewall, gerador de ficheiro de configuração (versão IPv6) netfilter
shorewall6-lite V:0, I:0 71 Shoreline Firewall, gerador de ficheiro de configuração (IPv6, versão light) netfilter

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.

Ver documentação em Documentação Netfilter (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.