IPv6
RaspberryPi
mDNS
Windows10
node-red

Node-REDをIPv6アドレスで接続できるようにして、Windows10 1803(mDNSサポート)のWebブラウザからhoge.localで接続できるようにする


はじめに

Node-RED v0.18.7 時点でのデフォルトでは、WebブラウザからNode-REDへIPv6なURL*で接続することができません。もちろん、Node-REDの設定を変更すればIPv6なURLでもアクセス可能です。

* IPv6なURLの例)https://[xxxx::xxxx:xxxx:...]:1880

* IPv4 https://192.168.x.x:1880

ところで、Windows10は、悪名高き Windows10 2018 Spring Update(1803)パッチを当てることでmDNS*が標準サポートされるようになりました。

* いままでは、Apple社のBonjourをWindowsにインストールして実現していました。

これで、ローカルネットワーク上のラズパイにWindowsからSSHやVNCやWebで接続する際*、IPアドレスが何かを調べる必要が無くなりました。

* 例えば、ssh pi@raspberrypi.local (raspberrypiの部分はホスト名です。)

わーい、わーい!とWebブラウザ(Edge,Chrome)でNode-REDに接続*してみたら、・・・接続エラーが出るではありませんか! 念のため、Firefoxで行ってみたら、・・・うまく行く!

http://raspberrypi.local:1880

(ちゃんと調べたわけではなく現象として)分かったことは、EdgeとChromeは、IPv6アドレス側を優先してHTTPサーバに接続要求を出す、ということです。そのため、Node-RED側ではIPv6接続で要求されたため拒否されてエラーになった模様です。

ということで本題であるNode-REDのIPv6設定の仕方を説明します。


Node-REDの設定を変更する


settings.jsを変更

何も考えずにラズパイにNode-REDを入れた場合、ホーム配下の.node-redフォルダにsettings.jsファイルがあります。これをテキストエディタで開き、20~30行あたりに注釈となっているuiHostパラメタを、以下のように修正してください。

uiHost: "::",



Node-REDを起動し、WebブラウザからIPv6アドレスで接続できればOKです。

例)http://[IPv6アドレス]:1880 ブラケット[]でアドレスを括ること!

これでwindowsのwebブラウザから、Node-REDに

http://ホスト名.local:ポート番号

で接続できるようになります。


おわりに

Chromeは、chrome://net-internals/#dns とURL欄に入力するとhostnameとAddressのキャッシュ内容が表示できます。これを見てmDNSが引いた値がIPv6アドレスになっていることを発見し解決できました。

家にはラズパイやmDNSをライブラリでサポートしているESP32が多数あるので、これで色々と捗りそうです。