netplan, networking in Ubuntu 17.10, Artful Ardvark
netplan is the new Yet Another Markup Language (YAML) network configuration abstraction for various backends that replaces ifupdown with the Ubuntu 17.10,codename: Artful Ardvark release.
It is particularly useful to understand how netplan works if you arte configuring servers.
During boot, the netplan network renderer, systemd networkd runs which reads the /etc/netplan/*.yaml files and uses /lib/netplan/generate to generate backend network configuration files from the YAML definitions in /run/systemd/network/*.
By default the renderer is set to systemd networkd but it can be set to NetworkManager which is typical of laptops and mobile devices.
The /etc/network/interfaces file
The /etc/network/interfaces file is essentially redundant as there is no ifupdown tools to configure network interfaces from it. The file should look like this.
ubuntu@ub-17-10:~$ cat /etc/network/interfaces # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) # Generated by debian-installer. # The loopback interface auto lo iface lo inet loopback
The /etc/netplan/01-netcfg.yaml file
The /etc/netplan/01-netcfg.yaml file uses the YAML version 2 syntax. Here is a basic configuration which uses Dynamic Host Configuration Protocol (DHCP) to configure the interfaces.
ubuntu@ub-17-10:~$ cat /etc/netplan/01-netcfg.yaml # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: enp0s25: dhcp4: true dhcp6: true ubuntu@ub-17-10:~$ sudo netplan apply ubuntu@ub-17-10:~$ ip address list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:74:7a:3c brd ff:ff:ff:ff:ff:ff inet 192.168.89.3/24 brd 192.168.89.255 scope global dynamic enp0s25 valid_lft 570sec preferred_lft 570sec inet6 2a92:168:89::a00:27ff:fe74:7a3c/64 scope global valid_lft 570sec preferred_lft 570sec inet6 fe80::a00:27ff:fe74:7a3c/64 scope link valid_lft forever preferred_lft forever
A fixed IP address
A typical server task is to set a fixed IP address with a default gateway and a DNS Server. Here is an example.
ubuntu@ub-17-10:~$ sudo vi /etc/netplan/01-netcfg.yaml # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: enp0s25: addresses: ['192.168.89.220/24','2a92:168:89::220/64'] gateway4: 192.168.89.1 gateway6: 2a92:168:89::1 nameservers: search: ['netlabsug.tst'] addresses: ['192.168.89.201','8.8.8.8'] ubuntu@ub-17-10:~$ sudo netplan apply ubuntu@ub-17-10:~$ ip address list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:74:7a:3c brd ff:ff:ff:ff:ff:ff inet 192.168.89.220/24 brd 192.168.89.255 scope global enp0s25 valid_lft forever preferred_lft forever inet6 2a92:168:89::220/64 scope global valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe74:7a3c/64 scope link valid_lft forever preferred_lft forever
A more complex example
netplan is capable of quite complex configurations. Take this example where the interface enp0s25 is setup as a Virtual Local Area Network (VLAN) trunk with two VLANs, vlan100 and vlan200. Each of these VLANs are connected to internal bridges br100 and br200 which could be used for connecting Virtual Machines (VM) or to other physical interfaces, in the example below enp3s0f0 and enp3s0f1 become part of br100 and vlan100 while enp4s0f0 and enp4s0f1 become part of br200 and vlan200.
ubuntu@ub-17-10:~$ cat /etc/netplan/01-netcfg.yaml # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: enp0s25: dhcp4: false dhcp6: false enp3s0f0: dhcp4: false dhcp6: false enp3s0f1: dhcp4: false dhcp6: false enp4s0f0: dhcp4: false dhcp6: false enp4s0f1: dhcp4: false dhcp6: false vlans: vlan100: id: 100 link: enp0s25 vlan200: id: 200 link: enp0s25 bridges: br100: addresses: ['199.9.9.100/24','2a99:9:9::100/64'] interfaces: ['vlan100', 'enp3s0f0', 'enp3s0f1'] parameters: forward-delay: 9 hello-time: 2 max-age: 12 stp: false br200: addresses: ['192.168.92.200/24','2a92:168:92::200/64'] gateway4: 192.168.92.1 gateway6: 2a92:168:92::1 nameservers: search: ['netlabsug.tst'] addresses: ['192.168.92.201', '8.8.8.8'] interfaces: ['vlan200', 'enp4s0f0', 'enp4s0f1'] parameters: forward-delay: 9 hello-time: 2 max-age: 12 stp: false ubuntu@ub-17-10:~$ sudo netplan apply ubuntu@ub-17-10:~$ ip address list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:1c:c0:35:a5:fb brd ff:ff:ff:ff:ff:ff inet6 fe80::21c:c0ff:fe35:a5fb/64 scope link valid_lft forever preferred_lft forever 3: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 state UP group default qlen 1000 link/ether 00:15:17:76:82:94 brd ff:ff:ff:ff:ff:ff 4: enp3s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 state UP group default qlen 1000 link/ether 00:15:17:76:82:95 brd ff:ff:ff:ff:ff:ff 5: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br200 state UP group default qlen 1000 link/ether 00:15:17:76:82:96 brd ff:ff:ff:ff:ff:ff 6: enp4s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br200 state UP group default qlen 1000 link/ether 00:15:17:76:82:97 brd ff:ff:ff:ff:ff:ff 7: br100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 0e:c7:b2:c0:61:85 brd ff:ff:ff:ff:ff:ff inet 199.9.9.100/24 brd 199.9.9.255 scope global br100 valid_lft forever preferred_lft forever inet6 2a99:9:9::100/64 scope global valid_lft forever preferred_lft forever inet6 fe80::cc7:b2ff:fec0:6185/64 scope link valid_lft forever preferred_lft forever 8: br200: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether ca:47:95:0d:e5:35 brd ff:ff:ff:ff:ff:ff inet 192.168.92.200/24 brd 192.168.92.255 scope global br200 valid_lft forever preferred_lft forever inet6 2a92:168:92::200/64 scope global valid_lft forever preferred_lft forever inet6 fe80::c847:95ff:fe0d:e535/64 scope link valid_lft forever preferred_lft forever 9: vlan100@enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br100 state UP group default qlen 1000 link/ether 00:1c:c0:35:a5:fb brd ff:ff:ff:ff:ff:ff inet6 fe80::21c:c0ff:fe35:a5fb/64 scope link valid_lft forever preferred_lft forever 10: vlan200@enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br200 state UP group default qlen 1000 link/ether 00:1c:c0:35:a5:fb brd ff:ff:ff:ff:ff:ff inet6 fe80::21c:c0ff:fe35:a5fb/64 scope link valid_lft forever preferred_lft forever