インターネットから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を利用することになります。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら