KUSONEKOの見る世界

インターネットから IPoE MAP-E ルータにPingをする

 複数のユーザがひとつのグローバルIPアドレスを共有するMAP-Eですが、インターネット側から自宅のルータに対してPingが出来るか気になっていました。

仕様的には、ICMPのIDフィールドに割り当てられたTCP/UDPのポート番号を入れれば、インターネット側から自宅ルータに届くはずですが、どうやればICMP IDを指定できるのか分からずにいました。

ひょんなことからNpingというツールがあることを知り、実験してみました。

ICMPの仕様

MAP-EでのICMPの仕様は以下の通りとなります。

https://datatracker.ietf.org/doc/html/draft-ietf-softwire-map-03

If a MAP CE receives an ICMP message having ICMP identifier field in ICMP header, NAT44 in the MAP CE must rewrite this field to a specific value assigned from the port-set. BR and other CEs must handle this field similar to the port number in the TCP/UDP header upon receiving the ICMP message with ICMP identifier field.

つまり、ICMP identifierフィールドもTCP/UDPポートと同じように扱いなさいということです。

Npingの使い方

以下のサイトからWindows用のバイナリファイル(nmap-7.92-win32.zip)をダウンロードします。

https://nmap.org/download

ZIPファイルを解凍し、nping.exeをコマンドプロンプトから実行します。

以下は、デスクトップに解凍した場合の実行例です。

> cd desktop\nmap-7.92
> nping.exe 1.1.1.1

ICMP IDを指定する場合は、—icmp-id オプションを入れ、その後に指定したいIDを10進数で入力します。

> nping.exe --icmp-id 65000 1.1.1.1

実験

事前に割り当てられているポート番号を調べておきます。
こちらの記事が参考になるかもしれません。

OCN IPoE (IPv4 over IPv6) をRTX810で試してみた | KUSONEKOの見る世界

OCNのIPoE(MAP-E)をYAMAHA RTX810で試してみました。通信は可能でしたが実用性は…

まずは、自宅ルータのインターネット側からのPingを拒否した設定で、Pingを打ってみます。

> nping.exe --icmp-id ***** 153.243.*.*

Starting Nping 0.7.92 ( https://nmap.org/nping ) at 2022-06-05 11:28 東京 (標準時)
SENT (0.2750s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=1] IP [ttl=64 id=18822 iplen=28 ]
SENT (1.2800s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=2] IP [ttl=64 id=18822 iplen=28 ]
SENT (2.2810s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=3] IP [ttl=64 id=18822 iplen=28 ]
SENT (3.2810s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=4] IP [ttl=64 id=18822 iplen=28 ]
SENT (4.2830s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=5] IP [ttl=64 id=18822 iplen=28 ]

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)
Nping done: 1 IP address pinged in 5.29 seconds

Pingの応答はありません。

次に、自宅ルータのインターネット側からのPingを許可する設定を入れてから、打ってみます。

> nping.exe --icmp-id ***** 153.243.*.*
Starting Nping 0.7.92 ( https://nmap.org/nping ) at 2022-06-05 11:28 東京 (標準時)
SENT (0.2730s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=1] IP [ttl=64 id=48657 iplen=28 ]
RCVD (0.2870s) ICMP [153.243.*.* > 10.11.122.219 Echo reply (type=0/code=0) id=***** seq=1] IP [ttl=55 id=48657 iplen=28 ]
SENT (1.2770s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=2] IP [ttl=64 id=48657 iplen=28 ]
RCVD (1.2860s) ICMP [153.243.*.* > 10.11.122.219 Echo reply (type=0/code=0) id=***** seq=2] IP [ttl=55 id=48657 iplen=28 ]
SENT (2.2780s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=3] IP [ttl=64 id=48657 iplen=28 ]
RCVD (2.2900s) ICMP [153.243.*.* > 10.11.122.219 Echo reply (type=0/code=0) id=***** seq=3] IP [ttl=55 id=48657 iplen=28 ]
SENT (3.2790s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=4] IP [ttl=64 id=48657 iplen=28 ]
RCVD (3.2980s) ICMP [153.243.*.* > 10.11.122.219 Echo reply (type=0/code=0) id=***** seq=4] IP [ttl=55 id=48657 iplen=28 ]
SENT (4.2870s) ICMP [10.11.122.219 > 153.243.*.* Echo request (type=8/code=0) id=***** seq=5] IP [ttl=64 id=48657 iplen=28 ]
RCVD (4.2960s) ICMP [153.243.*.* > 10.11.122.219 Echo reply (type=0/code=0) id=***** seq=5] IP [ttl=55 id=48657 iplen=28 ]

Max rtt: 12.000ms | Min rtt: 9.000ms | Avg rtt: 10.199ms
Raw packets sent: 5 (210B) | Rcvd: 5 (230B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 4.30 seconds

返ってくるようになりました。
もちろん、ICMP IDが間違っていれば、返ってきません。

ちなみに我が家のIXでは、以下のような設定でPingを許可します。

IX2215(config)# interface Tunnel0.0
IX2215(config-Tunnel0.0)# ip napt service icmp 192.168.0.254 none icmp any

最後に

インターネット側から、MAP-EルータへのPingは可能であることが分かりました。
これでインターネット側から、Pingによるルータ監視も可能になります。

しかし、インターネット側からPingする際、途中で通過するNATルータの仕様によっては、ICMP IDが変わってしまう場合もあるようで、確実に届くとは言えません。
(iPhoneのテザリングでは出来なかったため、ICMP IDが変わると思われる)

確実なのは、TCPやUDPのプロトコルで監視をすることだと思います。