BIG-IPのRoute Domainは1つのBIG-IPを仮想的に複数に分割する機能です。ルータやファイアウォール機器のVRF相当の機能と思えば大きく違いはありません。
動作確認の構成
物理構成は以下の通りとします。
+-----------------+ +-----------------+ +-----------------+ | (RockyLinux84) | | (RockyLinux84) | | (Vyatta) | | Server10 | | Server30 | | Router50 | | | | | | | +--------+--------+ +--------+--------+ +--------+--------+ ens192 | ens192 | | | | | +-------------+ | +-------------+ | | | +--+-----+-----+--+ | | | layer2 switch | | | +--------+--------+ | | | 1.1 +--------+--------+ | BIG-IP | | (bigip01) | | | +-----------------+
Route Domainという機能を使用して以下のような論理構成を組み上げます。
+-----------------+ .50 | (Vyatta) | .50 +----------+ Router50 +----------+ | eth0 | | eth1 | | +-----------------+ | | | | 192.168.20.0/24 192.168.40.0/24 | | (vlan 20) (vlan 40) | | | | .1 | .1 +--------+--------+ +--------+--------+ | bigip01 | | bigip01 | | RouteDomain 12 | | RouteDomain 34 | | | | | +--------+--------+ +--------+--------+ | .1 | .1 | | | 192.168.10.0/24 192.168.30.0/24 | | (vlan 10) (vlan 30) | | | | .10 | .30 +--------+--------+ +--------+--------+ | | | | | Server10 | | Server30 | | (RockyLinux84) | | (RockyLinux84) | +-----------------+ +-----------------+
RouteDomainの操作
VLAN 作成
「Network」「VLANs」の順に画面遷移し、「Create」を押下します。
「Name」「Tag」「Interface」を指定し、「Add」を押下します。この操作を繰り返し、構成図の通りのVLANを計4つ作成します。
コマンドラインで操作する場合は以下の通りです。
create net vlan VLAN0010 interfaces replace-all-with { 1.1 { tagged } } tag 10 create net vlan VLAN0020 interfaces replace-all-with { 1.1 { tagged } } tag 20 create net vlan VLAN0030 interfaces replace-all-with { 1.1 { tagged } } tag 30 create net vlan VLAN0040 interfaces replace-all-with { 1.1 { tagged } } tag 40
Route Domain 作成
「Network」「Route Domains」の順に画面遷移し、「Create」を押下します。
「Name」は何か分かりやすい名前を入力します。「ID」は重複しない一意の値です。Route Domainが200個, 300個を超えるような環境ならば、設計段階で採番ルールを考えておきましょう。「VLANs」はRouteDomainに属するVLANを指定します。
以上の入力が完了したら「Finished」を押下します。この操作を繰り返し、構成図の通りのRouteDomainを計2つ作成します。
コマンドラインで操作する場合は以下の通りです。
create net route-domain RD_0012 id 12 vlans replace-all-with { VLAN0010 VLAN0020 } create net route-domain RD_0034 id 34 vlans replace-all-with { VLAN0030 VLAN0040 }
Self IP 作成
「Network」「Self IPs」の順に画面遷移し、「Create」を押下します。
RouteDomainを使用する時は、「IP Address」の欄は「<IPアドレス>%<RD番号>」の書式で入力します。例えば、「192.168.10.1%12」のようになります。
「Name」「Netmask」「VLAN/Tunnel」は構成図の通りに入力します。以上の入力が完了したら「Finished」を押下します。この操作を繰り返し、構成図の通りのSelfIPを計4つ作成します。
コマンドラインで操作する場合は以下の通りです。
create net self SelfIP_VLAN0010 address 192.168.10.1%12/24 traffic-group traffic-group-local-only vlan VLAN0010 create net self SelfIP_VLAN0020 address 192.168.20.1%12/24 traffic-group traffic-group-local-only vlan VLAN0020 create net self SelfIP_VLAN0030 address 192.168.30.1%34/24 traffic-group traffic-group-local-only vlan VLAN0030 create net self SelfIP_VLAN0040 address 192.168.40.1%34/24 traffic-group traffic-group-local-only vlan VLAN0040
Virtual Server 作成
Route Domainの機能はNetに限らず、LTMやAFMなどの様々なBIG-IPのモジュールと連動します。操作紹介かつ疎通確認の意味を込めて、Route Domain 12とRoute Domain 34を経由させるだけのvirtual serverを作ってみましょう。
「Local Traffic」「Virtual Server」の順に画面遷移し、「Create」を押下します。
RouteDomainを使用する時は、「Destination Address/Mask」の欄は「<IPアドレス>%<RD番号>/<サブネットマスク>」の書式で入力します。例えば、「0.0.0.0%12/0」のようになります。
必須入力である「Name」「Type」「Service Port」に何らかの値を入力します。「Type」はルーティングだけの用途で使用するので、「Forwarding(IP)」で良いでしょう。
ICMPによる疎通確認しやすいよう「Protocol」欄はデフォルト設定の「TCP」から「All Protocols」に変更します。
画面下の方へスクロールさせ、「Finished」を押下します。
コマンドラインで操作する場合は以下の通りです。
create ltm virtual RD0012_VS_FORWARD_ALL destination 0.0.0.0%12:any ip-forward create ltm virtual RD0034_VS_FORWARD_ALL destination 0.0.0.0%34:any ip-forward
疎通確認
ルータからの疎通確認
Route50からServer10へ、Router50からServer30への疎通確認をします。
vyos@vy050:~$ ping 192.168.10.10 count 3 PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=63 time=1.66 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=63 time=0.851 ms 64 bytes from 192.168.10.10: icmp_seq=3 ttl=63 time=8.19 ms --- 192.168.10.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.851/3.569/8.194/3.286 ms vyos@vy050:~$ vyos@vy050:~$ vyos@vy050:~$ ping 192.168.30.30 count 3 PING 192.168.30.30 (192.168.30.30) 56(84) bytes of data. 64 bytes from 192.168.30.30: icmp_seq=1 ttl=63 time=0.760 ms 64 bytes from 192.168.30.30: icmp_seq=2 ttl=63 time=0.860 ms 64 bytes from 192.168.30.30: icmp_seq=3 ttl=63 time=0.839 ms --- 192.168.30.30 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2011ms rtt min/avg/max/mdev = 0.760/0.819/0.860/0.043 ms vyos@vy050:~$
RD番号を指定した疎通確認
RouteDomainから疎通確認をしたい場合は、宛先IPアドレスを「<IPアドレス>%<RD番号>」のように指定して疎通確認をします。
[root@localhost:Active:Standalone] config # ping -c 3 192.168.20.50%12 PING 192.168.20.50%12 (192.168.20.50%12) 56(84) bytes of data. 64 bytes from 192.168.20.50%12: icmp_seq=1 ttl=64 time=0.581 ms 64 bytes from 192.168.20.50%12: icmp_seq=2 ttl=64 time=0.534 ms 64 bytes from 192.168.20.50%12: icmp_seq=3 ttl=64 time=0.520 ms --- 192.168.20.50%12 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.520/0.545/0.581/0.026 ms [root@localhost:Active:Standalone] config # [root@localhost:Active:Standalone] config # [root@localhost:Active:Standalone] config # [root@localhost:Active:Standalone] config # ping -c 3 192.168.40.50%34 PING 192.168.40.50%34 (192.168.40.50%34) 56(84) bytes of data. 64 bytes from 192.168.40.50%34: icmp_seq=1 ttl=64 time=1.14 ms 64 bytes from 192.168.40.50%34: icmp_seq=2 ttl=64 time=0.625 ms 64 bytes from 192.168.40.50%34: icmp_seq=3 ttl=64 time=0.652 ms --- 192.168.40.50%34 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.625/0.808/1.148/0.241 ms [root@localhost:Active:Standalone] config #
rdsh
rdshと呼ばれるツールを使用すると、RouteDomainの移動が可能になります。まずはデフォルトの状態での挙動を確認しましょう。デフォルトの状態ではVLAN0010などのRouteDomainに対して作成したIPアドレスは見えない状態になっています。
[root@localhost:Active:Standalone] config # ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::250:56ff:fe90:3dc7 prefixlen 64 scopeid 0x20<link> ether 00:50:56:90:3d:c7 txqueuelen 1000 (Ethernet) RX packets 48464 bytes 7547509 (7.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34446 bytes 33488866 (31.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.255.255.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 1535063 bytes 127702015 (121.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1535063 bytes 127702015 (121.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:1: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.2.0.2 netmask 255.255.255.0 loop txqueuelen 1000 (Local Loopback) mgmt: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.30 netmask 255.255.255.0 broadcast 192.168.2.255 inet6 fe80::250:56ff:fe90:3dc7 prefixlen 64 scopeid 0x20<link> ether 00:50:56:90:3d:c7 txqueuelen 1000 (Ethernet) RX packets 47589 bytes 6781388 (6.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34481 bytes 33493956 (31.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tmm: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 127.1.1.254 netmask 255.255.255.0 broadcast 127.1.1.255 inet6 fe80::298:76ff:fe54:3210 prefixlen 64 scopeid 0x20<link> inet6 fc00:f5::1 prefixlen 64 scopeid 0x0<global> ether 00:98:76:54:32:10 txqueuelen 1000 (Ethernet) RX packets 70479 bytes 3872515 (3.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 73777 bytes 15476713 (14.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tmm_bp: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 4096 inet 127.20.0.254 netmask 255.255.0.0 broadcast 127.20.255.255 inet6 fe80::1:23ff:fe45:fe prefixlen 64 scopeid 0x20<link> ether 02:01:23:45:00:fe txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4 bytes 360 (360.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost:Active:Standalone] config #
RouteDomain12が属しているサブネットにpingを実行しても、疎通応答なしです。
[root@localhost:Active:Standalone] config # ping -c 3 192.168.20.50 PING 192.168.20.50 (192.168.20.50) 56(84) bytes of data. --- 192.168.20.50 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms [root@localhost:Active:Standalone] config #
この状態から、rdshと呼ばれるツールの引数にRD番号を指定します。全くプロンプトが変わらないので、見た目は分かりづらいのですが(よくオペミスを誘発するのですが)、このコマンドの実行によりRouteDomain12からの操作が可能になります。
[root@localhost:Active:Standalone] config # rdsh 12 [root@localhost:Active:Standalone] config #
rdshコマンド実行後は、VLAN0010などのRouteDomainに対して作成したインターフェースが見えるようになります。
[root@localhost:Active:Standalone] config # ifconfig VLAN0010: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::250:56ff:fe90:d6de prefixlen 64 scopeid 0x20<link> ether 00:50:56:90:d6:de txqueuelen 1000 (Ethernet) RX packets 3 bytes 180 (180.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 VLAN0020: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.20.1 netmask 255.255.255.0 broadcast 192.168.20.255 inet6 fe80::250:56ff:fe90:d6de prefixlen 64 scopeid 0x20<link> ether 00:50:56:90:d6:de txqueuelen 1000 (Ethernet) RX packets 10 bytes 924 (924.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 18 bytes 1572 (1.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.255.255.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tmm: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 127.1.1.254 netmask 255.255.255.0 broadcast 127.1.1.255 inet6 fe80::298:76ff:fe54:3210 prefixlen 64 scopeid 0x20<link> inet6 fc00:f5::1 prefixlen 64 scopeid 0x0<global> ether 00:98:76:54:32:10 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 9 bytes 806 (806.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RD番号の指定なしにpingの実行が可能になります。
[root@localhost:Active:Standalone] config # ping -c 3 192.168.20.50 PING 192.168.20.50 (192.168.20.50) 56(84) bytes of data. 64 bytes from 192.168.20.50: icmp_seq=1 ttl=64 time=1.96 ms 64 bytes from 192.168.20.50: icmp_seq=2 ttl=64 time=0.494 ms 64 bytes from 192.168.20.50: icmp_seq=3 ttl=64 time=0.757 ms --- 192.168.20.50 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.494/1.073/1.969/0.642 ms [root@localhost:Active:Standalone] config #