Tag Archives: Linux Tutorials

Linux Tutorials and Unix Similar multi-user operating systems based on the Linux kernel and essentially on GNU software. Like CentOS, Debian, Ubuntu Fedora.

Fix DNS /etc/resolv.conf systemd-resolved

DNS resolution of /etc/resolv.conf and systemd-resolved doesn’t work after upgrade Ubuntu or Linux Mint.

How to Fix DNS resolution using systemd-resolved and /etc/resolv.conf after upgrade

Fix DNS /etc/resolv.conf systemd-resolved

Symptom: Could not resolve hostname. Name or service not known

After upgrading Ubuntu or Linux Mint querying DNS resolution fails. It seems the DNS servers which get by DHCP doesn’t work anymore.

Name resolution

resolvconf is a set of script and hooks managing DNS resolution. The most noticeable experience for the user is that any changes made manually to /etc/resolv.conf will be lost as they will be overwritten the next time resolvconf is triggered. resolvconf uses DHCP client hooks, a Netplan NetworkManager plugin and /etc/network/interfaces to generate a list of nameservers and domain to put in /etc/resolv.conf.

DNS client configuration

Traditionally, the file /etc/resolv.conf was a static configuration file that rarely needed to be changed, also it automatically changed via DHCP client hooks. systemd-resolved handles nameserver configuration, and it should be interacted with through the systemd-resolve command. Netplan configures systemd-resolved to generate a list of nameservers and domains to write in /etc/resolv.conf, which is a symlink:

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Note. Ubuntu Server network interface configuration utility is ifup and it is configured by the file /etc/network/interfaces.

Ubuntu Gnome Desktop or Linux Mint Mate or Cinnamon the network interface configuration is by Netplan configure utility.

DNS Resolution /etc/resolv.conf systemd-resolved

The Netplan NetworkManager daemon attempts to make networking configuration and operation as painless and automatic as possible by managing the primary network connection and other network interfaces.

Netplan NetworkManager is also configured by Edit Connections in the graphical network connection utility. However, for network interfaces configured by DHCP it normally isn’t necessary to change any settings manually.

If you are considering to configure the DNS resolution manually, you must first change the NetworkManager.conf file.

$ sudo vi /etc/NetworkManager/NetworkManager.conf

default: NetworkManager will update /etc/resolv.conf to reflect the nameservers provided by currently active connections.

[main]
plugins=ifupdown,keyfile
# Set to default DNS processing mode.
dns=default

Add dns default key to the main section in the NetworkManager.conf file.

If the key is unspecified, default is used, unless /etc/resolv.conf is a symlink to /run/systemd/resolve/stub-resolv.conf, /run/systemd/resolve/resolv.conf, /lib/systemd/resolv.conf or /usr/lib/systemd/resolv.conf. In that case, systemd-resolved is chosen automatically.

Now restart network management daemon to apply changes.

$ sudo systemctl restart NetworkManager

After an os upgrade, the symlink may need to be recreated. Make symlink to /run/systemd/resolve/stub-resolv.conf

$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Restart systemd-resolved DNS Network Name Resolution manager.

$ sudo systemctl restart systemd-resolved.service

Verify DNS Resolution using systemd-resolved /etc/resolv.conf

Verify processing and also oprations of Network Name Resolution.

$ journalctl -b -u systemd-resolved

Check DNS status of systemd-resolved Network Name Resolution.

$ resolvectl status

Using resolvectl command to resolve domain names, IPv4 and IPv6 addresses.

$ resolvectl query google.com

Set DNS Resolver completely manually

If you want to configure the DNS resolution manually, you must first change the NetworkManager.conf file.

$ sudo vi /etc/NetworkManager/NetworkManager.conf

Change NetworkManager configuration dns key to none.

dns=none

Now is a good moment to verify the NetworkManager settings.

$ NetworkManager --print-config

Apply changes of network management daemon.

$ sudo systemctl reload NetworkManager

Unlink resolv.conf symlinked to /run/systemd/resolve/stub-resolv.conf.

$ sudo unlink /etc/resolv.conf

Stop and disable systemd-resolved Network Name Resolution manager.

$ sudo systemctl stop systemd-resolved.service
$ sudo systemctl disable systemd-resolved.service

Manually configuring the /etc/resolv.conf file

Create new or edit existing /etc/resolv.conf file.

$ sudo vi /etc/resolv.conf

Add the following lines in to the /etc/resolv.conf file.

nameserver 8.8.8.8
nameserver 1.1.1.1
nameserver 1.0.0.1
options edns0 trust-ad
search localdomain

Note. The number of name servers is limited to 3 nameserver.

Finaly verify DNS name resolution.

$ resolvectl query ntp.pool.org
ntp.pool.org: 216.40.34.37                     -- link: ens160

-- Information acquired via protocol DNS in 13.0ms.
-- Data is authenticated: no

