複数インタフェースのサーバでHomebridgeがうまく動かないときの対処

TL;DR

config.json の一番上の階層に、mdnsプロパティを作って、HomebridgeにつなげるiOSバイスが居るネットワークに繋がっているインターフェースに割りあたっているIPアドレスを指定してやる。

{
  "bridge": {
    "name": "Homebridge",
    "username": "CC:22:33:44:55:66",
    "port": 51826,
    "pin": "031-45-155"
  },
  "mdns": {
    "interface": "192.168.50.123"   ←ココ
  },
  ....
}

詳細

RaspberryPiで、VPNサーバとHomebridgeをセットアップしようとしたところ、eth0とwlan0を両方使うと、wlan0側のネットワークからHomebridgeが見えなくなる現象が発生した。

avahi-browse -a でデバイスのアドバタイズがどうなっているのかを検索すると、Homebridgeのデバイスはeth0にしか流れていない。

どうやらデフォルトだと、先頭(?)のネットワークにしかmDNSのアドバタイズをしてくれないようで、eth0側にしか情報が流れていないらしい。

解決法

ソースを掘ると、配信はmulticast-dnsモジュールでやっている事がわかる。

multicast-dnsのコードを見ると、UDPのリスンはココでやっているので、interfaceオプションにインターフェースを示すIPを与えればいいことがわかる。

ここにオプションを渡すための変更が、このコミットで行われていたので、それに従って、config.jsonに設定を入れることで、うまく接続できるようになった。