Netplan
Netplan é um utilitário de renderização, usado para configurar facilmente a rede em sistemas
Linux. Você cria um arquivo .YAML das interfaces de rede e coloca a configuração das interfaces.
Esse sistema foi implementado no
Ubuntu 17.10, atualmente é a nova forma de configurar a rede no Ubuntu 18.04 LTS.
Como funciona o Netplan
O Netplan na prática, pega as configurações .yaml e gera configurações backend, essa configurações backend são usadas pelo systemd-networkd por padrão, mas você pode usar outro renderizador como o NetworkManager.
No nosso exemplo vamos usar o renderizador default.
Explicando melhor o funcionamento:
Você pode criar arquivos de configuração .yaml em 3 locais distintos no seu sistema, são eles:
- /run/netplan/*.yaml
- /etc/netplan/*.yaml
- /lib/netplan/*.yaml
No momento da inicialização, o netplan é executado e lê um dos diretórios acima: /run/netplan/, /etc/netplan/ ou /lib/netplan/, após a leitura ele pega os arquivo .yaml e grava a configuração em /run/systemd/network/ para entregar o controle de dispositivos ao daemon de rede especificado (systemd-networkd nesse caso).
Nesse diretório é criado um arquivo para cada interface com a extensão .network. Esses arquivos contém a configuração de cada interface contendo: IP, Máscara, Gateway, DNS e nome do device.
Recapitulando:
Dentro de
/run/systemd/network/ são criados vários arquivos contendo a configuração de cada interface que foi configurada no arquivo
/etc/netplan/*.yaml.
Se você colocar alguma informação de layer 2 no arquivo do Netplan, 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.
Configurando a rede
Foi criada uma máquina virtual com 3 placas de rede, sendo elas: enp0s3, enp0s8 e enp0s9.
Vamos aos detalhes:
Você pode colocar as configurações de cada interface num mesmo arquivo, ou criar um arquivo para cada interface, eu gosto de deixar tudo no mesmo arquivo.
Há muitas formas de declarar um valor dentro do arquivo de configuração, eu vou tentar mostrar todas as formas em configurações de interfaces diferentes.
Renomeando o arquivo:
Vamos renomear o arquivo que está em /etc/netplan/, para que possamos criar o arquivo da nossa rede, mas vamos deixar o arquivo antigo lá, ele só não será usado.
# mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
Crie um arquivo novo:
Vamos criar um arquivo personalizado, ele pode ter qualquer nome, desde que comece com número e termine com .yaml, por boas práticas, use o traço, ou underline como se fosse espaços.
# > /etc/netplan/01-my_network.yaml
Obs.: em sistemas Unix/Linux, tente nunca usar espaços, por uma questão de boas práticas, isso pode te evitar dor de cabeça no futuro.
Configuração do arquivo:
1 network:
2 ethernets:
3 enp0s3:
4 addresses: []
5 dhcp4: true
6 nameservers:
7 addresses: []
8
9 enp0s8:
10 macaddress: 52:54:00:6b:3c:59
11 addresses:
12 - 192.168.10.15/24
13
14 gateway4: 192.168.10.1
15 dhcp4: false
16 nameservers:
17 addresses: [8.8.8.8,8.8.4.4]
18
19 enp0s9:
20 macaddress: 08:00:27:6A:7F:48
21 addresses: [192.168.200.15/24]
22 gateway4: 192.168.200.1
23 dhcp4: no
24 nameservers:
25 addresses:
26 - 192.168.200.1
27 - 8.8.4.4
28 version: 2
Entendendo o arquivo:
Linha 1:
network:
Início da Configuração da rede;
Linha 2:
ethernets:
O protocolo que as interfaces atendem, tipo as interfaces são ethernets;
Linha 3
enp0s3:
Início da configuração de uma interface (Colocamos o nome da interface);
Linha 4
addresses: []
Colocamos o endereço da interface entre colchetes, pode-se especificar mais de um endereço, separando cada endereço por vírgula, como:
addresses: [192.168.0.10/24,192.200.30.15/24]
Caso tenha um IPv6, ele deve ser atribuído da mesma forma, mas deve ficar com aspas, como no exemplo abaixo:
addresses: [192.168.0.10/24, ”2001:1::1/64”]
Outra forma de atribuir um ou mais IP para uma interface é usando traço:
addresses:
- 192.168.0.10/24
- ”2001:1::1/64”
As duas formas são descritas no manual e eu particularmente prefiro essa.
Essa atribuição é usado na sessão de DNS, agindo da mesma forma.
Não foi especificado nenhum endereço porque vamos usar um DHCPv4;
Linha 5
dhcp4: true
Aqui colocamos se vamos usar ou não o DHCP, atenção aos detalhes, para
especificar o valor do DHCP, temos 4 formas, duas para sim (Vou usar) e duas para
não (não quero servidor DHCP), são elas:
dhcp4: true
dhcp4: yes
dhcp4: false
dhcp4: no
Qualquer uma das formas de uso está correta, porém, eu gosto de usar os valores
true e false por estes estarem descritos no manual. Mas perceba que usei os dois
no arquivo, exatamente para mostrar que você pode usar qualquer um dos dois.
Você pode colocar dhcp6 para usar um servidor DHCP para IPv6, porém, se não for
usar, é bom omitir para que o arquivo não fique muito poluído.
Linha 6
nameservers:
Aqui usamos uma “tag” chamada addresses, para indicar um ou mais IP de DNS.
Como não tem nada, poderia remover isso da nossa conf, mas deixei lá para que
você veja como seria.
Exemplos de como definir DNSs:
nameservers:
addresses: [8.8.8.8,8.8.4.4]
nameservers:
addresses:
- 192.168.200.1
- 8.8.4.4
Como eu disse, as duas formas de atribuição estão corretas, você usa da forma que
achar melhor.
nameservers:
addresses: []
Indica que não vou usar DNS.
Linha 10
macaddress: 52:54:00:6b:3c:59
Aqui colocamos o MAC da interface, eu coloquei só para você saber que isso é
possível, mesmo que você coloque o MAC errado na configuração, o MAC atribuído
a interface irá sempre ser o correto, caso queira clonar o MAC, isso deve ser feito
de outra forma.
Obs.: Como explicado anteriormente, ao especificar um atributo de layer 2, será
criado um um arquivo com a extensão .link dentro de /run/systemd/network/.
Como colocamos o MAC na interface enp0s8 temos dois arquivos para essa
interface:
/run/systemd/network/10-netplan-enp0s8.network
/run/systemd/network/10-netplan-enp0s8.link
Esses arquivos foram criados pelo Netplan para que o systemd-networkd possa
fazer o gerenciamento da rede.
Conteúdo do /run/systemd/network/10-netplan-enp0s8.link
[Match]
OriginalName=enp0s8
[Link]
WakeOnLan=off
MACAddress=52:54:00:6b:3c:59
Conteúdo do /run/systemd/network/10-netplan-enp0s8.network
[Match]
Name=enp0s8
[Network]
LinkLocalAddressing=ipv6
Address=192.168.10.15/24
Gateway=192.168.10.1
DNS=8.8.8.8
DNS=8.8.4.4
Como pode ver, é exatamente os dados que colocamos, mas dessa vez formatado para que o sistema entenda e possa cuidar de aplicar os dados.
Erro no version
Você pode encontrar um erro bem bobo, mas que pode lhe custar tempo e dor de cabeça, a tag version: 2 deve estar alinhada exatamente com a tag ethernets, caso esteja um espaço a mais ou a menos, quando for aplicar as configurações irá receber um erro parecido com esse:
Invalid YAML at /etc/netplan/01-my_network.yaml line 27 column 3: did not find expected key
Esse foi apenas um tutorial bem básico de como configurar a rede no Ubuntu 18.04 LTS.
Para mais detalhes não deixe de consultar as páginas de manual, vou deixar alguns links que podem ajudar bastante, há muitas opções que possam ser definidas com o Netplan, ele é bem completo e complexo no início.