
私は L2TP/IPSec VPN サーバーを実行している Mac OS X Server (10.9) マシンを持っています。構成は問題ないようで、サーバーと VPN の両方のホスト名は DynDNS ホスト名に設定されています。サーバーはポート転送が可能な AirPort Extreme ルーターの背後に設定されており、ルーターを無効 (ブリッジ) にした状態で Arris モデム/ルーターに接続されています。サーバーは静的内部 IP で構成されており、ルーターの MAC アドレスも DHCP 経由で結び付けられ、内部アドレスの一貫性が保証されています。
サーバーの内部 IP アドレス (10.0.1.x) を入力し、ネットワーク内から VPN サーバーに接続しようとすると、すべて正常に動作します。しかし、外部ホスト名 (DynDNS 名) を入力して、ネットワーク内から再度接続しようとすると、接続に失敗します。同様に、ネットワーク外 (LTE 経由など) でも接続に失敗します。
その他のサービス (SSH、リモート デスクトップなど) はすべて、ネットワークの内外から正常に接続されます。影響を受けるのは VPN のみです。SSH およびリモート デスクトップ (ポート 22/5900) からサーバーにアクセスできることが確認できます。
さらに、ルータが他のサービスで使用されるポートに加えて、ポート 500 (UDP)、1701 (UDP)、および 4500 (UDP) を転送していることも確認しました。
接続しようとすると、クライアントのコンソールに次のように表示されます。
12/16/13 11:13:33.213 PM configd[28]: SCNC: start, triggered by (15822) com.apple.prefe, type L2TP, status 0, trafficClass 0
12/16/13 11:13:33.229 PM pppd[15967]: publish_entry SCDSet() failed: Success!
12/16/13 11:13:33.230 PM pppd[15967]: publish_entry SCDSet() failed: Success!
12/16/13 11:13:33.230 PM pppd[15967]: pppd 2.4.2 (Apple version 727.1.15) started by user, uid 501
12/16/13 11:13:33.231 PM pppd[15967]: L2TP connecting to server 'x.x.x.x' (x.x.x.x)...
12/16/13 11:13:33.232 PM pppd[15967]: IPSec connection started
12/16/13 11:13:33.244 PM racoon[15968]: accepted connection on vpn control socket.
12/16/13 11:13:33.244 PM racoon[15968]: Connecting.
12/16/13 11:13:33.244 PM racoon[15968]: IPSec Phase 1 started (Initiated by me).
12/16/13 11:13:33.245 PM racoon[15968]: IKE Packet: transmit success. (Initiator, Main-Mode message 1).
12/16/13 11:13:33.245 PM racoon[15968]: >>>>> phase change status = Phase 1 started by us
12/16/13 11:13:33.416 PM racoon[15968]: >>>>> phase change status = Phase 1 started by peer
12/16/13 11:13:33.416 PM racoon[15968]: IKE Packet: receive success. (Initiator, Main-Mode message 2).
12/16/13 11:13:33.420 PM racoon[15968]: IKE Packet: transmit success. (Initiator, Main-Mode message 3).
12/16/13 11:13:33.429 PM racoon[15968]: IKE Packet: receive success. (Initiator, Main-Mode message 4).
12/16/13 11:13:33.447 PM racoon[15968]: IKE Packet: transmit success. (Initiator, Main-Mode message 5).
12/16/13 11:13:36.715 PM racoon[15968]: !!! skipped retransmitting frags: frag_flags 1, r->sendbuf->l 112, max 1280
12/16/13 11:13:36.715 PM racoon[15968]: Received retransmitted packet from x.x.x.x[500].
12/16/13 11:13:36.715 PM racoon[15968]: the packet is retransmitted by x.x.x.x[500].
12/16/13 11:13:36.745 PM racoon[15968]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:39.872 PM racoon[15968]: !!! skipped retransmitting frags: frag_flags 1, r->sendbuf->l 112, max 1280
12/16/13 11:13:39.872 PM racoon[15968]: Received retransmitted packet from x.x.x.x[500].
12/16/13 11:13:39.873 PM racoon[15968]: the packet is retransmitted by x.x.x.x[500].
12/16/13 11:13:40.043 PM racoon[15968]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:43.170 PM racoon[15968]: !!! skipped retransmitting frags: frag_flags 1, r->sendbuf->l 112, max 1280
12/16/13 11:13:43.170 PM racoon[15968]: Received retransmitted packet from x.x.x.x[500].
12/16/13 11:13:43.170 PM racoon[15968]: the packet is retransmitted by x.x.x.x[500].
12/16/13 11:13:43.335 PM racoon[15968]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:55.912 PM racoon[15968]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:56.367 PM racoon[15968]: !!! skipped retransmitting frags: frag_flags 1, r->sendbuf->l 112, max 1280
12/16/13 11:13:56.367 PM racoon[15968]: Received retransmitted packet from x.x.x.x[500].
12/16/13 11:13:56.367 PM racoon[15968]: the packet is retransmitted by x.x.x.x[500].
12/16/13 11:14:03.416 PM pppd[15967]: IPSec connection failed
12/16/13 11:14:03.416 PM racoon[15968]: IPSec disconnecting from server x.x.x.x
12/16/13 11:14:03.416 PM racoon[15968]: glob found no matches for path "/var/run/racoon/*.conf"
サーバーのコンソールでは次のようになります:
12/16/13 11:13:33.404 PM racoon[216]: IPSec Phase 1 started (Initiated by peer).
12/16/13 11:13:33.404 PM racoon[216]: IKE Packet: receive success. (Responder, Main-Mode message 1).
12/16/13 11:13:33.404 PM racoon[216]: >>>>> phase change status = Phase 1 started by us
12/16/13 11:13:33.404 PM racoon[216]: IKE Packet: transmit success. (Responder, Main-Mode message 2).
12/16/13 11:13:33.541 PM racoon[216]: IKE Packet: receive success. (Responder, Main-Mode message 3).
12/16/13 11:13:33.559 PM racoon[216]: IKE Packet: transmit success. (Responder, Main-Mode message 4).
12/16/13 11:13:33.566 PM racoon[216]: Connecting.
12/16/13 11:13:36.697 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:36.697 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:39.989 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:43.286 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:13:56.484 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:14:06.392 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:14:12.978 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:14:32.767 PM racoon[216]: IKE Packet: transmit success. (Phase 1 Retransmit).
12/16/13 11:14:39.390 PM racoon[216]: IKEv1 Phase 1: maximum retransmits. (Phase 1 Maximum Retransmits).
12/16/13 11:14:39.390 PM racoon[216]: Phase 1 negotiation failed due to time up. 45b24df5cc9713e7:9b427f72231ccb59
1 つ気付いたのは、クライアントが 11:14:03 に失敗したのに、サーバーはタイムアウトになるまで 30 秒間パケットを再送信し続けたことです。この場合のクライアントは Mac OS X ですが、iOS クライアントも同様に動作します。
ここで確認すべきトラブルシューティング手順は何ですか?
答え1
わかりました。これは最新バージョンの Mac OS X Server の「バグ」であることがわかりました。私が調べたところ、IKE デーモンは、racoon
ソース ポートが UDP 4500 でない場合、接続を受け入れません。NAT を経由する接続のほとんどは、ソース ポートをランダム化するため、接続できません。デーモンの古いバージョンには、この制限はありません。ネットワーク内部からの接続は、サーバーの IP に直接接続する場合、ポートをランダム化しませんが、ループバック接続と外部接続ではランダム化されるようで、これが失敗の原因となっています。
そこで、すぐにとれた解決策はracoon
バイナリをOS 10.8の古いバージョンに置き換えるもちろん、古いものに名前を付けてバックアップしますracoon.old
(または、racoon.new
より正確な名前でしょうか? :D)。
Apple はこの問題を認識しているようで、おそらく修正プログラムを発行するでしょう。それまでの間、バイナリを元に戻すことは有効です。