外出先から自宅のNASを開きたい、ゲーム機の通信種別を改善したい、自宅のサーバーに外から届くようにしたい。ルーターで転送を設定したのに動かないとき、切り分けに要るのは「どこまで届いているか」の確認で、設定画面を眺め直すことではない。SockettaはTCP接続の結果を3つの表示にまとめ、確認する場所は2つある。
01 / STATESTCP接続で分かる3つの状態
SockettaのポートスキャンはTCP接続方式で、指定したホストのポートへ実際に接続を試み、結果を便宜上Open・Closed・Filteredの3表示にまとめる。TCPのエラー全部を厳密に分けたものではない。一般的なApp Storeアプリでは任意のTCPパケットを組み立てるraw socket型のSYNスキャンは難しいが、ICMP Echoによるpingは実装方法が別で、iOSで一律に不可能ではない。
| 表示 | 相手の返事 | 意味 |
|---|---|---|
| Open | 接続が成立した(SYN に SYN/ACK が返り、ACK で確立) | そのポートで何かが待ち受けている。目的のサービスかどうかは別に確かめる。 |
| Closed | 接続の失敗が確定した(多くは RST による拒否) | 接続要求に明示的な拒否が返った。対象のホスト自身が拒否した場合が多いが、ルーターやファイアウォールなど途中の装置が返した可能性もある。 |
| Filtered | 待ち時間内に何も返らなかった | 待ち時間内に結果が出なかったという観測で、ファイアウォールが捨てたと確定したわけではない。黙って捨てられた、機器がいない、経路がない、応答が遅い、のどれでも同じ表示。3つのうち一番情報が少ない結果。 |
待ち時間は既定で2.0秒、0.5〜10.0秒の範囲で変えられる。遠い相手や混んだ回線ではFilteredが増えるので、外からの確認では5秒程度に伸ばす。5秒は目安で、Filteredなら時間を変えて再試行する。同時接続は最大50本。ポート欄は 22,80,443 のような列挙と 1-1024 のような範囲を混ぜて書ける。
02 / TWO PLACES「開いている」には2つの場所がある
図は192.168.1.0/24の構成例。実際のアドレスとプレフィックス長はiPhoneとルーターの設定で見る。
ルーターの転送設定を確かめるなら見るべきはBの経路で、確認する側は家の外にいる必要がある。iPhoneはWi-Fiをオフにしてモバイル回線につなぐだけで「外の端末」になる。家の中からWAN側のグローバルIPへつないでも、ルーターがその折り返し(ヘアピンNAT)に対応していなければ通らず、転送設定の良し悪しとは無関係に失敗する。ルーターの中では、アドレスを書き換えるNAT、外からの接続を機器へ渡すポート転送、通信を通す・捨てる・拒否するファイアウォールは別の機能で、管理画面で1つの操作にまとまる機種も、別々に設定する機種もある。
03 / PROCEDURELAN内、次に外から
LAN内から機器のポートを確かめる
- Scannerタブで Mode を Port にする。
- Host / IP に機器のアドレス(例
192.168.1.57)、ポート欄に番号(例5000)を入れる。番号が分からなければ1-1024,5000,8080のように範囲で当たる。 - Start Port Scan。Open ならサービスは待ち受けている。Closed なら対象か途中の装置が拒否している。サービスの停止、番号違い、機器側のファイアウォール、ルーター側の拒否を順に見る。Filtered なら機器側のファイアウォール、アドレス違い、別のネットワークを疑う。
- 結果の行を長押しして Copy Host:Port でコピーし、IPアドレスを転送設定の「転送先IP」、ポート番号を「内部ポート」に入れる。欄の名前と形式は機種で異なる。転送先のIPはDHCP予約か固定にしないと、再起動後に別の端末へ変わることがある。
外からルーター越しに届くかを確かめる
- ルーターの管理画面で転送(ポートフォワード/ポート変換)を設定する。外部ポート
5000→ 転送先192.168.1.57の5000、プロトコルはTCP。 - 同じ管理画面の「WAN側IPアドレス」を控える。私用アドレスなら上流に別のルーターか事業者側のNATがあり、100.64.0.0/10や管理できない事業者側のNATなら利用者側の転送だけでは通らない(後述)。
- iPhoneの設定でWi-Fiをオフにし、モバイル回線で通信している状態にする。
- Scannerタブの Port で Host に控えたWAN側IPアドレス、ポート欄に
5000を入れ、タイムアウトを5秒に伸ばして開始。Open なら、そのグローバルIPのポートにTCP接続できている。目的のNASやサーバーへ転送されたかは、サービスの画面、TLS証明書、アプリの応答、転送先のログで別に確かめる。Filtered は待ち時間内に結果が出なかったという観測で、ルーター、上位のNAT、転送先、経路、パケット損失、タイムアウトの値を順に見る。
Bで Closed が返る場合は、経路上のどこかが明示的に拒否している。転送先に待ち受けがない場合のほか、ルーター自身、上位のNAT、ファイアウォールが拒否した可能性もある。Aの結果、ルーターと転送先のログを突き合わせる。
04 / BLOCKERS設定が正しくても通らない構成
| WAN側IPアドレス・回線の状態 | 何が起きているか | 取れる手 |
|---|---|---|
| 100.64.0.0〜100.127.255.255 | 事業者が複数の契約者で1つのグローバルIPを共有している(CGNAT、RFC 6598の共有アドレス)。外からの接続は契約者に振り分けられない。 | 固定IPや個別のグローバルIPを付与するプランの有無を事業者に確認する。 |
| 192.168.0.0/16 / 10.0.0.0/8 / 172.16.0.0/12 | 上流に別のルーターかNAT装置がある。家庭内の二重ルーター(ONU一体型のホームゲートウェイの下に自前のルーターを置いた構成など)のほか、集合住宅の共用設備や事業者側の変換もある。 | 上位のルーターを自分で管理できるなら、上位側にも転送を設定するか、手前のルーターをブリッジ(アクセスポイント)モードにして1段にする。共用設備や事業者側の変換は利用者側では設定できない。 |
| IPv4 over IPv6(DS-Lite) | IPv4の変換を事業者側の装置が行う方式で、利用者側でポートの転送を設定する余地がない。 | IPv6で直接届く経路を使うか、PPPoEとの併用や方式変更を事業者に確認する。 |
| IPv4 over IPv6(MAP-E) | グローバルIPを複数の契約者で分け合い、契約者ごとに使えるポートの集合を割り当てる方式。割当は複数の離れた範囲になることがあり、割当の外の番号は外から使えない。80や443は割当に入らないことが多い。 | 割当の表示方法とポート転送への対応はルーターと事業者で異なる。管理画面で自分の割当を確認し、その中の番号を外部ポートにする。 |
| UDPのポート | TCP接続方式では判定できない。ゲームやVPN(WireGuardなど)の多くはUDP。ゲーム機のNATタイプはUDPの振る舞いやUPnPが関係し、TCPのポートスキャンだけでは決まらない。 | Sockettaの UDP/TCP タブから送信して、返事があるプロトコルなら応答で判定する。返事のない設計のものは相手側のログで見る。 |
なお、多くの家庭用ルーターはWAN側からの管理画面アクセスが初期状態で無効だが、機種や設定で異なり、ICMP Echo(ping)への応答は別の設定項目にある。転送していないポートがFilteredでも異常とは限らない。転送対象に設定したポートの結果は転送の可否を切り分ける観測値になるが、Filteredだけではどの装置が捨てたかは分からない。
試験のために開けた転送は閉じる。管理画面の80・443、Telnetの23、リモートデスクトップの3389、VNCの5900は管理・遠隔操作によく使われる番号で、外へ向けて開けたままにしない。Sockettaの自動診断はLAN側からルーターのアドレスの22・23・53・80・443・445・3389・5900・8080・8443を当たり、23、80・8080、3389、5900で接続が成立すると警告する。番号だけでは実際のサービスや応答した機器は分からないので、警告の後にサービス、転送先、認証方式を確かめる。スキャンは自分が管理する機器・ネットワークに限る。
LAN内からも、外からも同じ手順で
ScannerタブのPortモードにホストとポートを入れて開始。Open・Closed・Filteredの3色で結果が並び、Host:Port形式でコピーできます。
App Store からダウンロード無料ダウンロード・アカウント不要・計測データは端末内に保存。スキャンは自分が管理するネットワークに限る。