Aula #39 - Dispositivos de Rede e Configuração

Os dispositivos de rede, tais como as conexões Ethernet e sem fio necessitam de configuração cuidadosa, especialmente quando há vários dispositivos semelhantes no sistema. 
A questão dos nomes consistentes e persistente dos dispositivos pode se tornar complicada em tais sistemas. 
Recentemente, a adoção de novos esquemas de nomes para dispositivos de rede, reduziu o problema. 
Uma série de ferramentas importantes são usados ​​para ativar e desativar dispositivos, configurar suas propriedades, definir rotas de rede, etc. Os administradores de sistemas devem estar familiarizados com a utilização dessas ferramentas.






Ao contrário de dispositivos de bloco e de caracteres, dispositivos de rede não estão associados a um arquivo especial, também conhecido como nó de dispositivo. Ao invés de ter entradas no /dev dispositivos de rede são conhecidos por um nome.

Este nome consiste de um identificador de tipo seguido por um número:

    eth0, eth1, eth2 para dispositivos Ethernet.
    wlan0, wlan1, wlan2 para dispositivos wireless.
    br0,  br1, br2 para bridges.
    vmnet0,  vmnet1,   vmnet2 para dispositivos virtuais da VMware para comunicar com VMs.

Vários dispositivos virtuais podem ser associados com os dispositivos físicos individuais; estes são nomeados com dois pontos e números, assim eth0:0 seria o primeiro alias do dispositivo eth0. Isso é feito para ter mais de um endereço IP em uma placa de rede.


A convenção clássica de nomenclatura de dispositivos de rede não é confiável quando há várias interfaces do mesmo tipo presentes ao mesmo tempo. Por exemplo, suponha que um servidor tem duas placas de rede; uma seria nomeada eth0 e a outra eth1. No entanto, qual dispositivo físico deve ser associado a cada nome?

O método mais simples é associar o primeiro dispositivo encontrado com o nome eth0 e o segundo com eth1, etc. Infelizmente, a ordem em que os dispositivos são encontrados pelo sistema não é determinística, e dispositivos podem ser localizados ou conectado em uma ordem imprevisível. O resultado pode ser ter a interface da Internet trocada com a interface local, o que é um problema de segurança. Mesmo que hardware não mude, a ordem em que as interfaces são localizadas pode variar de acordo com a versão do kernel e configuração do sistema.

Muitos administradores de sistemas resolveram este problema de uma forma simples, associando endereços MAC com nomes de dispositivos de rede. Por um lado este método funciona, mas por outro lado requer ajustes manuais. E ainda existem casos em que os endereços MAC não são fixos, como em ambientes virtualizados e embarcados. 



O novo esquema de nomes previsíveis chamado Predictable Network Interface Device Names está ligado ao uso do udev e do systemd. 
Existem 5 tipos de nomes que um dispositivo pode receber:



    Índice fornecido pelo Firmware ou BIOS para dispositivos onboard:
    Exemplo: eno1
     
    Índice fornecido pelo Firmware ou BIOS para dispositivos PCI / PCI Express que indica o número do slot:
    Exemplo: ens1
     
    Índice indicando a localização física e/ou geográfica da conexão de hardware:
    Exemplo: enp2s0
     
    Usar o endereço MAC:
    Exemplo: enx7837d1ea46da
     
    Usar o método antigo:
    Exemplo: eth0




Por exemplo, em um servidor com duas placas de rede PCI elas seriam eth0 e eth1:

$ ifconfig | grep enp

enp2s0: flags=4163  mtu 1500 enp4s2: flags=4099  mtu 1500

Estes nomes estão relacionados com a localização física do hardware no barramento PCI :

02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12)


04:02.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 14)


Os três números no início de cada linha da saída do lscpi são o bus, dispositivo (ou slot) e a função do dispositivo; por isso é possível determinar a localização física.

Da mesma forma, para um adaptador para redes sem fio que antes seria chamado de wlan0: 

$ ifconfig grep wl
wlp3s0: flags=4163  mtu 1500

$ lspci | grep Centrino

03:00.0 Network controller: Intel Corporation Centrino Advanced-N 6205 [Taylor Peak] (rev 34) 

