次回の続き、遅延発生ルーターを作ります。
ネットワーク構成はこのようになります。
サーバーA(subnet 16) 172.31.19.82/20
サーバーB(subnet 64) 172.31.77.166/20
ルーター 172.31.16.254/20, 172.31.64.254/20
ルーターを突っ込むだけでは、全部デフォルトゲートウェイに持っていかれるので、ホストの(VPC-SubnetつまりAWS上の設定ではない)ルーティングテーブルを弄って、自作ルーターにデータが流れるようにします。
手順の流れは
1. とりあえず、Subnetを2つ作る。Windowsのときのことを考えて、両方Publicにしておきますが、Privateでもいいです。
2. 1で作ったどちらかのSubnetにEC2を建てる、ENIを2枚にして、各々のSubnetに接続する。下図参照
3. 立ち上がったら、ルーターのENI2つに対して、Src/Dst Check をDisableにする。ついでにSecurityGroupも設定おく。必ずENI設定画面で、 Src/Dst Check を変更すること!
3. ルーターインスタンスのiptables を設定する。とりあえずマスカレードにしておく。
4. サーバーAにログインし、ルーティングテーブルを弄って172.31.64.0/20へはルーターに飛ぶようにする。
ルーターの設定
# echo 1 > /proc/sys/net/ipv4/ip_forward
保存するなら
# vi /etc/sysctl.conf
iptables マスカレードで楽します。この例だと双方向マスカレードなので、ズボラ設定も可能ですが、ちゃんと2つ指定します。
# iptables -t nat -A POSTROUTING -s 172.31.16.0/20 -d 172.31.64.0/20 -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.31.64.0/20 -d 172.31.16.0/20 -o eth0 -j MASQUERADE
サーバーAのルーティングテーブルの設定
ここで言うルーティングテーブルは、サーバーAの中のルーティングテーブルです。Subnet 16 のルーティングテーブルではありません。僕は古い人間なので、route コマンドでいじっていきます。
# route add -net 172.31.64.0 netmask 255.255.240.0 gw 172.31.16.254
#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
172.31.64.0 172.31.16.254 255.255.240.0 UG 0 0 0 eth0
pingを打って確認
$ ping 172.31.77.166
PING 172.31.77.166 (172.31.77.166) 56(84) bytes of data.
64 bytes from 172.31.77.166: icmp_seq=1 ttl=63 time=1.11 ms
64 bytes from 172.31.77.166: icmp_seq=2 ttl=63 time=1.08 ms
64 bytes from 172.31.77.166: icmp_seq=3 ttl=63 time=0.987 ms
ttlが一つ減って 63 になるはずです。traceroute を確認しても、ルーターを通っているのが分かります。
あとはルーター上でtcコマンドを打てば遅延コントロール可能