DynagenでCCIEを目指す
NAT distribution
最終更新:
it_certification
-
view
1. 目的
- NAT distributionを設定し、TCPが負荷分散される様子を確認します。
2. 構成
2.1. 設定概要
- 初期設定はIPアドレスのみです。
- Guest OS側でApacheを起動させます。
2.2. 構成図

2.3. netファイル
model = 3620 [localhost] [[3620]] image = C:\Program Files\Dynamips\images\c3620-j1s3-mz.123-18.bin ram = 128 [[ROUTER R1]] f0/0 = NIO_gen_eth:\Device\NPF_{Host OS Loopback} f1/0 = NIO_gen_eth:\Device\NPF_{Guest OS eth 1}
2.4. 初期設定
- R1
! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! ! no aaa new-model ip subnet-zero ! ! no ip domain lookup ! ip cef ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! interface FastEthernet0/0 ip address 200.200.200.1 255.255.255.0 duplex auto speed auto ! interface FastEthernet1/0 ip address 192.168.201.1 255.255.255.0 duplex auto speed auto ! ip http server ip classless ! ! no cdp run ! ! ! ! ! ! line con 0 line aux 0 line vty 0 4 ! ! end
3. [検証] TCP Load Distribution
3.1. 検証準備
1台のPCでお手軽に検証するために、仮想IPアドレスを定義します。ifcfg-eth1を基にifcfg-eth1:1, ifcfg-eth1:2というファイルを以下のように作成します。
(Linuxのディストリビューションにより設定が異なるので注意して下さい)
(Linuxのディストリビューションにより設定が異なるので注意して下さい)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cat ifcfg-eth1 DEVICE=eth1 BROADCAST=192.168.201.255 IPADDR=192.168.201.101 NETMASK=255.255.255.0 NETWORK=192.168.201.0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet [root@localhost network-scripts]# [root@localhost network-scripts]# [root@localhost network-scripts]# cat ifcfg-eth1:1 DEVICE=eth1:1 <- デバイス名をeth1からeth1:1に変更 BROADCAST=192.168.201.255 IPADDR=192.168.201.102 <- IPアドレスを変更 NETMASK=255.255.255.0 NETWORK=192.168.201.0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet [root@localhost network-scripts]# [root@localhost network-scripts]# [root@localhost network-scripts]# cat ifcfg-eth1:2 DEVICE=eth1:2 <- デバイス名をeth1からeth1:2に変更 BROADCAST=192.168.201.255 IPADDR=192.168.201.103 <- IPアドレスを変更 NETMASK=255.255.255.0 NETWORK=192.168.201.0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet [root@localhost network-scripts]#
設定を反映されるために、networkサービスを再起動させます。
[root@localhost network-scripts]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] Shutting down interface eth1: [ OK ] Shutting down loopback interface: [ OK ] FATAL: Module off not found. Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Bringing up interface eth1: [ OK ] FATAL: Module off not found. [root@localhost network-scripts]# [root@localhost network-scripts]# [root@localhost network-scripts]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:FF:B2:EC:F0:00 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10089 errors:0 dropped:0 overruns:0 frame:0 TX packets:31963 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2245216 (2.1 MiB) TX bytes:4886807 (4.6 MiB) Interrupt:10 eth1 Link encap:Ethernet HWaddr 00:FF:B1:A9:9E:00 inet addr:192.168.201.101 Bcast:192.168.201.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:298 errors:0 dropped:0 overruns:0 frame:0 TX packets:109 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20872 (20.3 KiB) TX bytes:14589 (14.2 KiB) Interrupt:10 eth1:1 Link encap:Ethernet HWaddr 00:FF:B1:A9:9E:00 inet addr:192.168.201.102 Bcast:192.168.201.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 eth1:2 Link encap:Ethernet HWaddr 00:FF:B1:A9:9E:00 inet addr:192.168.201.103 Bcast:192.168.201.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:748 errors:0 dropped:0 overruns:0 frame:0 TX packets:748 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:46637 (45.5 KiB) TX bytes:46637 (45.5 KiB) [root@localhost network-scripts]#
3.2. 設定投入
NATの拡張機能でTCP単位の負荷分散をする事ができます。以下の設定は、192.168.201.100を192.168.201.101 - 103に負荷分散される設定です。
R1(config)#interface FastEthernet 0/0 R1(config-if)#ip nat outside R1(config-if)#exit R1(config)# R1(config)# R1(config)#interface FastEthernet 1/0 R1(config-if)#ip nat inside R1(config-if)#exit R1(config)# R1(config)# R1(config)#ip access-list standard NAT_LIST R1(config-std-nacl)#permit host 192.168.201.100 R1(config-std-nacl)#exit R1(config)# R1(config)# R1(config)#ip nat pool NAT_POOL 192.168.201.101 192.168.201.103 netmask 255.255.255.0 type rotary R1(config)#ip nat inside destination list NAT_LIST pool NAT_POOL
3.3. pingの動作
Host OS側でstatic routeを定義した後に、pingによる疎通確認を行います。疎通不能である事を確認して下さい。
「TCP Load Distribution」はTCPの負荷分散機能ですので、pingは負荷分散されません。
「TCP Load Distribution」はTCPの負荷分散機能ですので、pingは負荷分散されません。
C:\>route add 192.168.201.0 mask 255.255.255.0 200.200.200.1 C:\> C:\>ping 192.168.201.100 Pinging 192.168.201.100 with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. Ping statistics for 192.168.201.100: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), C:\>
3.4. 負荷分散の確認
Host OS側でブラウザに以下URLを入力し、Ctrl + F5などでリロードを繰り返します。
(ブラウザによりリロード方法は異なるので注意して下さい)
(ブラウザによりリロード方法は異なるので注意して下さい)
http://192.168.201.100/
ルータ側のデバッグとshowコマンドで192.168.201.101, 102, 103に負荷分散された様子を確認します。
R1#debug ip nat IP NAT debugging is on R1# R1# *Mar 1 00:32:13.167: NAT: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [39677] *Mar 1 00:32:13.171: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [0] *Mar 1 00:32:13.259: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [39682] *Mar 1 00:32:13.259: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [39683] *Mar 1 00:32:13.287: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [31663] *Mar 1 00:32:13.291: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [31664] *Mar 1 00:32:13.295: NAT: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [31665] *Mar 1 00:32:13.299: NAT: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [39685] *Mar 1 00:32:13.323: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [39687] *Mar 1 00:32:13.323: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [31666] *Mar 1 00:32:13.731: NAT: s=200.200.200.100, d=192.168.201.100->192.168.201.103 [39696] *Mar 1 00:32:13.759: NAT*: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [0] *Mar 1 00:32:13.783: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.103 [39700] *Mar 1 00:32:13.791: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.103 [39701] *Mar 1 00:32:13.799: NAT*: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [11050] *Mar 1 00:32:13.803: NAT*: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [11051] *Mar 1 00:32:13.803: NAT: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [11052] - 中略 - *Mar 1 00:32:15.283: NAT: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [64898] *Mar 1 00:32:15.303: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.103 [39795] *Mar 1 00:32:15.307: NAT: s=200.200.200.100, d=192.168.201.100->192.168.201.103 [39796] *Mar 1 00:32:15.339: NAT*: s=192.168.201.103->192.168.201.100, d=200.200.200.100 [64899] R1# R1# R1# R1#show ip nat translations Pro Inside global Inside local Outside local Outside global tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1616 200.200.200.100:1616 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1617 200.200.200.100:1617 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1618 200.200.200.100:1618 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1619 200.200.200.100:1619 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1620 200.200.200.100:1620 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1621 200.200.200.100:1621 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1622 200.200.200.100:1622 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1623 200.200.200.100:1623 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1624 200.200.200.100:1624 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1625 200.200.200.100:1625 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1626 200.200.200.100:1626 R1#
3.5. 大きなファイルの動作
Guest OSのapache公開ディレクトリ上に、large.htmlという大きなファイルを作成します。そのファイルをHost OSから閲覧できるか確認するために、以下URLをブラウザに入力します。
http://192.168.201.100/large.html
全て同一のアドレス(以下の場合は、192.168.201.102)に割り振られている事が分かります。一応、同一のTCPセッションかどうかを判別する機能は備わっているようです。
R1#debug ip nat IP NAT debugging is on R1# *Mar 1 00:54:30.739: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33207] *Mar 1 00:54:30.743: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33208] *Mar 1 00:54:30.747: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33209] *Mar 1 00:54:30.747: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33210] *Mar 1 00:54:30.899: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5010] *Mar 1 00:54:30.903: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33211] *Mar 1 00:54:30.903: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33212] *Mar 1 00:54:30.907: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33213] *Mar 1 00:54:30.911: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33214] *Mar 1 00:54:30.911: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33215] *Mar 1 00:54:30.947: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5013] *Mar 1 00:54:30.947: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33216] *Mar 1 00:54:30.951: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5017] *Mar 1 00:54:30.955: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5019] *Mar 1 00:54:30.955: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5030] *Mar 1 00:54:30.959: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5031] *Mar 1 00:54:30.963: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33217] *Mar 1 00:54:30.967: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33218] *Mar 1 00:54:30.967: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5033] *Mar 1 00:54:31.223: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33219] *Mar 1 00:54:31.227: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5036] *Mar 1 00:54:31.231: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33220] *Mar 1 00:54:31.235: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33221] *Mar 1 00:54:31.255: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5039] *Mar 1 00:54:31.563: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33222] *Mar 1 00:54:31.591: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5045] *Mar 1 00:54:31.591: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33223] *Mar 1 00:54:31.595: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33224] *Mar 1 00:54:31.651: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5047] *Mar 1 00:54:31.687: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33225] *Mar 1 00:54:31.775: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5053] *Mar 1 00:54:31.775: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33226] *Mar 1 00:54:31.779: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33227] *Mar 1 00:54:31.783: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33228] *Mar 1 00:54:31.839: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5055] *Mar 1 00:54:31.843: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5061] *Mar 1 00:54:31.847: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33229] *Mar 1 00:54:31.851: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33230] *Mar 1 00:54:31.851: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33231] *Mar 1 00:54:31.899: NAT*: s=200.200.200.100, d=192.168.201.100->192.168.201.102 [5064] *Mar 1 00:54:31.903: NAT*: s=192.168.201.102->192.168.201.100, d=200.200.200.100 [33232] R1# R1# R1#show ip nat translations Pro Inside global Inside local Outside local Outside global tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1649 200.200.200.100:1649 R1#
3.6. 障害時の挙動
ホストに障害が発生した際に、振り分けの対象から除外してくれる機能があるかどうか確かめます。
Guest OS側の仮想インターフェースのひとつをダウンさせます。
Guest OS側の仮想インターフェースのひとつをダウンさせます。
[root@localhost ~]# ifdown eth1:1 [root@localhost ~]# [root@localhost ~]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:FF:B2:EC:F0:00 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12264 errors:0 dropped:0 overruns:0 frame:0 TX packets:33426 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2418598 (2.3 MiB) TX bytes:5060613 (4.8 MiB) Interrupt:10 eth1 Link encap:Ethernet HWaddr 00:FF:B1:A9:9E:00 inet addr:192.168.201.101 Bcast:192.168.201.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6816 errors:0 dropped:0 overruns:0 frame:0 TX packets:10469 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:389800 (380.6 KiB) TX bytes:15502089 (14.7 MiB) Interrupt:10 eth1:2 Link encap:Ethernet HWaddr 00:FF:B1:A9:9E:00 inet addr:192.168.201.103 Bcast:192.168.201.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1304 errors:0 dropped:0 overruns:0 frame:0 TX packets:1304 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:74437 (72.6 KiB) TX bytes:74437 (72.6 KiB) [root@localhost ~]#
Host OS側でブラウザに以下URLを入力し、Ctrl + F5などでリロードを繰り返します。
(ブラウザによりリロード方法は異なるので注意して下さい)
(ブラウザによりリロード方法は異なるので注意して下さい)
http://192.168.201.100/
ダウンしているIPアドレスも振り分け対象になっている事が読み取れます。
どうやら実践で使うにはちょっと頼りない機能のようです。
どうやら実践で使うにはちょっと頼りない機能のようです。
R1#show ip nat translations Pro Inside global Inside local Outside local Outside global tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1649 200.200.200.100:1649 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1652 200.200.200.100:1652 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1653 200.200.200.100:1653 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1654 200.200.200.100:1654 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1655 200.200.200.100:1655 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1656 200.200.200.100:1656 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1657 200.200.200.100:1657 tcp 192.168.201.100:80 192.168.201.103:80 200.200.200.100:1658 200.200.200.100:1658 tcp 192.168.201.100:80 192.168.201.101:80 200.200.200.100:1659 200.200.200.100:1659 tcp 192.168.201.100:80 192.168.201.102:80 200.200.200.100:1660 200.200.200.100:1660 R1#
添付ファイル