読者です 読者をやめる 読者になる 読者になる

続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

遅延発生装置を作る-ルーター編

AWS networking ルーティングテーブル 遅延発生装置

次回の続き、遅延発生ルーターを作ります。

ネットワーク構成はこのようになります。

ETH0008.gif

サーバー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に接続する。下図参照

スクリーンショット 2014-07-19 7.11.05.png

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

スクリーンショット 2014-07-19 8.13.55.png

ttlが一つ減って 63 になるはずです。traceroute を確認しても、ルーターを通っているのが分かります。

あとはルーター上でtcコマンドを打てば遅延コントロール可能