$ resolvectl status

$ dig ns1.google.com

; <<>> DiG 9.16.48-Ubuntu <<>> ns1.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45042
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;ns1.google.com.                        IN      A

;; ANSWER SECTION:
ns1.google.com.         18466   IN      A       216.239.32.10

;; Query time: 6 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue May 28 12:53:01 CEST 2024
;; MSG SIZE  rcvd: 59

what does systemd-resolved do?

systemd-resolved is a system service that provides network name resolution to local applications. It also implements a caching and validating DNS/DNSSEC stub resolver, as well as an LLMNR and MulticastDNS resolver and responder. Local applications may submit network name resolution requests via three interfaces:

systemd-resolved maintains the /run/systemd/resolve/stub-resolv.conf file for compatibility with traditional Linux programs. This file may be symlinked from /etc/resolv.conf. This file lists the 127.0.0.53 DNS stub (see above) as the only DNS server. It also contains a list of search domains that are in use by systemd-resolved. The list of search domains is always kept up-to-date. Note that /run/systemd/resolve/stub-resolv.conf should not be used directly by applications, but only through a symlink from /etc/resolv.conf.

A static file /usr/lib/systemd/resolv.conf is provided that lists the 127.0.0.53 DNS stub as only DNS server. This file may be symlinked from /etc/resolv.conf in order to connect all local clients that bypass local DNS APIs to systemd-resolved. This file also does not contain any search domains.

more help get also the man pages
$ man systemd-resolved.service
$ man NetworkManager.conf
$ man NetworkManager
$ man resolv.conf
$ man resolvectl

Change Interface Static IP Address on Debian

This tutorial walks through the interface configuration to change the static IP address in the command line on Debian 12. In easy-to-implement steps show how to change a static IP address in the terminal, especially on a Debian server there is commonly no graphical user interface available. The following content provided the required commands for reference.

Change Interface Static IP Address on Debian

/etc/network/interfaces

By default, Debian creates the interface configuration using Dynamic Host Control Protocol to dynamically assigns an IP during deployment, with information such as IP address, netmask and gateway as well as the DNS server being obtained from a DHCP server.

Change Interface Static IP Address on Debian

Follow these steps to set up and configure a static interface IP address.

  1. Log in to remote server using ssh command.
  2. Backup the interfaces file with cp /etc/network/interfaces /root/
  3. Edit the /etc/network/interfaces file.
$ vi /etc/network/interfaces

This the static interfaces configuration file on Debian.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens192
iface ens192 inet static
  address 203.0.113.3
  netmask 255.255.255.0
  gateway 203.0.113.1
  dns-nameservers 1.1.1.1 1.0.0.1

The settings above is an example. Replace the IP addresses with your actual addresses. Make sure do not change the loopback network interface.

Add Second IP Address on Debian

If a second IP address is required on the network interface, an additional address can be assigned as follows, add to the end of the file.

auto ens192:1
allow-hotplug ens192:1
iface ens192:1 inet static
  address 10.0.0.3/24

Restart Networking Service

Restart the networking service so that the updated configuration can be applied with run these command.

$ systemctl restart networking

Change Interface Static IP Address using ip

For example, given the IP addresses used in the previous sections, if we want to change the IP address (to 203.0.113.3/24), we would run the following command.

$ ip addr add 203.0.113.3/24 dev ens192

Note. This command does not permanently change the configuration.

Change Static IP Address using ifconfig

On modern distributions, the “ifconfig” command has been completely deprecated and it is now advised to use the “ip” command.

However, you should still be able to use the “ifconfig” to change the interface IP address. First you must perform the next command.

$ apt install net-tools -y

For example, if you want to change the IP address (to 203.0.113.3/24), you would run the following command using ifconfig.

$ ifconfig ens192 203.0.113.3 netmask 255.255.255.0 up

Your second interface IP address will be added as follows.

$ ifconfig ens192:0 10.0.0.3 netmask 255.255.255.0 up

View interface IP Addresses

Use the “ip a” or “ip link” command to list your network interfaces. Note replace the interface name you want to configure, e.g. eth0 or wlp2s0 or ens192 or whatever it’s called.

$ ip a
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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:ac:28:ac:76:d2 brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.3/24 brd 203.0.113.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/24 scope global ens192:1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feac:76d2/64 scope link
       valid_lft forever preferred_lft forever

Conclusion

In this tutorial, we have learned how to configure a static interface IP address on Debian 12 “Bookworm” server. Your server is now configured to use static IP address. In a typical network, there are two ways to assign IP addresses. One is using DHCP and another is static IP assignment. DHCP or Dynamic Host Control Protocol dynamically assigns an IP address to an interface. It requires a DHCP server running in the network. In the static IP assignment, we manually assign the IP address, routing gateway, and DNS resolvers. Static IP assignment gives to more control on assigning an IP address and setting the DNS resolvers.