LAN内のPCにはIPではなくホスト名でアクセスしようと思った話

イメージ・マジックの安藤です。
最近誕生日を迎えました。20代でいられるのもあとわずかです。

今回は内製のデスクトップアプリケーション(以下アプリ)の運用にあたってネットワーク周りでの気づきの話です。

前置き

弊社では、生産性の向上や属人性の排除といった観点で生産工程の一部を自動化しています。
諸々の言及は避けますが、そのシステムの一環として加工を早く済ませるためにアプリを介してPC間とPC加工機間で通信を行う仕組みがあります。 イメージ 画像は何かを表しているようでほとんど何も表していないイメージ図です。

アプリの目的は加工機にデータを送ることです。アプリは内部で簡易的なサーバをたてているため、接続先を指定すればアプリ間でエンドポイントを通じて通信を行うことができます。PC間で何やかんやをして素早くデータを加工機に送るという仕組みがアプリにあります。

何が起こったか

前述の前置きを踏まえて本題なのですが、ある日現場の方からデータの送信が遅いという話があり実際に現場に赴き調査することとしました。

データの送信が遅くなっている原因はアプリ間の通信ができていないことにありました。そこで、通信ができない理由を探ったところ以下のことが分かりました。
  • 各PCのプライベートIPの割り当てがDHCPで管理されている
  • アプリに設定されている接続先がIPで指定されている
  • アプリに設定されているIPが実際に接続したいIPと異なっていた
以上のことから、これは接続先を正しく指定すれば一応の解決ができるわけですが、PCのIPが変わるたびにこのようなことが起こってはたまらないため対策をすることにしました。

Windowsにホスト名解決をさせる

現場で働いている方々は、PCには詳しくないことが多いのでトラブルの際に解決しやすい方向に倒すほうがいいです。
今回はアプリに設定する接続先をホスト名に変えることで対処することにしました。WindowsではPC名がホスト名にあたります。コマンドプロンプトかPowerShellでhostnameコマンドでも確認できます。
名前解決でもIPが変わった際にキャッシュによって正しい解決ができない可能性が残りますが、そこはDNSキャッシュクリアのコマンドを直接指示するかそういった機能をアプリに組み込むことで今後対処できるかなと思います。

おまけ:PC間のpingがWindowsのFWで防がれている件

Windows10のプライベートネットワークはデフォルトでICMPがブロックされるようになっているため、ファイアウォールでこれを許可する必要がありました。「ファイルとプリンターの共有 (エコー要求 – ICMPv4 受信)」「ファイルとプリンターの共有 (エコー要求 – ICMPv6 受信)」が該当する項目でした。
原因の調査中に引っかかりファイアウォールを無効化すると通ったため気づきました。

おわりに

Webアプリでは問題の再現と解決はしやすいことが多いですが、デスクトップのアプリだとその要因が個々のPC環境に依存して解決しにくいことが多いのでこれを解決する仕組みを更に考えていきたいと思いました。