[SoftEther VPN] なぜ SecureNAT を ON にしたらつながるようになったのか?

iPhone 5 と CentOS 間の L2TP/IPsec で上手く通信できない原因は VPN クライアントと VPN サーバーの IP アドレスの割り当てがなされていなかったことに主な原因がありました。

SecureNAT = 仮想 DHCP サーバー + 仮想 NAT

これをまず確認しておきましょう。

VPN (L2TP/IPsec) の原理を考えてみると、まず VPN クライアントは VPN サーバーと L2TP/IPsec のトンネルを張ります。このトンネルを張る時に使われる IP アドレスはグローバル IP です。VPN クライアントは iPhone 5 で、VPN サーバーは自宅に構築した CentOS 上の SoftEther VPN サーバーです。

iPhone 5 はプロバイダー(ソフトバンク)のグローバル IP を使用し、SoftEther VPN サーバー側は、自宅のインターネットプロバイダーのグローバル IP を使ってトンネルが張られます。ポイントは、このグローバル IP アドレスのセットがトンネルを張るためだけに使用され他の用途には使用できないということです。

さきほど VPN クライアントと VPN サーバーの IP アドレスの割り当てが原因だったと書きましたが、この IP アドレスは上記 L2TP/IPsec のトンネルを張るために使われるグローバル IP のセットのことではありません。実際に VPN 通信するためには、もう1組の別の IP アドレスが必要です。ここがしっかりと理解できていませんでした。このもう1組の IP 設定がなかったために VPN 通信ができなかったわけですが、SecureNATを ON にすることで、もう1組の IP アドレスが VPN クライアントと VPN サーバーの双方に設定され、正常に通信できるようになりました。

だから、L2TP/IPsec で通信させるためには、トンネルを張るための IP アドレスの組み合わせと、トンネルを張った後の実際の VPN 通信を行うための IP アドレスのセットが必要になるということです。トンネルを貼っただけで終わったら意味が無いですよね。その後に通信することが目的ですから。

SecureNAT の仮想 DHCP サーバーがON になると、SoftEther VPN サーバー上で DHCP サーバーが稼働しはじめます。この DHCP サーバーはデフォルトでは 192.168.30.1 の IP アドレスを使用し、DHCP クライアント(当方の場合、iPhone 5 )に対して、192.168.30.0/24 のアドレス帯の IP を渡します。この IP の受け渡しを行う時に L2TP/IPsec のトンネルが使われます。

仮に iPhone 5 に 192.168.30.10 の IP が割り振られたとしましょう。仮想 DHCP サーバーからこの IP が割り振られた時に、デフォルトゲートウェイのアドレスも配布されます。これは仮想 DHCP サーバー自身、つまり 192.168.30.1 になっています。

実際の通信が行われる様子は?

iPhone 5 で Safari を起動してヤフーのページを閲覧するときを例に説明します。

  1. iPhone 5 は デフォルトゲートウェイである 192.168.30.1 に対して HTTP リクエストを送信します。
  2. HTTP リクエストを受け取った 192.168.30.1 = SoftEther VPN サーバーは仮想 NAT 機能を使って送信元アドレスを変換(おそらく OS の持つ IP アドレス)して、OS(当方の環境では CentOS )のデフォルトゲートウェイ(当方の環境ではヤマハの RTX1100 )にパケットをルーティングします。
  3. CentOS から転送されてきた HTTP リクエストのパケットは送信元 IP アドレスが CentOS のもの(プライベート IP アドレス)の為、RTX1100 は送信元 IP アドレスをプロバイダーのグローバル IP アドレスに変換してインターネット側に転送します。
  4. 上記 3 で転送された HTTP パケットはインターネットの中でヤフーの Web サーバまで転送されていきます。
  5. ヤフーの Web サーバまで HTTP リクエストが到達すると、今度はそのレスポンスが iPhone 5 まで帰って来ます。
(Visited 3,878 times, 1 visits today)

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です