Asial Blog

Recruit! Asialで一緒に働きませんか?

はじめてのAmazon VPC

カテゴリ :
バックエンド(インフラ)
タグ :
Tech
クラウド
こんにちは、牧野です。
最近、鎌倉の「コクリコ」というお店のクレープにハマっています。
今のところ、レモンシュガーとアンチョビサラダが一押しです。ほのかに甘い、縁がパリパリの生地に、強めの酸味や塩味がよく合います。
鎌倉に行くことがあれば、ぜひ試してみて下さい。

さて。
だいぶ前になりますが、AmazonのAWSを使う機会があり、その時にVPC(バーチャルプライベートクラウド)を使いました。今日はその話題です。

VPCは、クラウド上にプライベートなネットワークを用意し、その中にEC2サーバーを設置できるというものです。
まず、一つのローカルネットワークを作成し、さらにその中に複数のサブネットワークを作り、各ネットワーク内にサーバーを設置できます。あるサブネットは外部公開用、別のサブネットは内部専用というように、自由にネットワークを設定できます。

便利なのですが多少クセがあり、VPCとインターネットをつなぐのにルーター機能を持つサーバーを設置する必要があります。
VPCの作成ウィザードに従っていけば作れるのですが、それだとルーター機能のためだけのサーバーが出来てしまいます。

今回は、自分で設置するサーバーの一台にルーター機能を持たせるために、ウィザードを使わずに設定する方法を紹介します。例として、以下のようなネットワーク、サーバーを作ることにします。




1.VPCを作成する。(VPCのYour VPCsメニューから Create VPCボタン)

2.作ったVPC内に、外部からアクセス可能なサブネットと内部用サブネットを作成する。(VPCのSubnetsメニューから Create Subnetボタン)

3.VPCのInternet Gatewayを作成する。(VPCのInternet GatewaysメニューからCreate Internet Gatewayボタン)
作ったInternet Gatewayを先ほど作ったVPCにアタッチ。(作ったInternet Gatewayを選択し、Attach to VPCボタン)

4.外部からアクセス可能なサブネットに、ルーター兼公開サーバーを設置する。(EC2のInstancesメニューからLaunch Instanceボタン)
 OS選択後のINSTANCE DETAIL画面でE、C2-VPCをチェックし、マシンを設置するサブネットを選択
 Network Interfaceの設定で、IP AddressのところにサーバーのIPを入力
 今回は 10.123.0.100
 
 ※このマシンのセキュリティグループ設定がsshアクセス可能になっていることを確認

5.VPCのセキュリティーグループを変更し、外部からsshアクセス可能になるように変更する。(VPCのSecurity Groupsメニューから、セキュリティーグループを選んで変更)

6.VPCのルーターになるサーバー用のelastic ipを作成
作ったマシンにelastic ipを割り当てる。
 Elastic IPsメニューからAllocate New Addressを押し、EIP used in: で VPCを選択してIPを取得。
 取得したIPを選択してAssociate Addressで関連づける。

7.外部公開サブネット用のRoute Tableを用意する。(VPCのRoute TablesメニューからCreate Route Table)
VPCを作った時点で、一つRoute Tableが用意されるので、それを変更。下記設定を追加する。
 Destination 0.0.0.0/0 で targetは先ほど作ったInternet Gatewayのインターフェイス名を選択。
このRouting tableを、外部からアクセス可能なサブネットに関連づける。

これで、割り当てたelastic ipでルーター機能を持つサーバーにSSHでアクセスできるはずです。

8.ルーターになるマシンにログインして、iptablesを設定。
少し乱暴ですが、Cent OSであれば、/etc/sysconfig/iptablesに以下のような設定ファイルを用意してiptablesをstartすれば動きます。
  1. *nat
  2. :PREROUTING ACCEPT
  3. :POSTROUTING ACCEPT
  4. :OUTPUT ACCEPT
  5. -A POSTROUTING -s 10.123.0.0/255.255.0.0 -o eth0 -j MASQUERADE 
  6. COMMIT
  7. *filter
  8. :INPUT ACCEPT
  9. :FORWARD ACCEPT
  10. :OUTPUT ACCEPT
  11. COMMIT
コマンドでは、以下のようになります。
  1. iptables -t nat -A POSTROUTING -o eth0 -s 10.123.0.0/16 -j MASQUERADE
-sのソースIPは、VPCのネットワークアドレスを指定します。

9.LinuxのIPフォワードを有効にする。
CentOSの場合、/etc/sysctl.confの以下の行を変更して反映します。
  1. net.ipv4.ip_forward = 1

  1. sysctl -p /etc/sysctl.conf

10.ルーター機能を持つサーバーの設定変更
EC2のInstancesメニューからルーターになるマシンを選択し、ActionsのChange Source/Dest.CheckをDidsabledに設定。

11.内部用サブネットにサーバーを作成。
今回は、IP 10.123.1.100

12.プライベートサブネット用のルーティングテーブルを作成して関連づける。
Destination 0.0.0.0/0 で、ルーターになるマシンを指定して追加後、内部用サブネットに関連づける。

これで、内部のサーバーからルーター機能を持つサーバー経由で外部にアクセスできるはずです。
アクセス制限をかけたい場合、VPC全体であればVPCのSecurity GroupまたはACLを、サブネット単位であればVPCのNetwork ACLsメニューでACLを作成して対象サブネットに関連付けます。


以上、VPC設定の紹介でした。
慣れれば結構便利に使えるのではないかと思います。