As you may have noticed, the network configuration in Ubuntu 18.04 has changed. /etc/network/interfaces is not used anymore.
We’ll see how to configure network interfaces from command line in Ubuntu 18.04 and derivatives.
This is what we will learn:
- Netplan tool and configuration files.
- Modify configuration yaml file, a few examples.
- Apply modified network settings.
This article applies to network configuration through networkd, which is going to be specially usefull for command line setup.
If you are on a desktop environment, you probably have network-manager installed, so just config your network interfaces using the network graphic tool.
Netplan tool and configuration files
The tool we have to use now is “netplan”.
This tools uses a different network configuration files, the new files are under /etc/netplan, there you can find a “YAML” file.
If there are no files there, or you need to create them, you can generate them with:
netplan generate
Modifying configuration yaml file, a few examples
This is how my VM test config file /etc/netplan/01-netcfg.yaml looks like:
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: yes enp0s8: dhcp4: no dhcp6: no addresses: [192.168.56.23/24]
We can easily find the patern here.
Lets see 2 typical examples.
Static IP with gateway and DNS
In this example, IP:192.168.56.23 and netmask 255.255.255.0, gateway:192.168.56.1 and DNS servers:192.168.56.1 and 8.8.8.8.
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no dhcp6: no addresses: [192.168.56.23/24] gateway4: 192.168.56.1 nameservers: addresses: [192.168.56.1,8.8.8.8]
Dynamic IP – DHCP
Automatic config with DHCP:
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: yes
Applying modified network settings
There are two ways to do this: using netplan tool or restarting networkd daemon.
Using Netplan
sudo netplan apply
Restarting networkd daemon
systemctl status systemd-networkd
And how you use netplan to use dhcp for the IP but allow static DNS settings (IP and domain server order). ie the equivlent of:
nmcli connection modify ${ID} ipv4.dns ‘10.10.100.21 10.10.100.22 10.17.182.31’
nmcli connection modify ${ID} ipv4.ignore-auto-dns yes
nmcli connection modify ${ID} ipv4.dns-search ‘abc01.domain.com. abc02.domain.com.’
It looks like netplan is totally borked for this very common configuration…
Edit the config file with:
After that “netplan apply” and then you can check it with
The problem comes with “ignore-auto-dns yes”, looks that it’s still not possible using netplan.
I have put together a workaround, this has only been tested using NetworkManager as the renderer… This script will configure NetworkManager as the renderer on the active NIC and set the search domain order and DNS servers to supercede what was supplied by dhcp.
################## Start Netplan config (renderer: NetworkManager)
systemctl start NetworkManager
NIC=$(nmcli device show|grep GENERAL.DEVICE|head -n1|awk ‘{print $2}’)
#NetConn=$(nmcli device show|grep GENERAL.CONNECTION|head -n1|awk ‘{print $2}’)
#IP=$(nmcli device show|grep IP4.ADDRESS|head -n1|awk ‘{print $2}’)
#GATEWAY=$(nmcli device show|grep IP4.GATEWAY|head -n1|awk ‘{print $2}’)
#sed -i ‘s/renderer: networkd/renderer: NetworkManager/’ //etc/netplan/01-netcfg.yaml
##### create Netplan yaml config file
cat >/etc/netplan/01-netcfg.yaml <> /etc/netplan/01-netcfg.yaml
cat >>/etc/netplan/01-netcfg.yaml <<EOF
dhcp4: yes
nameservers:
search: [abc.domain.edu, def.domain.edu]
addresses: [10.10.11.22, 10.10.11.23]
EOF
#work around DNS resolv bug
systemctl stop systemd-resolved
sed -i 's/#DNS=/DNS=10.10.11.22 10.10.11.23/' /etc/systemd/resolved.conf
sed -i 's/#Domains=/Domains=abc.domain.edu def.domain.edu' /etc/systemd/resolved.conf
systemctl start systemd-resolved
systemctl restart NetworkManager
netplan apply
reboot
############### End Netplan Config