Windows Server 2012でVPNサーバを立てる on AWS

記事タイトルとURLをコピーする

こんにちは

4月に新卒で入社した高橋です。はやいものでもう10月ですね。秋といえばスポーツでしょうか。

さて今回はAWS上にWindows Server 2012でVPNサーバを立ててみようと思います。

構成図は下の通りです。

vpncloud

VPC内のPublicサブネットにあるVPN Serverを経由し、Privateサブネット内のTargetインスタンスと通信してみたいと思います。通信はL2TP/IPsecを採用します。

セキュリティグループ

Targetインスタンスのセキュリティグループは、VPN ServerのセキュリティグループからのInboundアクセスのみに絞ることが可能です。

 VPNサーバの設定

  1. VPN Serverの設定を行います。
    設定の方法は下記のリンクを参考に致しました
    WindowsServer2012でVPNサーバーを立ててみる - まぽろぐ

    2chがPPTPポート(1723番)を開けていると弾きやがるのでL2TPに移行してみた - まぽろぐ ここで一つ注意が、「役割と機能追加のウィザード」で、リモートアクセスの「DirectAccessおよびVPN」だけでなく「ルーティング」もインストールしてください。
    wizard

  2. 次に「ルーティングとリモートアクセス」の画面に戻り、IPv4の全般を右クリックし、新しい「ルーティングプロトコル」から「NAT」を選択します。 t2 ここで「追加のプロトコルは存在しません」等のエラーメッセージが出た場合は、IPv4を右クリックし、「最新の情報に更新」をクリックしてください。 次にインタフェースはイーサネットを選択し、「インターネットに接続されるパブリックインターフェイス」を選択しOKを押します。 t4

  3. 次に接続に設定したユーザグループ内のユーザの設定を行います。

    「管理ツール」>「コンピュータと管理」>「ローカルユーザとグループ」
    から先ほど設定した「接続するユーザーグループ」に含まれており、かつ接続に利用するユーザを右クリックし、プロパティを選択し、「ダイヤルイン」タブの「リモートアクセスを許可」にチェックを入れ、OKボタンを押します。 t5

  4. 次にWindowsファイアウォールを全て無効化してください。
  5. これで終わり、、、ではありません。あともう少しです。頑張りましょう。

    次に、L2TPプロトコルでVPN接続する際の事前共有キーの設定をしましょう。 サービス画面を右クリックし、プロパティを選びます。 t7
    セキュリティタブを選択し、「カスタムIPsecポリシーをL2TP/IKEv2接続で許可する」にチェックし、事前共有キーを設定します。(図では"poteto") t8

  6. 「ルーティングとリモートアクセス」の画面のローカルサーバを右クリックし「プロパティ」を選択します。「IPv4」タブの「IPv4 アドレスの割り当て」から「静的アドレスプールを使う」を選択します。
    sukusyo
    「追加」をクリックし、クライアント側に付与するIPアドレスのレンジを指定します。
    hani
  7. さあ最後に「ルーティングとリモートアクセス」の画面でサービスを再起動すれば、VPNサーバ側の設定は終わりです。
    t7

つまづきポイント

これでVPNサーバの設定が完了しました。しかし最後に一つだけAWS側で設定しなくてはいけないものがあります。それは「送信元/送信先チェックを無効にする」です。

(送信元/送信先チェック)機能はデフォルトでは有効になっています。この機能が有効になっているインスタンスでは、トラフィックの宛先が自分自身以外の場合、AWS側でそのトラフィックを弾いてしまいます。VPNサーバではTargetインスタンス向けのパケットを受け取る必要があるため、この機能を無効化 しておかないとルーティングができなくなります。(参考:送信元/送信先チェックを無効にする

設定の仕方は簡単です。マネジメントコンソールでVPNサーバを選択したらActionsから「Change Source/Dest Check」を選び、

t9a
[Yes,Disable]をクリックします。これで設定は完了です。
 

t10
AWS側での設定変更に少し時間がかかる場合があります。コーヒーでも飲んで設定変更が完了するまで待ちましょう。

確認

最後に接続確認をしてみましょう。Macでは、VPN接続設定の「詳細」内の「すべてのトラフィックをVPN接続経由で送信」のチェックを外すことで、インターネットとの通信はVPNを経由しないで行うことができます。

試しにTargetインスタンスと通信できるか確認してみます。
 

$ traceroute 10.0.1.105
traceroute to 10.0.1.105 (10.0.1.105), 64 hops max, 52 byte packets
 1  10.1.0.0 (10.1.0.0)  6.374 ms  4.841 ms  4.826 ms
 2  * * *
 3  10.0.1.105 (10.0.1.105)  6.615 ms  8.231 ms  8.002 ms

おお、ちゃんとできていますね。 次はターゲットのインスタンスにログインし、tcpdumpを利用してどこから通信を受けているか確認します。

[ec2-user@ip-10-0-1-105 ~]$ sudo tcpdump port 22 -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
06:59:26.133635 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 3418137445:3418137561, ack 3260914754, win 306, options [nop,nop,TS val 765889 ecr 712173948], length 116
06:59:26.133717 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 116:232, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 116
06:59:26.134764 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 232:444, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 212
06:59:26.134808 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 444:640, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
06:59:26.134864 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 640:836, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
06:59:26.134914 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 836:1032, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
06:59:26.134976 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 1032:1424, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 392
06:59:26.135015 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 1424:1620, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
06:59:26.135053 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 1620:1816, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
06:59:26.135089 IP 10.0.1.105.ssh > 10.0.0.240.62576: Flags [P.], seq 1816:2012, ack 1, win 306, options [nop,nop,TS val 765890 ecr 712173948], length 196
10 packets captured
10 packets received by filter
0 packets dropped by kernel

少し分かりにくいですが、VPNサーバ(10.0.0.240)から通信を受けていることが確認できました。

設定をしていく上で「送信元/送信先チェックを無効にする」に気づかず、時間をかなり消費してしまいました。本記事はこれで終わりです。AWSを便利に使いこなし、楽しい人生を謳歌しましょう。

【追記】「IPv4 アドレスの割り当て」を追記しました。2015年2月3日