ip route command to ensure traffic is directed to the correct router. This behavior is intentional in modern Linux networking stacks to prevent accidental route overwrites from untrusted networks.
Understanding the Network Interface Configuration
In older versions of Ubuntu and other Debian-based distributions, network interfaces were managed through the /etc/network/interfaces file. However, modern Ubuntu releases utilize Netplan for configuration management. When you switch an interface from DHCP to a static IP address, you are essentially telling the system to take full control of that network segment. The critical difference lies in how the default gateway is handled. With DHCP, the server pushes a 0.0.0.0/0 route automatically upon lease acquisition. With a static configuration, this route is not generated unless you explicitly define it.
If you only specify the IP address and netmask without a gateway, the kernel creates a direct route to the local subnet but leaves the path to external networks undefined. Consequently, any attempt to reach outside the local LAN will fail because the system does not know where to send packets destined for the internet or other subnets. This is not a bug but a security feature that prevents misconfigured static IPs from hijacking network traffic via rogue DHCP servers.
Configuring Static Address with Netplan
The standard method for managing network settings in recent Ubuntu versions involves YAML files located in the /etc/netplan/ directory. You typically find a single file here, such as 01-netcfg.yaml or 50-cloud-init.yaml. To apply a static address while preserving the ability to reach the default gateway, you must edit this file to include the gateway4 (for IPv4) or routes section.
Here is a typical structure for a static Ethernet interface named eth0:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
routes:
- to: default
via: 192.168.1.1
In this example, the via parameter points to the router's IP address, which acts as the default gateway. Note that in newer Netplan versions, the gateway4 directive is deprecated in favor of the explicit routes block shown above. Always verify the syntax of your YAML file, as indentation errors are a common source of failure when applying these changes.
Applying the Changes
After saving the configuration file, you must apply the changes using the terminal. Run the following command to test the configuration for syntax errors:
sudo netplan try
This command applies the new settings and waits for a few seconds. If the connection remains stable, the changes become permanent. If the network drops or becomes unreachable, Netplan automatically reverts to the previous working state, preventing you from locking yourself out of the machine. If you prefer immediate application without the safety timeout, use sudo netplan apply.
Verifying the Routing Table
Once the configuration is applied, you should verify that the default route has been correctly installed in the kernel routing table. Use the ip route show command to inspect the active routes. You should see a line starting with default via followed by the IP address of your router.
$ ip route show
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
If the default via entry is missing, the system will still be able to communicate with devices on the local subnet but will fail to connect to external services like DNS servers or web hosts. In such cases, double-check your Netplan YAML file for typos in the gateway IP address or incorrect indentation levels. For more detailed troubleshooting on network interface behaviors, you might also refer to our guide on How do Ubuntu-server network interfaces work?.
Common Pitfalls and Diagnostics
One frequent mistake is assuming that setting a static IP automatically updates the DNS resolver. While Netplan allows you to specify nameservers, some cloud environments or specific network setups may override these settings via systemd-resolved. If you can ping the gateway but cannot resolve domain names, check the status of systemd-resolved using resolvectl status.
Another issue arises when multiple network interfaces are present. If you have both Wi-Fi and Ethernet connected, the system might prioritize one over the other based on metric values. Ensure that the metric for your static Ethernet interface is lower than other active interfaces if you intend for it to be the primary path for internet traffic. Lower metrics indicate higher priority in the routing decision process.
Additionally, verify that your firewall rules are not blocking outbound traffic. Although less common in default Ubuntu installations, custom iptables or ufw rules can sometimes interfere with newly configured routes. A simple test is to temporarily disable the firewall with sudo ufw disable and retry the connection. If connectivity returns, adjust your ufw rules to allow established connections and necessary outbound ports.
Frequently Asked Questions
Why does my static IP work locally but not for internet access?
This occurs because the default gateway route is missing from your routing table. Without a specified gateway, the kernel only knows how to reach devices on the same subnet. You must explicitly define the gateway IP in your Netplan configuration or add it manually using the ip route add default command.
Can I use ifconfig to set a static IP address?
While ifconfig can assign an IP address temporarily, it does not manage persistent routing tables or gateway configurations in modern Linux systems. Using ifconfig requires manual intervention to set up routes, which are lost upon reboot. It is recommended to use Netplan or /etc/network/interfaces for permanent static configurations.
What happens if I make a typo in the Netplan YAML file?
If you use netplan try, the system will revert to the previous configuration if you do not confirm the changes within the timeout period. This safety mechanism prevents you from losing network connectivity due to syntax errors. If you use netplan apply directly, a syntax error will cause the command to fail silently or print an error message, leaving your old configuration intact.
How do I remove a static IP and return to DHCP?
To revert to DHCP, edit your Netplan YAML file and change dhcp4: no to dhcp4: yes. Remove any lines related to addresses, nameservers, and routes under that interface. Then run sudo netplan apply to activate the DHCP client again.
Does changing the static IP affect existing SSH connections?
Yes, if you change the IP address of the interface used for SSH, your current session will likely drop because the underlying network endpoint has changed. New connections must target the new IP address. It is advisable to keep a console or out-of-band management access available when modifying network settings on remote servers.