Skip to main content

109.2 Configurações Persistentes de Redes


Vamos ver como fazer algumas alterações que vão persistir ao desligamento do computador.



/etc/hostname


Aqui mantemos armazenado o nome do computador.


Opções do comando hostname:

OpçãoDescrição
-dMostra o domínio.
-fMotra o nome do host mais o domínio.

Uma forma de ver o hostname da máquina é usando os comando abaixo:

$ hostname
ubuntu2004.localdomain

$ hostnamectl
Static hostname: ubuntu2004.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 0db238bbaac2472387dfec9d0bb721de
Boot ID: f1f155c978cc4be985283b3e878949cb
Virtualization: kvm
Operating System: Ubuntu 20.04.2 LTS
Kernel: Linux 5.4.0-70-generic
Architecture: x86-64

# Alterar o hostname de forma NÃO persistente:
$ sudo hostname novo-nome
$ cat /etc/hostname
ubuntu2004.localdomain
$ hostname
novo-nome

# Alterando de forma persistente:
$ sudo hostnamectl set-hostname novo-nome
$ cat /etc/hostname
novo-nome
$ hostname
novo-nome


/etc/hosts


É um arquivo de texto simples usado para fazer o mapeamento de IP para alguns nomesde host.

$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu2004.localdomain

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

# Ao mudar o nome da máquina, é bom alterar nesse arquivo aqui também.

Esse arquivo seria uma tabela DNS usada há muitos anos atrás, onde você mapeava o nome da máquina, domínio ao IP.



/etc/nsswitch.conf


Armazena principalmente meios de autenticação, por exemplo, para serviço de autenticação, qual serviços vamos usar (pode ser system, compat, nis, sss entre outros).


Para fazer buscar de IP para domínio, vamos usar dns primeiro ou vamos olhar o /etc/host (conhecido como file nesse arquivo) primeiro. Aqui você consegue mudar alguns padrões no sistema.


Para a prova vamos focar em 2, sendo o Hosts e Networks, vejo o arquivo completo abaixo:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: files systemd
group: files systemd
shadow: files
gshadow: files

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

O file em hosts e network é o arquivo /etc/hosts, então informações sobre máquinas, o sistema vai primeiro procurar em /etc/hosts e depois vai consultar o DNS.

Para informações de redes ele vai olhar somente no /etc/hosts.



/etc/networks


Parecido com o /etc/hosts, esse arquivo serve para dar nome a rede, pode exemplo, você pode colocar a rede 192.168.10.0/24 e chamar ela de rede-financeiro, e assim as redes terão nomes.

$ cat /etc/networks 
# symbolic names for networks, see networks(5) for more information
link-local 169.254.0.0


/etc/resolv.conf


Usado para determinar qual servidor DNS vai ser usado pelo sistema. Para isso usamos o nome nameserver e depois colocamos o IP do servidor DNS que vamos usar.

$ cat /etc/resolv.conf 
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0 trust-ad

Vale ressaltar que esse arquivo é um link para outro arquivo, como informa até dentro desse arquivo (resolv.conf), ele é um arquivo dinamicamente gerado, quem gera esse arquivo é o systemd-resolved, e caso entre uma noca conexão, seja por uma segunda interface ou até mesmo VPN, esse serviço do systemd vai regerar esse arquivo adicionando os novos servidores DNS nesse arquivo.

$ ls -lh /etc/resolv.conf 
lrwxrwxrwx 1 root root 39 Apr 2 12:32 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf


Network Manager


O daemon NetworkManager tenta tornar a configuração e operação de rede o mais simples e automática possível, gerenciando a conexão de rede primária e outras interfaces de rede, como Ethernet, Wi-Fi e dispositivos de banda larga móvel.


O NetworkManager conectará qualquer dispositivo de rede quando uma conexão para aquele dispositivo se tornar disponível, a menos que esse comportamento seja desabilitado. As informações sobre a rede são exportadas por meio de uma interface D-Bus para qualquer aplicativo interessado, fornecendo uma API rica para inspecionar e controlar as configurações e a operação da rede.