Vemos o mesmo padrão. É fácil voltar os nomes para o padrão clássico. Vamos deixar isso como um projeto de pesquisa. Durante o curso vamos usar mais os nomes clássicos por simplicidade.



Vários arquivos específicos de distribuições Linux armazenam configurações persistentes de controladores de rede.



No RHEL 6 temos:

$ cat /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=bethe



$ cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:0C:29:26:3F:B3"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="5b52bee2-8fda-450d-729e-3996dd12ef7d"



 No openSUSE 13.1 temos:

$ cat /etc/sysconfig/network/ifcfg-eno16777736
$ cat /etc/sysconfig/network/ifcfg-eno2ps1

BOOTPROTO='dhcp'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME='82545EM Gigabit Ethernet Controller (Copper)'
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'



No Ubuntu 14.04 (representante das distribuições baseadas no Debian):

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.254
auto eth1
iface eth1 inet dhcp



Observe que você pode desabilitar uma interface de rede com:

$ ifdown eth0



ou ativar uma interface com:

$ ifup eth0



Interfaces de Rede também podem ser configuradas diretamente usando tanto a ferramenta ifconfig quanto a ferramenta ip. Entretanto as configurações feitas com estas ferramentas não são persistentes e se perdem com um reboot.





IFCONFIG



O ifconfig é uma ferramenta do sistema encontrada em sistemas UNIX para configurar e controlar parâmetros da interface de rede a partir da linha de comando ou de scripts de configuração do sistema. É também muitas vezes chamado por scripts de inicialização de rede. Alguns exemplos de uso:



    Exibe informações sobre todas as interfaces:
    $ ifconfig
     
    Exibe informações apenas da eth0:
    $ ifconfig eth0
     
    Configura o endereço IP 192.168.1.50 na interface eth0:
    $ sudo ifconfig eth0 192.168.1.50
     
    Configura a máscara de rede para 24-bit:
    $ sudo ifconfig eth0 netmask 255.255.255.0
     
    Sobe a interface eth0:
    $ sudo ifconfig eth0 up
     
    Derruba a interface eth0:
    $ sudo ifconfig eth0 down
     
    Configura o MTU (Maximum Transfer Unit) para 1480 bytes na interface eth0:
    $ sudo ifconfig eth0 mtu 1480










IP



O ip é um utilitário de linha de comando mais recente (e muito mais versátil) que o venerável ifconfig. 
Em um nível técnico é mais eficiente porque usa sockets netlink em vez de chamadas de sistema ioctl.



A ferramenta ip pode ser utilizada para uma grande variedade de tarefas. Pode exibir dispositivos de controle, roteamento, roteamento baseado em políticas, e tunelamento.



A sintaxe básica é a seguinte:

ip [opções] OBJECT { COMANDO | help }
ip [ -force ] -batch nomedearquivo



em que a segunda forma pode ler comandos a partir de um arquivo.

O ip é um utilitário multiplex; o argumento OBJECT descreve que tipo de ação vai ser realizada. Os COMANDOS possíveis dependem de qual OBJECT foi selecionado.


Alguns dos principais valores de OBJECT:


OBJECT Função
address Endereço do protocoloIPv4 or IPv6
link    Dispositivos de Rede
maddress Endereço Multicast
monitor   Monitora mensagens netlink
route Entrada na tabela de roteamento
rule Regra na base de regras de roteamento
tunnel Túnel sobre IP





A ferramenta ip pode ser usada de várias formas:



    Mostra informações sobre todas as interfaces de rede:
    $ ip link
     
    Mostra informações apenas sobre a interface de rede eth0:
    $ ip -s link show eth0
     
    Configura o endereço IP na interface eth0:
    $ sudo ip addr add 192.168.1.7 dev eth0
     
    Desativa a interface eth0:
    $ sudo ip link set eth0 down
     
    Configura o MTU para 1480 bytes para a eth0:
    $ sudo ip link set eth0 mtu 1480



    Configura a rota de rede:
    $ sudo ip route add 172.16.1.0/24 via 192.168.1.5






Roteamento é o processo de escolher caminhos de rede para enviar tráfego de rede. A tabela de roteamento é uma lista (gerenciada pelo sistema) de rotas para outras redes. Ele define caminhos para todas as redes e hosts, enviando para roteadores tráfego com destino externo

