ルーターは 100.72 で始まる WAN アドレスを報告し、動的 DNS 名は別のパブリックアドレスに解決され、そのルーター上の VPN サーバーは外部からのハンドシェイクを一度も完了しません。ポート転送は設定済みで、サービスは動作しており、LAN からのテストは今も通ります。ルーターのログにエラーのようなものはありません。この組み合わせはキャリアグレード NAT であり、ISP が保持するアドレス上でポートを開けるファイアウォール規則はありません。

共有アドレスを確認するのに二分かかり、一週間分の設定変更を防げます。

キャリア NAT を示す兆候

ルーターの状態ページにある WAN アドレスを、外部の検索が報告するアドレスと比べます。100.64.0.0/10 内の WAN アドレスが通常の兆候で、プライベート範囲 10/8、172.16/12、192.168/16 も同じ意味です。traceroute で同じパブリックホップが繰り返し表示される場合や、早い段階のホップがプライベートアドレスで応答する場合は、ルーターとインターネットの間にもう一つ変換器があります。ISP によっては割り当てアドレスを顧客ポータルにしか載せないため、その値も traceroute と一緒に書き出してください。

プロトコルやポートを変えても役に立ちません。問題は閉じたポートではなく、内向きの到達性だからです。

転送と動的 DNS で解決できない理由

ポート転送規則はルーターの WAN インターフェース上のポートを対応付けますが、内向きのトラフィックはそのインターフェースに決して届きません。ISP が先に変換し、自社のテーブルが許すものだけを転送するからです。共有アドレスを動的 DNS に公開すると、多くの加入者が使う ISP のゲートウェイへクライアントを向けることになり、名前は解決してもハンドシェイクは失敗し続けます。ヘアピンテストが成功するのは、ルーターが内側から自分の規則に応答するためで、UPnP にもまったく同じ盲点があります。

クライアントを再設定しても役に立ちません。失敗はクライアント設定が読まれる前に起きるからです。

明示的なルートを備えた VPS 経由の中継

手前にパブリックアドレスを置きます。トラフィックを運べる最小の VPS を借りて、家庭のルーターからそこへ外向きに接続させます。家庭ネットワークからの外向き UDP はキャリア NAT を通過するため、トンネルは内側から確立し、VPS が到達可能な端点になります。家庭側は固定トンネルアドレスを持つクライアントになり、サーバーではありません。

VPS 側では、サーバーがどのピアが家庭のサブネットを持つか分かるようにクライアント固有のディレクトリ項目を追加し、対応するカーネルルートも追加します。

# /etc/openvpn/server/ccd/home-site.conf
ifconfig-push 10.8.0.10 255.255.255.0
iroute 192.168.50.0 255.255.255.0

# server.conf
client-config-dir /etc/openvpn/server/ccd
route 192.168.50.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"

iroute 行は、家庭のサブネット宛てのトラフィックをどのクライアントが受け取るかを OpenVPN に伝えます。route 行はそのサブネットを VPS のカーネルテーブルに入れ、パケットがそもそもトンネルに入るようにします。公開サービスでは、パブリックポートを 10.8.0.10 に転送する宛先 NAT 規則を追加し、net.ipv4.ip_forward を有効にします。

外側から経路をテストする

公開側の各ホップを検証してください。トンネルの成功はサービスへの到達性を証明しません。VPS でのリッスン状態とパケットキャプチャは、「何も届かなかった」と「届いて破棄された」を区別します。

ss -lunp | grep 1194
tcpdump -ni any udp port 1194
nft list ruleset | grep -A4 dnat

# from a phone on mobile data, not the home Wi-Fi
nc -vz -u 203.0.113.10 1194

キャプチャにスマートフォンからのパケットがあって応答がないなら、次はサーバー設定かファイアウォールです。キャプチャに何も出ないなら、クライアントはまだ名前を解決しているか、誤ったアドレスへ送っています。

まず価格を比べる価値のある代替案

ISP から提供される専用 IPv4 アドレスが最短の解決策で、通常は少額の月額料金です。VPN、クライアントネットワーク、DNS レコードがすべて対応していれば、ネイティブ IPv6 は両端の変換をなくします。家庭ネットワーク内にサブネットルーターを置くメッシュオーバーレイなら、VPS なしで同じ中継が実現できますが、調整サービスへの依存が代償です。

安定した内向きアクセスが必要で、すべての規則を自分の管理下に置きたいなら中継を選びます。予算が許し、目的が単に考えなくなることなら ISP のアドレスを選びます。

関連記事