Era um projeto da Redhat, mas hoje tem sido mantido pela Gnome, por isso em distribuições que não usem o Gnome pode ser que você não encontre o Network Manager, mas é dificil, normalmente você deve ve-lô.


Ele é voltado mais para configurações onde tem interface gráfica, em servidores que não tem, você vai ver um maior uso do networkd, mas isso varia de distribuição para distribuição.


Por padrão ele sempre vai usar uma rede com fio, e sempre vai primeiramente usar DHCP, a menos que isso seja modificado.

# Verificando o status do serviço:
$ sudo systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-06-19 19:32:37 -03; 23h ago
Docs: man:NetworkManager(8)
Main PID: 974 (NetworkManager)
Tasks: 3 (limit: 18960)
Memory: 16.2M
CGroup: /system.slice/NetworkManager.service
└─974 /usr/sbin/NetworkManager --no-daemon

jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2691] device (vnet0): state change: config -> ip-config (reason 'none', sys-iface-state: 'external')
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2749] device (virbr1): bridge port vnet0 was attached
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2750] device (vnet0): Activation: connection 'vnet0' enslaved, continuing activation
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2752] device (vnet0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'external')
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2946] device (vnet0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'external')
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2949] device (vnet0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'external')
jun 20 18:09:38 krypton NetworkManager[974]: <info> [1624223378.2957] device (vnet0): Activation: successful, device activated.
jun 20 18:09:42 krypton NetworkManager[974]: <info> [1624223382.2697] device (virbr1): carrier: link connected
jun 20 18:14:12 krypton NetworkManager[974]: <info> [1624223652.3841] manager: NetworkManager state is now CONNECTED_SITE
jun 20 18:14:12 krypton NetworkManager[974]: <info> [1624223652.7080] manager: NetworkManager state is now CONNECTED_GLOBAL
bsilva@krypton:~/vagrant/ubuntu2004$

O NetworkManager usa o HAL para fazer a detecção das interfaces disponíveis e configuração.

A camada de abstracção de hardware em português, ou HAL, Hardware Abstraction Layer em inglês, é a camada entre o hardware físico de um computador e o software que corre nesse computador. A sua função é ocultar diferenças em hardware e, consequentemente, disponibilizar uma plataforma consistente para correr aplicações.

Os sistemas operativos baseados em BSD, Linux e o Windows possuem uma HAL. Estes sistemas operativos possuem subsistemas diferentes para funções específicas, tais como som e gráficos.


A linha de comando usado para interagir com o NetworkManager é a nmcli. Já os arquivos de configuração ficam em /etc/NetworkManager/.

$ ls -lh /etc/NetworkManager/
total 24K
drwxr-xr-x 2 root root 4,0K fev 5 14:54 conf.d
drwxr-xr-x 5 root root 4,0K abr 22 14:14 dispatcher.d
drwxr-xr-x 2 root root 4,0K mar 13 2020 dnsmasq.d
drwxr-xr-x 2 root root 4,0K mar 13 2020 dnsmasq-shared.d
-rw-r--r-- 1 root root 98 mar 13 2020 NetworkManager.conf
drwxr-xr-x 2 root root 4,0K jun 18 14:53 system-connections

# Em 'system-connections' ficam as redes conhecidas.


### Exemplo de uma rede wifi conhecida:
$ sudo cat /etc/NetworkManager/system-connections/NOME_da_rede.nmconnection
[connection]
id=Nome_da_rede
uuid=ccd5f680-d491-40bb-bcff-f613b5f3e30e
type=wifi
interface-name=wlp58s0
permissions=

[wifi]
mac-address-blacklist=
mode=infrastructure
ssid=Nome_da_rede

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=SENHA

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

[proxy]