Para ver a tabela de roteamento, use o route:

$ /sbin/route
Kernel IP routing table
Destination    Gateway     Genmask        Flags Metric Ref Use Iface
default        192.168.1.1 0.0.0.0        UG    1024   0     0 enp2s0
172.16.132.0   0.0.0.0     255.255.255.0  U     0      0     0 vmnet1
192.168.1.0    0.0.0.0     255.255.255.0  U     0      0     0 enp2s0
192.168.113.0  0.0.0.0     255.255.255.0  U     0      0     0 vmnet8


ou ip:


$ ip route

default via 192.168.1.1 dev enp2s0 proto static metric 1024
172.16.132.0/24 dev vmnet1 proto kernel scope link src 172.16.132.1
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.100
192.168.113.0/24 dev vmnet8 proto kernel scope link src 192.168.113.1







A rota padrão é o destino para os quais os pacotes são enviados quando não há outra entrada na tabela de roteamento para alcançar a rede especificada.



Pode ser obtida de forma dinâmica usando DHCP, mas também pode ser configurada de forma manual. Em sistemas Red Hat basta modificar /etc/sysconfig/network e adicionar uma linha:

GATEWAY=x.x.x.x



outra alternativa é o arquivo /etc/sysconfig/network-scripts/ifcfg-ethX que permite adicionar uma rota padrão por dispositivo de rede. Em sistemas baseados no Debian o equivalente pode ser feito colocando:

gateway=x.x.x.x


no /etc/network/interfaces.



Nos dois sistemas é possível definir rotas durante a execução com:



$ sudo route add default gw 192.168.1.10 enp2s0

$ route
Kernel IP routing table
Destination   Gateway      Genmask       Flags Metric Ref Use Iface
default       192.168.1.10 0.0.0.0       UG    0      0     0 enp2s0
default       192.168.1.1  0.0.0.0       UG    1024   0     0 enp2s0
172.16.132.0  0.0.0.0      255.255.255.0 U     0      0     0 vmnet1
192.168.1.0   0.0.0.0      255.255.255.0 U     0      0     0 enp2s0
192.168.113.0 0.0.0.0      255.255.255.0 U     0      0     0 vmnet8


Observe que este comando pode derrubar a conexão de rede! Você desfazer a alteração reiniciando a rede, ou para o exemplo anterior executar:

$ sudo route add default gw 192.168.1.1 enp2s0


Alterações feitas com estes comandos não são persistentes e não sobrevivem quando reiniciar o sistema.









ROTA ESTÁTICA



Rotas estáticas são usadas para controlar o fluxo de pacotes, quando existe mais que um roteador ou caminho de rede. Elas são definidas para cada interface e podem ser persistentes ou não-persistentes.

Quando o sistema pode acessar mais de um roteador, ou quando há várias interfaces, é útil controlar ativamente quais pacotes vão para cada roteador.

As ferramentas route e ip podem definir rotas não persistentes:

$ sudo ip route add 10.5.0.0/16 via 192.168.1.100

$ route
Destination  Gateway      Genmask        Flags Metric Ref Use Iface
default      192.168.1.1  0.0.0.0        UG    0      0     0 eth0
10.5.0.0     quad         255.255.0.0    UG    0      0     0 eth0
192.168.1.0  *            255.255.255.0  U     1      0     0 eth0

Uma rota persistente deve ser salva no arquivo /etc/sysconfig/network-scripts/route-ethX como mostrado aqui:

$ cat /etc/sysconfig/network-scripts/route-eth0
10.5.0.0/16 via 172.17.9.1

Em sistemas baseados no Debian você deve adicionar as rotas no arquivo /etc/network/interfaces como em:

iface eth1 inet dhcp

    post-up route add -host 10.1.2.51 eth1
    post-up route add -host 10.1.2.52 eth1

Em sistemas baseados no SUSE é necessário editar ou criar arquivos como /etc/sysconfig/network/ifroute-eth0 com o formato:

# Destination Gateway Netmask Interface [Type] [Options]
# Destino Gateway Máscara Interface [Tipo] [Opções]

192.168.1.150 192.168.1.1 255.255.255.255 eth0

10.1.1.150 192.168.233.1.1 eth0
10.1.1.0/24 192.168.1.1 - eth0

