MDNS: Difference between revisions

From Alpine Linux
(Use the automatically loaded /etc/unbound/unbound.conf.d/ folder to simplify the config)
(Add setup instructions for NetworkManager and dnsmasq)
 
Line 38: Line 38:
Where printer_name is the hostname given by avahi-browse.
Where printer_name is the hostname given by avahi-browse.


== Setup DNS resolver ==
== Setup Networkmanager ==


We now need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.
If you are already using networkmanager, you can leverage {{pkg|dnsmasq}} as your DNS server which can easily forward mDNS requests to another server.
 
Install the {{pkg|networkmanager-dnsmasq}} package:
 
{{cmd|doas apk add {{pkg|networkmanager-dnsmasq}}}}
 
Configure networkmanager to use dnsmasq as it's dns server by editing {{path|/etc/NetworkManager/NetworkManager.conf}}
 
  [main]
  dhcp=internal
  dns=dnsmasq
 
Then we need to tell dnsmasq to forward all mDNS queries to avahidns {{path|/etc/NetworkManager/dnsmasq.d/mdns.conf}}:
 
  # Forward queries for the "local" domain to 127.0.0.1 port 5354
  server=/local/127.0.0.1#5354
 
Restart networkmanager:
 
{{cmd|doas rc-service networkmanager restart}}
 
== Without NetworkManager ==
 
=== Setup DNS resolver ===
 
If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.


Install the programs:
Install the programs:
Line 69: Line 94:
doas rc-service unbound start}}
doas rc-service unbound start}}


== Setup DHCP client ==
=== Setup DHCP client ===


How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.
How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.


=== udhcpc ===
==== udhcpc ====


This is the DHCP client in busybox, and will work for both wired and wireless interfaces.  
This is the DHCP client in busybox, and will work for both wired and wireless interfaces.  
Line 96: Line 121:
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}
doas kill -USR1 $(cat  /run/udhcpc.wlan0.pid)}}


=== iwd ===
==== iwd ====


To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:
To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}:

Latest revision as of 15:51, 13 September 2024

Multicast DNS is a protocol that is normally used for the discovery of printers. It is implemented by Avahi, but more setup is needed for the regular name resolution to see the results.

Setup avahi

Install, enable and start avahi with:

doas apk add avahi doas rc-update add avahi-daemon doas rc-service avahi-daemon start

It should now be possible to browse results. To look for a printer, use:

doas apk add avahi-tools avahi-browse --resolve --terminate _ipp._tcp

Make note of the hostname, as we will use it afterwards.

Setup avahi2dns

Name resolution is implemented by musl, and it only supports DNS, so we have to map the avahi results to a regular DNS server. This is done by avahi2dns.

doas apk add avahi2dns

since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. This is done by default with /etc/conf.d/avahi2dns containing:

 command_args="-p 5354"

Enable and start avahi2dns with

doas rc-update add avahi2dns doas rc-service avahi2dns start

It should now be possible to use DNS to query the address of the printer.

drill -p 5354 @127.0.0.1 <printer_name>.local

Where printer_name is the hostname given by avahi-browse.

Setup Networkmanager

If you are already using networkmanager, you can leverage dnsmasq as your DNS server which can easily forward mDNS requests to another server.

Install the networkmanager-dnsmasq package:

doas apk add networkmanager-dnsmasq

Configure networkmanager to use dnsmasq as it's dns server by editing /etc/NetworkManager/NetworkManager.conf

 [main] 
 dhcp=internal
 dns=dnsmasq

Then we need to tell dnsmasq to forward all mDNS queries to avahidns /etc/NetworkManager/dnsmasq.d/mdns.conf:

 # Forward queries for the "local" domain to 127.0.0.1 port 5354
 server=/local/127.0.0.1#5354

Restart networkmanager:

doas rc-service networkmanager restart

Without NetworkManager

Setup DNS resolver

If you are not using NetworkManager, you will need to setup a DNS resolver that will forward request of .local domain to avahi2dns and handle other requests normally. There is more than one way to do it, but we document an option that is probably most convenient for a laptop: using the DHCP provided server for the regular DNS requests. We will use unbound as the server and resolvconf to inform unbound about the DHCP results.

Install the programs:

doas apk add openresolv unbound

Create /etc/resolvconf.conf:

 name_servers=127.0.0.1
 unbound_conf=/etc/unbound/unbound.conf.d/resolvconf.conf

This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound

Create /etc/unbound/unbound.conf.d/avahi-local.conf:

 forward-zone:
       name: "local"
       forward-addr: 127.0.0.1@5354
 server:
       do-not-query-localhost: no
       domain-insecure: "local"

This reads the information provided by resolvconf, but forwards .local requests to avahi2dns. We also need to disable dnssec for .local and tell unbound that it is OK to query localhost.

Enable and start unbound

doas rc-update add unbound doas rc-service unbound start

Setup DHCP client

How send the DHCP provided DNS to resolvconf depends on the DHCP client being used.

udhcpc

This is the DHCP client in busybox, and will work for both wired and wireless interfaces.

Create /etc/udhcpc/udhcpc.conf:

 RESOLV_CONF="/etc/udhcpc-resolv.conf"

Create /etc/udhcpc/post-bound/resolvconf:

 #!/bin/sh
 cat /etc/udhcpc-resolv.conf | resolvconf -a $interface

and make it executable

chmod 755 /etc/udhcpc/post-bound/resolvconf

An inconvenience of this setup is that udhcpc will not reconfigure the interface when connecting to other wifi networks. For that to happen one has to run

iwctl station wlan0 connect <network_name> doas kill -USR2 $(cat /run/udhcpc.wlan0.pid) doas kill -USR1 $(cat /run/udhcpc.wlan0.pid)

iwd

To avoid having to manually reconfigure the wifi interface, we can configure iwd to use DHCP internally and forward DNS server info to resolveconf. To do that create /etc/iwd/main.conf:

 [General]
 EnableNetworkConfiguration=True
 [Network]
 NameResolvingService=resolvconf

Test the setup

You should now be able to query for both the printer address and regular addresses with

drill @127.0.0.1 <printer_name>.local drill @127.0.0.1 alpinelinux.org

Your /etc/resolv.conf should also contain

 nameserver 127.0.0.1

Printer discovery should now be working.