/etc/netplan/. This setup ensures reliable Ethernet communication with specific devices by bypassing DHCP, which is critical for IoT gateways and industrial controllers that require consistent network endpoints.
Understanding Netplan Architecture
Netplan is the default network configuration utility for modern Ubuntu distributions, replacing older methods like editing /etc/network/interfaces. It uses a declarative approach where you define the desired state of your network interfaces in YAML files. The system then generates backend-specific configurations for either NetworkManager or systemd-networkd depending on your desktop or server environment.
For servers, the backend is typically systemd-networkd, which handles the low-level interface management. When you modify a Netplan configuration, the changes are not applied immediately to the running system. Instead, you must explicitly render the configuration into the backend format and then apply it. This two-step process prevents accidental network disconnections during development but requires careful attention to syntax errors, as YAML is sensitive to indentation and formatting.
Locating and Editing Configuration Files
The configuration files reside in the /etc/netplan/ directory. You will likely find a single file named something like 50-cloud-init.yaml or 01-netcfg.yaml. Before making changes, it is prudent to create a backup of the original file. You can do this using the command:
sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
Open the file with your preferred text editor, such as nano or vim. The structure generally follows a hierarchy starting with network, followed by version, ethernets, and finally the specific interface name. For example, if your Ethernet interface is named eth0, you will look for that key under ethernets.
Constructing the Static IP Configuration
To assign a hardcoded IP address, you need to disable DHCP and specify the address, netmask, gateway, and DNS servers. Below is a standard configuration snippet for an Ethernet interface. Replace eth0 with your actual interface name, which you can identify using the ip link command.
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.50/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
In this example, dhcp4: no ensures the system does not attempt to acquire an IP from a router. The addresses field takes the IP and CIDR notation (e.g., /24 for a 255.255.255.0 subnet). The routes section defines the default gateway, which is essential for any traffic leaving your local subnet. Without this, your device can communicate with local peers but cannot reach external networks.
Applying Changes and Verification
After saving the YAML file, you must test the syntax before applying it. Run the following command to dry-run the configuration:
sudo netplan try
This command applies the configuration temporarily and waits for five seconds. If you lose connectivity or encounter errors, the system automatically reverts to the previous working state. This safety feature is invaluable when configuring remote servers over SSH, as a typo could lock you out. If the configuration holds, you can permanently apply it using:
sudo netplan apply
Verify the new settings by checking the IP address with ip addr show eth0 and testing connectivity with ping 8.8.8.8. If you experience issues, check the journal logs for network-related errors using journalctl -u systemd-networkd.
Troubleshooting Common Issues
One frequent problem arises from incorrect indentation in the YAML file. Even a single space error can cause netplan generate to fail silently or produce invalid backend configs. Ensure that all keys under ethernets are aligned correctly. Another common issue is selecting the wrong interface name. Modern systems may rename interfaces dynamically; use ip link to confirm the persistent name before editing.
If you have multiple network interfaces, ensure that only the intended one has a static route defined to avoid routing conflicts. For more complex setups involving VLANs or bridges, the YAML structure expands slightly, but the core principles of disabling DHCP and defining static addresses remain the same. For related networking challenges, such as dealing with conflicting IP addresses in DHCP environments, see Users with Different IP Addresses on the Same PC in DHCP Networks. Additionally, if you are integrating this static server with other network segments, understanding how traffic routes through different routers is crucial, as detailed in Does Traffic Coming In From One Router Go Out Through The Same Router?.
Frequently Asked Questions
How do I revert to DHCP if the static IP fails?
You can quickly revert to DHCP by changing dhcp4: no back to dhcp4: true in the YAML file and running sudo netplan apply. Alternatively, if you used netplan try and lost connection, wait for the timeout to auto-revert. Always keep a backup of the original config file to restore easily.
What happens if I enter an incorrect IP address?
Netplan will accept the configuration syntactically, but you will lose network connectivity because the IP is not valid on the local subnet. Your device will not be able to ping the gateway or resolve DNS. To fix this, access the machine locally or via console and correct the YAML file.
Can I set multiple static IPs on one interface?
Yes, you can add additional entries to the addresses list. Each entry should be on a new line with proper indentation. This is useful for hosting multiple services on different virtual IPs while sharing the same physical Ethernet port.
Why does my server lose internet after setting a static IP?
This usually occurs because the default gateway or DNS servers were omitted from the configuration. Ensure that the routes and nameservers sections are present and correctly formatted. Without a gateway, traffic cannot leave the local subnet.
Is Netplan compatible with all Linux distributions?
Netplan is primarily designed for Ubuntu and Debian-based systems. Other distributions like RHEL or CentOS traditionally use NetworkManager or systemd-networkd directly without the Netplan abstraction layer. While you can install Netplan on other distros, it is not the standard configuration tool there.