em que cada campo é separado por tabs.




RESOLUÇÃO DE NOMES



A resolução de nomes é o ato de traduzir nomes de hosts para os endereços IP. Por exemplo, um navegador ou cliente de e-mail vai pegar training.linuxfoundation.org e traduzir o nome para o endereço IP do servidor (ou servidores) que estão associados a training.linuxfoundation.org antes de poder transmitir para esses servidores.

Há dois recursos para fazer esta tradução:

    Resolução de nomes estática (usando /etc/hosts).
    Resolução de nomes dinâmica (usando os servidores DNS). 

As vezes também é necessário fazer tradução inversa: a conversão de um endereço IP para um nome de host. 



O arquivo /etc/hosts mantém um banco de dados local de nomes de máquinas e endereços IP. Ele contém um conjunto de registros (um registro por linha) que mapeiam endereços IP a nomes de máquinas e apelidos.

Um /etc/hosts típico se parece com:

127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4

::1           localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.100 hans hans7 hans64

192.168.1.150 bethe bethe7 bethe64
192.168.1.2 hp-printer
192.168.1.10 test32 test64 oldpc

A resolução de nomes estática é usada principalmente para pequenas redes locais isoladas. Geralmente a consultada ao /etc/hosts é feita antes de se consultar o servidor DNS; no entanto, a ordem de consulta pode ser alterada no arquivo /etc/nsswitch.conf.






DNS



Se a resolução de nomes não puder ser feita localmente, usando o /etc/hosts, o sistema irá consultar um servidor DNS (Domain Name Server ou servidor de nome de domínio).

O DNS é dinâmico e é composto por uma rede de servidores que um cliente usa para procurar por nomes. O serviço é distribuído, ou seja, qualquer servidor DNS possui informação apenas sobre a sua zona de autoridade; no entanto, todos eles juntos cooperam para resolver qualquer nome.

O DNS é configurado em /etc/resolv.conf, que historicamente usa as linhas:

search example.com aps.org
nameserver 192.168.1.1
nameserver 8.8.8.8

Este arquivo pode ser usado para:

    Especificar domínios de pesquisa(www ou www.example.com ou www.aps.org são válidos).
    Definir a ordem em que os servidores DNS serão consultados.
    Nota: Este arquivo pode ser gerado automaticamente por serviços como DHCP (Dynamic Host Configuration Protocol, ou protocolo de configuração dinâmica de hosts). 

A maioria dos sistemas modernos terá um arquivo /etc/hosts.resolv gerado automaticamente, com conteúdo semelhante a:

# Gerado por NetworkManager
nameserver 192.168.1.1

que foi gerado pelo NetworkManager ao chamar o cliente DHCP na interface de rede primária.




FERRAMENTAS PARA DIAGNOSTICO DE REDES



Vários utilitários de rede básicos estão na caixa de ferramentas de todo administrador de sistema, incluindo:

    ping:
    Envia pacotes de teste de 64 bytes para hosts na rede e se ele se os hosts responderem tenta calcular o tempo necessário para ir e voltar em milissegundos. Lembre-se de que a saída exata vai variar, mas normalmente é fácil determinar se a rede está funcionando e se o host é alcançável.

    traceroute:
    É utilizado para indicar um caminho de rede para um destino. Ela mostra por quais roteadores os pacotes passam antes de chegar ao destino, e o tempo que eles levam para vencer cada salto.

    mtr:
    Combina a funcionalidade do ping e do traceroute e exibe o resultado com atualização automatica como o top.

    dig:
    É útil para testar o DNS. Lembre-se que você também pode usar o host ou nslookup, que são programas mais antigos que também fazem consultas DNS. 

Lembre-se que em algumas distribuições pode ser necessário ter privilégios de root (com o sudo por exemplo), para executar utilitários de diagnóstico.

Exemplos:

$ ping -c 10 linuxfoundation.org

$ traceroute linuxfoundation.org
$ mtr linuxfoundation.org



Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

OPNsense - Firewall Open Source

SSD no linux

Administração de sistema e Deploys: Ansible, Chef, Fabric, Puppet ou Salt?

Aula #38 - Endereços de Rede

Ophcrack: Descubra todas as senhas do Windows