インターネットからVPC上のEC2に接続の続きです。
今回はSubnetとRoute Tableの挙動を確認してみます。
まずは、10.0.0.0/24のEC2インスタンス(10.0.0.4)で確認すると、当然、自分自身へのpingは通ります。
$ ping 10.0.0.4 PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data. 64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=0.024 ms 64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=0.038 ms 64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.031 ms
ちなみにルーティングテーブルは下記のようになっており、デフォルトゲートウェイは10.0.0.1となっています。
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 * 255.255.255.0 U 0 0 0 eth0 default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
次に、同じSubnetのインスタンスでpingの確認をしてみると、当然、下記のように通信ができます。
$ ping 10.0.0.5 PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data. 64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=10.9 ms 64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.470 ms 64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=0.490 ms
そして、下記のように10.0.1.0/24のSubnetを作成します。
ちなみにAvailability Zoneは10.0.0.0/24とは違う場所にしています。
Subnetを作成すると、デフォルトでRoute TableはMainのもの(10.0.0.0/24と同じもの)が適用されるようになっており、そのSubnetのインスタンス(10.0.1.4)でpingを確認すると、下記のように通信することができ、ルーティングされていることがわかります。
$ ping 10.0.1.4 PING 10.0.1.4 (10.0.1.4) 56(84) bytes of data. 64 bytes from 10.0.1.4: icmp_seq=1 ttl=64 time=3.11 ms 64 bytes from 10.0.1.4: icmp_seq=2 ttl=64 time=3.16 ms 64 bytes from 10.0.1.4: icmp_seq=3 ttl=64 time=3.13 ms
実際にMainのRoute Tableは次のようになっており、
VPC作成時に指定したネットワークアドレス(10.0.0.0/16)のTargetがlocalに必ず設定されています。
つまり、そのVPC内のEC2インスタンスはお互いに通信できるようになっています。
今度はもう一つRoute Tableを作成し、
(やはり、10.0.0.0/16のTargetはlocalに設定されています)
下記のように10.0.1.0/24のSubnetに適用させます。
つまり10.0.1.0/24のSubnetを10.0.1.0/24とは別のRoute Tableにします。
この状態で再度、10.0.1.4でpingを確認すると、
$ ping 10.0.1.4 PING 10.0.1.4 (10.0.1.4) 56(84) bytes of data. 64 bytes from 10.0.1.4: icmp_seq=1 ttl=64 time=3.09 ms 64 bytes from 10.0.1.4: icmp_seq=2 ttl=64 time=3.01 ms 64 bytes from 10.0.1.4: icmp_seq=3 ttl=64 time=3.08 ms
それでも通信はできます。
つまり、どんなRoute TableにもVPCで設定したネットワークアドレス(10.0.0.0/16)のTargetが必ずlocalに設定されてしまうので、VPC内(10.0.0.0/16)のインスタンスは、お互いに通信できてしまうことになります。
ちなみに10.0.1.4のインスタンスのルーティングテーブルは下記のようになっており、デフォルトゲートウェイは所属しているSubnetのもの(10.0.1.1)になっていることがわかります。
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.1.0 * 255.255.255.0 U 0 0 0 eth0 default 10.0.1.1 0.0.0.0 UG 0 0 0 eth0
以上より、Subnet間でアクセス制御をしたい場合は、Network ACLを利用することになります。