Zeroconf with Zyxel P-660HN-F1Z
There is an option to purchase a discounted and officially sanctioned Zyxel P-660HN-F1Z when signing up for an ADSL account with Sunrise. Recently I started to play around with Bonjour on MacOS X and Avahi on Linux to better understand the whole mechanism.
However I did not get very far with the whole thing as the machines were not able to see each other's multicast traffic when talking to each other. Sniffing the network showed that the mDNS requests were sent on 188.8.131.52 port 5353 but no response was received. I thought there was a configuration issue with Avahi on my debian host but it turned out to be a much more sinister problem. Once I had to link the MacOS X host with the debian box directly over a cross-cable and to my surprise mDNS requests started to work magically. Digging deeper I found the culprit, the Zyxel P-660HN-F1Z router. Well hidden in one of the Advanced configuration menus is an option to switch on multicast (IGMP). Below is a visual guide how to make Zeroconf work either over the Web Interface or Telnet.
By default telnet is enabled on the router meaning the configuration can be done on the command line as well. Here is how.
Telnet to the router:
$ telnet 192.168.x.x Trying 192.168.x.x... Connected to 192.168.x.x. Escape character is '^]'. Password: ******** Copyright (c) 1994 - 2011 ZyXEL Communications Corp. ras>
Firstly display the current configuraton:
ras> lan display Active: Yes Interface: enif0 IP Address: 192.168.x.x. Subnet Mask: 255.255.255.0 RIP Direction: None RIP Version: RIP-1 Multicast: None Protocol Filter Set: Incoming: 0 0 0 0 Outgoing: 0 0 0 0 Device Filter Set: Incoming: 0 0 0 0 Outgoing: 0 0 0 0
Then we have to set the interface to be affected by the change:
ras> lan index 1 enif0 is selected
Set the interface to igmpv3:
ras> lan multicast igmpv3
Confirm settings once more:
ras> lan display Active: Yes Interface: enif0 IP Address: 192.168.x.x. Subnet Mask: 255.255.255.0 RIP Direction: None RIP Version: RIP-1 Multicast: IGMP-v3 Protocol Filter Set: Incoming: 0 0 0 0 Outgoing: 0 0 0 0 Device Filter Set: Incoming: 0 0 0 0 Outgoing: 0 0 0 0
Under Linux use the avahi-browse command which should show entries of all the Zeroconf enabled hosts on the local network. The -l option in the command below will exclude the host the command is issued on.
$ avahi-browse --all -l -t + wlan0 IPv4 host-b [00:xx:xx:xx:xx:a4] Workstation local + wlan0 IPv4 host-b Remote Disk Management local + wlan0 IPv4 saned _sane-port._tcp local + wlan0 IPv4 host-a SSH Remote Terminal local + wlan0 IPv4 host-a SFTP File Transfer local + wlan0 IPv4 host-a VNC Remote Access local + wlan0 IPv4 SSH on host-b SSH Remote Terminal local + wlan0 IPv4 host-b Apple TimeMachine local + wlan0 IPv4 host-b _device-info._tcp local + wlan0 IPv4 AirPrint PDF @ host-b Internet Printer local + wlan0 IPv4 AirPrint Samsung_ML-1410 @ host-b Internet Printer local + wlan0 IPv4 My Music on host-b iTunes Audio Access local + wlan0 IPv4 host-b Apple File Sharing local + wlan0 IPv4 My Music on host-b _rsp._tcp local + wlan0 IPv4 My Music on host-b Web Site local