Skip to content

Instantly share code, notes, and snippets.

@jimmydo
Last active July 25, 2024 15:11
Show Gist options
  • Save jimmydo/e4943950427234408a1aaa2d7beda8b6 to your computer and use it in GitHub Desktop.
Save jimmydo/e4943950427234408a1aaa2d7beda8b6 to your computer and use it in GitHub Desktop.
Enable multicast DNS on Ubuntu Server

Enabling multicast DNS (mDNS) on a server allows other hosts on the local network to address the server as <hostname>.local.

mDNS is disabled by default in Ubuntu Server:

$ resolvectl mdns
Global: no
Link 2 (eno1): no

mDNS setup involves two config changes:

Multicast DNS will be enabled on a link only if the per-link and the global setting is on.

First, enable mDNS globally in /etc/systemd/resolved.conf:

[Resolve]
...
MulticastDNS=yes
...

Next, we have to enable mDNS on the network interface. Ubuntu Server uses netplan to render network config files into /run/systemd/network. But netplan doesn't yet support mDNS configuration, so we need to augment the main network file with a drop-in file.

Determine the name of the main network file:

$ ls /run/systemd/network
10-netplan-eno1.network

Create the drop-in directory based on the name of the main network file:

$ mkdir /etc/systemd/network/10-netplan-eno1.network.d

Create the drop-in file at /etc/systemd/network/10-netplan-eno1.network.d/override.conf containing:

[Network]
MulticastDNS=yes

Reboot to apply the new configuration.

Verify that mDNS is enabled:

$ resolvectl mdns
Global: yes
Link 2 (eno1): yes
@roolebo
Copy link

roolebo commented May 28, 2024

@gkapellmann yeah, if network is managed by systemd-networkd, then you need to create a drop-in setting to enable mDNS explicitly as defined above. netplan status tells if an interface is managed by NetworkManager or networkd.

On one of my hosts (with ubuntu-desktop component):

●  4: wlp94s0 wifi UP (NetworkManager: wlp94s0)

On another host (without ubuntu-desktop component):

●  2: enp1s0 ethernet UP (networkd: enp1s0)

Note that I had to explicitly stop and disable systemd-networkd service after I installed ubuntu-desktop. So if systemd-networkd is active it's not necessarily means networkd manages the network.

On the first host managed by NetworkManager it's sufficient to only change /etc/systemd/resolved.conf and restart systemd-resolved.
On the second host there's a need to create a override.conf as described in the gist and restart both systemd-resolved and systemd-networkd. A reboot is not mandatory to apply the changes.

@gkapellmann
Copy link

Right! I had done this before and didnt work... beacuse I had a one letter typo in the override.conf directory... my bad!

But learning this NetworkManager vs networkd detail has been very helpful!

Thank you for yor time!

@PabloZarateGarcia
Copy link

PabloZarateGarcia commented Jul 25, 2024

I edited the resolved.conf like shown here and did:
sudo resolvectl mdns enp2s0 true
And thats it, just replace enp2s0 with your interface. No need to reboot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment