はじめに
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パラメタを、以下のように修正してください。
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が多数あるので、これで色々と捗りそうです。