使わなくても気を付けよう

ブログ不精なもので久しぶりの投稿となります。

仕事をしている中で、製品にとある不具合が起き、色々調べててなるほどなと思ったことがありましたので、それを記事にしていこうかと思います。

つい最近、出荷済みの製品1台に関して、「サーバに接続できない」という報告がありました……。


1. 通信構成の概要

本製品は、以下のような構成で閉域網ネットワーク内のサーバと通信する設計になっています。

  • 製品内部に通信基盤を搭載
  • 通信基盤にはLANポートが2つあり、そのうち1つを使用
  • 通信基盤のLAN1ポートを製品内のルータと接続
  • ルータには閉域網SIMを挿入
  • 閉域網を通じて外部サーバとWebSocket通信を行う

使用するIPアドレス(仮)

※以下のIPアドレスは全て解説用の仮アドレスです。

  • 通信基盤 LAN1(使用ポート)
     - IPアドレス:192.168.10.2
     - デフォルトゲートウェイ:192.168.10.1(ルータ)
     - DNSサーバ:192.168.10.1(ルータ)
  • 通信基盤 LAN2(未使用ポート)
     - IPアドレス:192.168.20.2
  • ルータ(ローカルIP):192.168.10.1
  • ルータ(閉域網IP/グローバル相当):10.100.200.1
  • 相手先サーバ(閉域網内):10.100.200.100

2. 正常な接続構成の図解

以下は、意図された正常な通信構成を示した図です。

図1:正常な通信構成(※図は下部に添付)

+----------------------------+      LAN1 (192.168.10.2)
| 通信基盤 |--------------+
| (WebSocket Client)| |
+----------------------------+ |
v
+-------------------------+
| ルータ |
| - ローカルIP: |
| 192.168.10.1 |
| - 閉域網IP: |
| 10.100.200.1 |
+-------------------------+
|
v
閉域網(10.100.200.0/24)
|
v
+-----------------------------+
| 相手先サーバ |
| IP: 10.100.200.100 |
+-----------------------------+

この構成では、通信基盤がルータのローカルIP(192.168.10.1)をデフォルトゲートウェイおよびDNSサーバとして使用し、ルータを経由して閉域網内のサーバに接続します。


3. 発生した問題と原因の分析

結論から書くと、接続できなかった原因は、通信基盤の未使用ポート(LAN2)に対する誤ったIPアドレス設定によるものでした。

と、言いますのも、不具合について伝えられた際に、「出荷段階で誤ってLAN2ポートに接続先サーバのIPアドレス(10.100.200.100)を設定してしまっている」ということも伝えられていたのです。なので、真っ先にそれが原因ではないかと疑いました

具体的には、LAN2に相手先サーバと同じIPアドレス(10.100.200.100)を設定してしまい、それによりループバックが発生してしまっていました。

※ループバックとは、通信先のIPアドレスが自機内のインターフェースに設定されている場合に、パケットが外部に出ず内部で処理されてしまう現象です。

このため、通信基盤は本来ルータに送るべきパケットを内部で完結させてしまい、パケットがルータを経由して外部へ出ていかない状態となっていたのです。


4. まとめ

本件では、未使用ポートへの誤設定により、ループバックが発生し、通信が成立しないという現象が発生しました。物理接続に問題がない場合でも、IP設定の整合性とネットワークインターフェースの明確な管理が重要であることを再確認する事例となりました。

ちなみに、ついでに調べたのですが、仮にLAN2ポートに設定したIPアドレスが相手サーバと同一ネットワークに属する別の値(例:10.100.200.200)だった場合も失敗するようです。LAN2ポートのネットワーク内に相手サーバがあると判断されて、デフォルトゲートウェイを通して外部ネットワークとの通信を行おうとしないんですね。

製品に不具合があったのは問題ですが、調べてて「ネットワークってちょっと面白いな」と思いました。