OpçõesDescrição
Sem argumentosVai mostrar uma prévia de todas as interfaces com algumas configurações.
connectionSe baseia no nome da conexão para algum tipo de gerencia. Sem argumento mostra todas as conexões.
down "conneciton-name"Desativa a conexão.
up "conneciton-name"Ativa a conexão.
addAdiciona uma conexão.
type (connection-type)Informa o tipo de conexão (ethernet, wifi, pppoe, bluetooth, vlan, bond., bond-slave, bridge, vpn, tun, vxlan entre muitos outros).
con-name (connection-name)Adiciona o nome para essa conexão.
ifname (interface)Informa o nome da interface.
ip4 (IPv4)Informa o endereço IPv4 que será usado.
gw4 (IPv4)Informa o IPv4 do gateway a ser usado.
DeviceSe baseia no nome da interface para algum tipo de gerencia. Sem argumento mostra todas as interfaces.
show (interface)Mostra mais informações sobre essa interface.
disconnect (interface)Desativa a conexão usando o nome da interface.
connect (interface)Ativa a conexão usando o nome da interface.
Opções gerais
networkingVerifica se o controle do NetworkManager está habilitada ou desabilitada na interface padrão
networking onHabilita o controle da interface pelo NetworkManager na interface padrão
networking offDesabilita o controle da interface pelo NetworkManager na interface padrão
general statusVerificar o status da conexão
radio wifi offDesabilita o wifi.
radio wifi onAtiva o wifi.

Vamos fazer alguns testes:

$ nmcli 
enxa44cc8f1a2d9: conectado para Conexão cabeada 1
"Realtek RTL8153"
ethernet (r8152), A4:4C:C8:F1:A2:D9, hw, mtu 1500
padrão ip4
inet4 192.168.1.148/24
route4 0.0.0.0/0
route4 192.168.1.0/24
inet6 fe80::6534:bbf3:99f3:892d/64
route6 fe80::/64

wlp58s0: conectado para NOME-DA-REDE-WIFI
"Qualcomm Atheros QCA6174"
wifi (ath10k_pci), 9C:B6:D0:EF:5B:FF, hw, mtu 1500
inet4 192.168.1.144/24
route4 0.0.0.0/0
route4 192.168.1.0/24
inet6 fe80::3288:28ac:8b4d:db43/64
route6 fe80::/64

virbr0: conectado para virbr0
"virbr0"
bridge, 52:54:00:EA:B8:82, sw, mtu 1500
inet4 192.168.122.1/24
route4 192.168.122.0/24

virbr1: conectado para virbr1
"virbr1"
bridge, 52:54:00:DF:41:96, sw, mtu 1500
inet4 192.168.121.1/24
route4 192.168.121.0/24

virbr2: conectado para virbr2
"virbr2"
bridge, 52:54:00:AD:73:5C, sw, mtu 1500
inet4 192.168.100.1/24
route4 169.254.0.0/16
route4 192.168.100.0/24

vnet0: conectado para vnet0
"vnet0"
tun, FE:54:00:0B:4D:7B, sw, mtu 1500
mestre virbr1

p2p-dev-wlp58s0: desconectado

# Vendo mais informações sobre uma interface:
$ nmcli device show enxa44cc8f1a2d9
GENERAL.DEVICE: enxa44cc8f1a2d9
GENERAL.TYPE: ethernet
GENERAL.HWADDR: A4:4C:C8:F1:A2:D9
GENERAL.MTU: 1500
GENERAL.STATE: 100 (conectado)
GENERAL.CONNECTION: Conexão cabeada 1
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/10
WIRED-PROPERTIES.CARRIER: ligado
IP4.ADDRESS[1]: 192.168.1.148/24
IP4.GATEWAY: 192.168.1.1
IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 100
IP4.ROUTE[2]: dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]: 8.8.8.8
IP4.DOMAIN[1]: lan
IP6.ADDRESS[1]: fe80::6534:bbf3:99f3:892d/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 100

### Verificar o status da conexão (wifi):
nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
conectado (somente site) limitada habilitado habilitado habilitado habilitado

## Cabeada:
$ nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
conectado completa habilitado habilitado habilitado habilitado

# Verificando se o controle do NetworkManager está habilitada ou desabilitada na interface padrão:
$ nmcli networking
enabled

## Desabilitando controle da interface pelo NetworkManager:
$ sudo nmcli networking off
$ nmcli networking
disabled

## Habilitando controle da interface pelo NetworkManager:
$ sudo nmcli networking on
$ nmcli networking
enabled

