MDNS: Difference between revisions
m (→Setup avahi: doas is the preferred elevation method in Alpine. Used cmd template.) |
m (→Setup avahi2dns: Use various templates, doas instead of sudo, and minor grammar improvements.) |
||
Line 18: | Line 18: | ||
== Setup avahi2dns == | == Setup avahi2dns == | ||
Name resolution is implemented by musl, and it only supports | 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. | ||
{{cmd|git clone https://github.com/LouisBrunner/avahi2dns | |||
cd avahi2dns | |||
go build | |||
doas cp avahi2dns /usr/bin | |||
doas cp openrc/avahi2dns /etc/init.d}} | |||
since we will want a full | since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. Do that by creating {{path|/etc/conf.d/avahi2dns}} containing: | ||
command_args="-p 5354" | command_args="-p 5354" | ||
Line 32: | Line 32: | ||
Enable and start avahi2dns with | Enable and start avahi2dns with | ||
{{cmd|doas rc-update add avahi-daemon | |||
doas rc-service avahi-daemon start}} | |||
It should now be possible to use | It should now be possible to use DNS to query the address of the printer. | ||
{{cmd|drill -p 5354 @127.0.0.1 <printer_name>.local}} | |||
Where printer_name is the hostname given by avahi-browse. | Where printer_name is the hostname given by avahi-browse. | ||
We now need to setup a | 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 and iwd to inform unbound about the DHCP results. | ||
Install the programs: | Install the programs: | ||
{{cmd|doas apk add openresolv unbound iwd}} | |||
Create /etc/resolvconf.conf: | Create {{path|/etc/resolvconf.conf}}: | ||
name_servers=127.0.0.1 | name_servers=127.0.0.1 | ||
unbound_conf=/etc/unbound-resolvconf.conf | unbound_conf=/etc/unbound-resolvconf.conf | ||
This tells resolveconf to use a local nameserver and pass the | This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound | ||
Create /etc/unbound/unbound.conf: | Create {{path|/etc/unbound/unbound.conf}}: | ||
forward-zone: | forward-zone: | ||
Line 66: | Line 66: | ||
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. | 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. | ||
And the last config charge is to have iwd forward | And the last config charge is to have iwd forward DNS server info to resolveconf. To do that create {{path|/etc/iwd/main.conf}}: | ||
[Network] | [Network] | ||
Line 73: | Line 73: | ||
Enable and start unbound | Enable and start unbound | ||
{{cmd|doas rc-update add unbound | |||
doas rc-service unbound}} | |||
Reconnect to your wifi. You should now be able to query for both the printer address and regular addresses with | Reconnect to your wifi. You should now be able to query for both the printer address and regular addresses with | ||
{{cmd|drill @127.0.0.1 <printer_name>.local | |||
drill @127.0.0.1 alpinelinux.org}} | |||
Your /etc/resolv.conf should also contain | Your {{path|/etc/resolv.conf}} should also contain | ||
nameserver 127.0.0.1 | nameserver 127.0.0.1 | ||
Printer discovery should now be working. |
Revision as of 08:14, 19 December 2023
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.
git clone https://github.com/LouisBrunner/avahi2dns cd avahi2dns go build doas cp avahi2dns /usr/bin doas cp openrc/avahi2dns /etc/init.d
since we will want a full DNS server running at port 53, we need to configure avahi2dns to use another port. Do that by creating /etc/conf.d/avahi2dns containing:
command_args="-p 5354"
Enable and start avahi2dns with
doas rc-update add avahi-daemon doas rc-service avahi-daemon 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.
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 and iwd to inform unbound about the DHCP results.
Install the programs:
doas apk add openresolv unbound iwd
Create /etc/resolvconf.conf:
name_servers=127.0.0.1 unbound_conf=/etc/unbound-resolvconf.conf
This tells resolveconf to use a local nameserver and pass the DHCP provided DNS server to unbound
Create /etc/unbound/unbound.conf:
forward-zone: name: "local" forward-addr: 127.0.0.1@5354 include: "/etc/unbound-resolvconf.conf" 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.
And the last config charge is to have iwd forward DNS server info to resolveconf. To do that create /etc/iwd/main.conf:
[Network] NameResolvingService=resolvconf
Enable and start unbound
doas rc-update add unbound doas rc-service unbound
Reconnect to your wifi. 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.