こんにちは
4月に新卒で入社した高橋です。はやいものでもう10月ですね。秋といえばスポーツでしょうか。
さて今回はAWS上にWindows Server 2012でVPNサーバを立ててみようと思います。
構成図は下の通りです。
VPC内のPublicサブネットにあるVPN Serverを経由し、Privateサブネット内のTargetインスタンスと通信してみたいと思います。通信はL2TP/IPsecを採用します。
セキュリティグループ
Targetインスタンスのセキュリティグループは、VPN ServerのセキュリティグループからのInboundアクセスのみに絞ることが可能です。
VPNサーバの設定
- VPN Serverの設定を行います。
設定の方法は下記のリンクを参考に致しました
WindowsServer2012でVPNサーバーを立ててみる - まぽろぐ2chがPPTPポート(1723番)を開けていると弾きやがるのでL2TPに移行してみた - まぽろぐ ここで一つ注意が、「役割と機能追加のウィザード」で、リモートアクセスの「DirectAccessおよびVPN」だけでなく「ルーティング」もインストールしてください。
- 次に「ルーティングとリモートアクセス」の画面に戻り、IPv4の全般を右クリックし、新しい「ルーティングプロトコル」から「NAT」を選択します。 ここで「追加のプロトコルは存在しません」等のエラーメッセージが出た場合は、IPv4を右クリックし、「最新の情報に更新」をクリックしてください。 次にインタフェースはイーサネットを選択し、「インターネットに接続されるパブリックインターフェイス」を選択しOKを押します。
- 次に接続に設定したユーザグループ内のユーザの設定を行います。
「管理ツール」>「コンピュータと管理」>「ローカルユーザとグループ」
から先ほど設定した「接続するユーザーグループ」に含まれており、かつ接続に利用するユーザを右クリックし、プロパティを選択し、「ダイヤルイン」タブの「リモートアクセスを許可」にチェックを入れ、OKボタンを押します。 - 次にWindowsファイアウォールを全て無効化してください。
- これで終わり、、、ではありません。あともう少しです。頑張りましょう。
次に、L2TPプロトコルでVPN接続する際の事前共有キーの設定をしましょう。 サービス画面を右クリックし、プロパティを選びます。
セキュリティタブを選択し、「カスタムIPsecポリシーをL2TP/IKEv2接続で許可する」にチェックし、事前共有キーを設定します。(図では"poteto") - 「ルーティングとリモートアクセス」の画面のローカルサーバを右クリックし「プロパティ」を選択します。「IPv4」タブの「IPv4 アドレスの割り当て」から「静的アドレスプールを使う」を選択します。
「追加」をクリックし、クライアント側に付与するIPアドレスのレンジを指定します。
- さあ最後に「ルーティングとリモートアクセス」の画面でサービスを再起動すれば、VPNサーバ側の設定は終わりです。
つまづきポイント
これでVPNサーバの設定が完了しました。しかし最後に一つだけAWS側で設定しなくてはいけないものがあります。それは「送信元/送信先チェックを無効にする」です。
(送信元/送信先チェック)機能はデフォルトでは有効になっています。この機能が有効になっているインスタンスでは、トラフィックの宛先が自分自身以外の場合、AWS側でそのトラフィックを弾いてしまいます。VPNサーバではTargetインスタンス向けのパケットを受け取る必要があるため、この機能を無効化 しておかないとルーティングができなくなります。(参考:送信元/送信先チェックを無効にする)
設定の仕方は簡単です。マネジメントコンソールでVPNサーバを選択したらActionsから「Change Source/Dest Check」を選び、
[Yes,Disable]をクリックします。これで設定は完了です。
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を便利に使いこなし、楽しい人生を謳歌しましょう。