## Desabilitando o controle do wifi pelo NetworkManager:
$ sudo sudo nmcli radio wifi off
$ sudo sudo nmcli radio wifi
disabled

## Habilitando o controle do wifi pelo NetworkManager:
$ sudo sudo nmcli radio wifi on
$ sudo sudo nmcli radio wifi
enabled

### 'Connection' mostra baseado no nome da conexão e 'Device' mostra baseado no nome da interface da rede:
$ nmcli connection
NAME UUID TYPE DEVICE
Conexão cabeada 1 947c3c9d-b720-391f-8f31-20277cd9c4f4 ethernet enxa44cc8f1a2d9
REDE-WIFI ccd5f680-d491-40bb-bcff-f613b5f3e30e wifi wlp58s0
REDE-WIFI c30f6b9b-19da-4a76-b9f1-c2dbf863c473 wifi --
OnePlus 5T cb8c346a-5983-42c2-8077-db96ba50dfe7 wifi --

$ nmcli device
DEVICE TYPE STATE CONNECTION
enxa44cc8f1a2d9 ethernet conectado Conexão cabeada 1
wlp58s0 wifi conectado REDE-WIFI
virbr0 bridge desconectado --
virbr2 bridge desconectado --
vnet0 tun desconectado --
p2p-dev-wlp58s0 wifi-p2p desconectado --
virbr1 bridge não gerenciável --
lo loopback não gerenciável --
virbr0-nic tun não gerenciável --
virbr1-nic tun não gerenciável --
virbr2-nic tun não gerenciável --

# Desativando a interface usando o nome da conexão:
$ sudo nmcli connection down "Conexão cabeada 1"
Conexão “Conexão cabeada 1” desativada com sucesso (caminho D-Bus ativo: /org/freedesktop/NetworkManager/ActiveConnection/15)

$ ip addr show enxa44cc8f1a2d9
2: enxa44cc8f1a2d9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a4:4c:c8:f1:a2:d9 brd ff:ff:ff:ff:ff:ff

# Ativando:
$ sudo nmcli connection up "Conexão cabeada 1"
Conexão ativada com sucesso (caminho D-Bus ativo: /org/freedesktop/NetworkManager/ActiveConnection/18)

$ ip addr show enxa44cc8f1a2d9
2: enxa44cc8f1a2d9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a4:4c:c8:f1:a2:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.148/24 brd 192.168.1.255 scope global dynamic noprefixroute enxa44cc8f1a2d9
valid_lft 86382sec preferred_lft 86382sec
inet6 fe80::6534:bbf3:99f3:892d/64 scope link noprefixroute
valid_lft forever preferred_lft forever

# Desativando a conexão usando o nome da interface:
$ sudo nmcli device disconnect enxa44cc8f1a2d9
Dispositivo “enxa44cc8f1a2d9” desconectado com sucesso.

$ ip addr show enxa44cc8f1a2d9
2: enxa44cc8f1a2d9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a4:4c:c8:f1:a2:d9 brd ff:ff:ff:ff:ff:ff

# Ativando a conexão usando o nome da interface:
$ sudo nmcli device connect enxa44cc8f1a2d9
Dispositivo “enxa44cc8f1a2d9” ativado com sucesso com “947c3c9d-b720-391f-8f31-20277cd9c4f4”.

$ ip addr show enxa44cc8f1a2d9
2: enxa44cc8f1a2d9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a4:4c:c8:f1:a2:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.148/24 brd 192.168.1.255 scope global dynamic noprefixroute enxa44cc8f1a2d9
valid_lft 86399sec preferred_lft 86399sec
inet6 fe80::6534:bbf3:99f3:892d/64 scope link noprefixroute
valid_lft forever preferred_lft forever

# Adicionar uma conexão chamada rede-test
$ sudo nmcli connection add type ethernet con-name rede-test ifname enxa44cc8f1a2d9 ip4 192.168.1.150/24 gw4 192.168.1.1
A conexão “rede-test” (a09d5a89-c65a-4724-8c07-c280535158f7) foi adicionada com sucesso.

$ nmcli connection | grep rede
rede-test a09d5a89-c65a-4724-8c07-c280535158f7 ethernet

