クライアントは再試行を繰り返し、ログはハンドシェイクの完了前に途切れ、サーバー側には何も記録されません。このパターンは、両端の間のどこかがトンネルに必要なプロトコルの通過を拒んでいることを示し、認証情報から経路そのものへと目を向けさせます。どちらの設定に触れる前に、フィルタされたプロトコルも誤ったパスワードもほとんどのクライアントでは同じ親切なエラーになるため、パケットが止まる場所を決めてください。テストはコスト順に並んでおり、最も安いものが最初です。

トラフィックが止まる場所を証明する

クライアントの送信インターフェースとサーバーで同時にキャプチャします。出ていったものと届いたものを比較し、差分がどちらの方向に現れるかを記録します。

サーバー側に何もなければ経路か最初のNATが落としており、応答のない到着はサーバーのファイアウォールか存在しない戻り経路を指します。トンネルを頻繁に終端するルーターは有用なログを残さないことが多いため、キャプチャが記録になります。どちらの失敗もクライアントのダイアログでは同じに見えるので、宛先ポートとプロトコル番号を書き留めてください。

PPTPはプロトコル47なしでは動かない

PPTPは制御をTCP 1723で、データをGRE(ポート番号ではなくIPプロトコル47)の内部で運びます。1723だけを転送すると、ペイロードを運ぶプロトコルに対するルールが存在しないために、接続は認証されたあと沈黙するという典型的な結果になります。クライアントはこれを拒否されたパスワードと区別できないので、キャプチャは設定変更より先に行う必要があります。

パススルーは受信転送とは逆方向に動き、ファームウェアは両方に同じラベルを使うことが多く、それが全員を混乱させます。Linuxクライアントではローカルのファイアウォールがルーターの関与よりはるか前にGREを落とせるため、プロトコル47には独自のルールが必要で、conntrackヘルパーを読み込む必要があります。Ubuntuのufwは、通常のallowルールではプロトコル番号を表現できないため、これらのルールをbeforeファイルに置きます。設定後はマシンを再起動するのではなく、ファイアウォールを再読み込みしてください。

# /etc/ufw/before.rules, inside *filter
-A ufw-before-input -p gre -j ACCEPT
sudo ufw allow 1723/tcp
sudo modprobe nf_conntrack_pptp
sudo conntrack -L | grep gre

二つのNATの背後のL2TPとIPsec

L2TPをIPsecの中で使うには、鍵交換にUDP 500、NATが検出されたらUDP 4500、そしてプロトコル50としてのESPが必要です。それぞれ独立にフィルタされるため、一つを許可するルールは残り二つについて何も証明しません。直列の二台のルーターは各パケットを二回変換し、両端は何が交渉されたかでもう一致しません。

外側のモデムをブリッジするか、内側のルーターでNATを切って、公開アドレスがトンネルを終端する機器に届くようにします。どちらも不可能な場合は、二重NATの境界の内側からトンネルを開始する必要があり、そこで終端してはいけません。

キャリア網とアドレス共有

WANアドレスが10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、100.64.0.0/10のいずれかにあるなら、ルーターに公開アドレスはなく、インターネットからの受信転送は届きません。キャリアグレードNATは想定外のプロトコルも追加でフィルタし、モバイル回線ではGREがしばしば犠牲になります。比較すべきはルーター自身のWANアドレスであり、その背後にあるクライアントについて検索サイトが示すアドレスではありません。

同じルーターを有線回線で動かせば、キャリア側の所見と設定ミスを一度のテストで切り分けられます。キャリアがプロトコルを拒否する場合、残る選択肢は443での別のトランスポートか、内側から開始するトンネルです。

ポートを閉じる前にリスナー一覧を読む

不安を煽るポートスキャンは、たいてい有効なまま出荷される機能一式にすぎません。リスナーを棚卸しして各ソケットを機能に対応づけ、二つの見え方がずれないよう、ポートを塞ぐのではなく機能を無効にします。

ss -lntup
systemctl list-units --type=service --state=running | grep -i vpn
nc -vz 203.0.113.10 1723
nc -vzu 203.0.113.10 4500

SoftEtherの既定値は良い例で、TCP 443、992、5555に加え、L2TP/IPsecとDNSトンネルの機能が独自のソケットを追加します。これらの機能を切ればリスナーは隠れるのではなく消え、外部ホストからの調査でキャリアがポートを通すかどうかが分かります。ローカルで応答するリスナーも上流では閉じている可能性があるため、ルーター自身のWANアドレスと外部サービスが報告する内容を比較してください。

関連記事