# Deletar uma conexão:
$ sudo nmcli connection del rede-test
A conexão “rede-test” (a09d5a89-c65a-4724-8c07-c280535158f7) foi excluída com sucesso.

### Trabalhando com interfaces Wifi

# Listando as redes do Wifi:
$ nmcli device wifi list
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
E0:B9:E5:E3:E1:43 NOME Infra 11 130 Mbit/s 100 ▂▄▆█ WPA1 WPA2
* E2:B9:E5:E3:E1:4B NOME Infra 157 405 Mbit/s 100 ▂▄▆█ WPA1 WPA2
10:13:31:75:B1:B9 NOME Infra 1 130 Mbit/s 75 ▂▄▆_ WPA2
# Caso existe uma rede Wifi mais fraca pode ser que nao seja listado, para isso rode o comando abaixo:
$ nmcli device wifi rescan
# E agora rode novamente o 'list' e você verá que pode ter aparecido novas redes.

# Conectando no Wifi:
$ sudo nmcli device wifi connect "SSID-NAME" password "SENHA"


SystemD-NetworkD


Similar ao NetworkManager, o Networkd é outro renderer de redes que temos no Linux a disposição para usar.

# Verificando o serviço:
$ sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-06-20 23:50:12 UTC; 10min ago
TriggeredBy: ● systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 1472 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 2280)
Memory: 1.5M
CGroup: /system.slice/systemd-networkd.service
└─1472 /lib/systemd/systemd-networkd

Jun 20 23:50:12 ubuntu2004.localdomain systemd[1]: Starting Network Service...
Jun 20 23:50:12 ubuntu2004.localdomain systemd-networkd[1472]: eth0: Gained IPv6LL
Jun 20 23:50:12 ubuntu2004.localdomain systemd-networkd[1472]: Enumeration completed
Jun 20 23:50:12 ubuntu2004.localdomain systemd[1]: Started Network Service.
Jun 20 23:50:12 ubuntu2004.localdomain systemd-networkd[1472]: eth0: IPv6 successfully enabled
Jun 20 23:50:12 ubuntu2004.localdomain systemd-networkd[1472]: eth0: DHCPv4 address 192.168.121.52/24 via 192.168.121.1

Se não for usar o NetworkManager desative ele, ficar com mais de 1 renderer de rede rodando por causar conflito e pode trazer alguma dor de cabeça no futuro.


Dentro de /run/systemd/network/, /lib/systemd/network/ ou /etc/systemd/network/ é criado vários arquivos contendo a configuração de cada interface que foi configurada no Linux. Se você colocar alguma informação de layer 2 na configuração da interface, dentro de /run/systemd/network/ também será criado um mesmo arquivo daquela interface, mas ao invés de termos um arquivo com extensão .network, vamos ter também outro arquivo com extensão .link.

$ ls -lh /lib/systemd/network/
total 32K
-rw-r--r-- 1 root root 44 Feb 23 00:18 73-usb-net-by-mac.link
-rw-r--r-- 1 root root 645 Apr 1 2020 80-container-host0.network
-rw-r--r-- 1 root root 718 Apr 1 2020 80-container-ve.network
-rw-r--r-- 1 root root 704 Apr 1 2020 80-container-vz.network
-rw-r--r-- 1 root root 78 Apr 1 2020 80-wifi-adhoc.network
-rw-r--r-- 1 root root 101 Apr 1 2020 80-wifi-ap.network.example
-rw-r--r-- 1 root root 64 Apr 1 2020 80-wifi-station.network.example
-rw-r--r-- 1 root root 491 Apr 1 2020 99-default.link


Ifupdown


Talvez seja necessário instalar o pacote ifupdown para poder mexer com essa funcionalidade já que ele está atrelado ao systemd-networkd, não confunda com network-dispatcher.


Os comandos cobrados pela LPI são: ifup e ifdown, que são usados para ativar e desativar uma interface de rede, mas para isso você precisa estar usando o arquivo de configuração /etc/network/interfaces, se não tiver configurado nao vai funcionar.

# Ativando:
$ sudo ifup eth0

# Desativando:
$ sudo ifdown eth0