2023-11-20 09:15 AM
先日、こちらの記事でプロキシ経由で CSSM と接続時にプロキシサーバーの Subnet を Management Network Routes テーブルに追加する必要があることを紹介しておりますが、その内容に対して以下のような質問が寄せられました。
・テーブルへの追加なしでもプロキシサーバーへの Ping は疎通できるが、CSSMと接続する際に失敗するのはなぜか。
・クラスタを構成する際にプロキシを設定したが、テーブルへの追加なしでも外部接続 (例:DC App Center) 問題なく動作しているのはなぜか。
上記の疑問を解くため、本記事では Nexus Dashboard (ND) のルーティングルールと Routes テーブルの動作について紹介します。
まず、ルーティングルールを紹介します。ND では先に Sourced Based Routing を行います。複数の Routes テーブルが存在し、パケットの Source IP を元に、ip rule で記載されたルールに従って参照する Routes テーブルを決めます。それから、Route テーブル内で通常どおりに Destination IP で Nexthop と出口ポートを調べるという動作になっています。
root@pND1:~# ip rule
0: from all lookup local
32763: from 172.17.0.0/16 lookup 100
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
出力の書式は <priority>: from <Source IP> lookup <Routes table ID> となります。上記の例では、すべてのパケットが一度 local テーブルを lookup し、ヒットするエントリがない場合は、priority に基づいて若番から順に Source IP に基づいてテーブルを lookup していきます。具体的には、priority 0 の local → priority 32763 のテーブル 100 → priority 32764 のテーブル 1001 という順番になります。
次に、ip rule に記載されている Routes テーブルを紹介します。ND の GUI 上では、以下のように Management Network Routes と Data Network Routes、2 つの Routes テーブルがあります。
しかし、内部では同じ形の 2 つのテーブルが存在するというわけではありません。各エントリが複数の表に分散して保存されています。内部ではシステムデフォルトで作成されるテーブルとして、Local (ID 255)、main (ID 254)、default (ID 253) テーブルがあります。他に、ND 関連の Routes テーブル、 ID 100,1001,1000 が存在します。ip route show table <table name/ID> で詳細を確認できます。
root@pND1:~# ip route show table 100
default via 192.168.10.254 dev bond0
10.124.1.0/25 dev bond1 scope link
172.17.0.0/16 dev k8br0 scope link
192.168.10.0/24 dev bond0 scope link
192.168.10.2 via 172.17.26.2 dev k8br0
192.168.10.3 via 172.17.26.1 dev k8br0
なお、ip route や route -n で表示されるのは main (ID 254) の内容だけです。
また、 GUI 上では、以下のように Management Network Routes と Data Network Routes に subnet を新たに追加した場合、該当エントリが Routes テーブル 100、1000、main に作成されます。
root@pND1:~# nslookup proxy-example.cisco.com
Server: 192.168.10.1
Address: 192.168.10.1#53
Non-authoritative answer:
Name: proxy-example.cisco.com
Address: xx.xx.92.228
root@pND1:~# ip route get xx.xx.92.228
xx.xx.92.228 via 10.124.1.1 dev bond1 src 10.124.1.19 uid 0
root@pND1:~# ping proxy-example.cisco.com
PING proxy-example.cisco.com (xx.xx.92.228) 56(84) bytes of data.
64 bytes from xx.xx.92.228 (xx.xx.92.228): icmp_seq=1 ttl=50 time=129 ms
64 bytes from xx.xx.92.228 (xx.xx.92.228): icmp_seq=2 ttl=50 time=128 ms
64 bytes from xx.xx.92.228 (xx.xx.92.228): icmp_seq=3 ttl=50 time=128 ms
64 bytes from xx.xx.92.228 (xx.xx.92.228): icmp_seq=4 ttl=50 time=128 ms
64 bytes from xx.xx.92.228 (xx.xx.92.228): icmp_seq=5 ttl=50 time=128 ms
^C
--- proxy-example.cisco.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 127.966/128.281/128.886/0.314 ms
上記の出力から Ping を実施するときに使用される Source IP は 10.124.1.19 で、Nexthop が 10.124.1.1 で出口ポートが bond1 です。
root@pND1:~# ip rule
0: from all lookup local <--- Source IP が all に含まれるため、先に local を lookup する
32763: from 172.17.0.0/16 lookup 100
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table local
local 10.124.1.19 dev bond1 proto kernel scope host src 10.124.1.19
broadcast 10.124.1.127 dev bond1 proto kernel scope link src 10.124.1.19
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 169.254.0.124 dev k8br1 proto kernel scope host src 169.254.0.124
broadcast 169.254.0.127 dev k8br1 proto kernel scope link src 169.254.0.124
local 172.17.26.0 dev k8br0 proto kernel scope host src 172.17.26.0
broadcast 172.17.255.255 dev k8br0 proto kernel scope link src 172.17.26.0
local 192.168.10.1 dev bond0 proto kernel scope host src 192.168.10.1
broadcast 192.168.10.255 dev bond0 proto kernel scope link src 192.168.10.1
<---- local テーブルでヒットする Destination IP がなく、かつデフォルトルートがないため、引き続き Source ip で ip rule を lookup する
root@pND1:~# ip rule
0: from all lookup local
32763: from 172.17.0.0/16 lookup 100
32764: from 10.124.1.19 lookup 1001 <--- Source IP がこのエントリにヒットするため、1001 を lookup する
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table 1001
default via 10.124.1.1 dev bond1 <--- プレフィックスでマッチするエントリがないため、デフォルトルートにヒットする
10.124.1.0/25 dev bond1 scope link
Routes テーブルへの追加を行わずにプロキシサーバー経由で CSSM と接続する場合、Source IP が 172.17.0.0/16、Destination IP が xx.xx.92.228 となるため、以下のプロセスでルーティングと出口ポートが決めます。
root@pND1:~# ip rule
0: from all lookup local <--- Source IP が all に含まれるため、先に local を lookup する
32763: from 172.17.0.0/16 lookup 100
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table local
local 10.124.1.19 dev bond1 proto kernel scope host src 10.124.1.19
broadcast 10.124.1.127 dev bond1 proto kernel scope link src 10.124.1.19
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 169.254.0.124 dev k8br1 proto kernel scope host src 169.254.0.124
broadcast 169.254.0.127 dev k8br1 proto kernel scope link src 169.254.0.124
local 172.17.26.0 dev k8br0 proto kernel scope host src 172.17.26.0
broadcast 172.17.255.255 dev k8br0 proto kernel scope link src 172.17.26.0
local 192.168.10.1 dev bond0 proto kernel scope host src 192.168.10.1
broadcast 192.168.10.255 dev bond0 proto kernel scope link src 192.168.10.1
<---- local テーブルでヒットする Destination IP がなく、かつデフォルトルートがないため、引き続き Source ip で ip rule を lookup する
root@pND1:~# ip rule
0: from all lookup local
32763: from 172.17.0.0/16 lookup 100 <--- Source IP がこのエントリにヒットするため、100 を lookup する
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table 100
default via 192.168.10.254 dev bond0 <----プレフィックスでマッチするエントリがないため、デフォルトルートにヒットする
10.124.1.0/25 dev bond1 scope link
172.17.0.0/16 dev k8br0 scope link
192.168.10.0/24 dev bond0 scope link
192.168.10.2 via 172.17.26.2 dev k8br0
192.168.10.3 via 172.17.26.1 dev k8br0
Routes テーブルを調べた結果、Nexthop が 192.168.10.254 で、出口が bond0 です。データネットワーク側にパケットを送信することになり、この環境ではデータネットワークからプロキシサーバーに到達できないため、CSSM との接続がタイムアウトになります。
Management Network Routes テーブルにプロキシサーバーの Subnet (xx.xx.92.0/24) を追加してから、プロキシ経由で CSSM と接続する場合の動作を見ていきます。
root@pND1:~# ip rule
0: from all lookup local <--- Source IP が all に含まれるため、先に local を lookup する
32763: from 172.17.0.0/16 lookup 100
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table local
local 10.124.1.19 dev bond1 proto kernel scope host src 10.124.1.19
broadcast 10.124.1.127 dev bond1 proto kernel scope link src 10.124.1.19
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 169.254.0.124 dev k8br1 proto kernel scope host src 169.254.0.124
broadcast 169.254.0.127 dev k8br1 proto kernel scope link src 169.254.0.124
local 172.17.26.0 dev k8br0 proto kernel scope host src 172.17.26.0
broadcast 172.17.255.255 dev k8br0 proto kernel scope link src 172.17.26.0
local 192.168.10.1 dev bond0 proto kernel scope host src 192.168.10.1
broadcast 192.168.10.255 dev bond0 proto kernel scope link src 192.168.10.1
<---- local テーブルでヒットする Destination IP がなく、かつデフォルトルートがないため、引き続き Source ip で ip rule を lookup する
root@pND1:~# ip rule
0: from all lookup local
32763: from 172.17.0.0/16 lookup 100 <--- Source IP がこのエントリにヒットするため、100 を lookup する
32764: from 10.124.1.19 lookup 1001
32765: from 192.168.10.1 lookup 1000
32766: from all lookup main
32767: from all lookup default
root@pND1:~# ip route show table 100
default via 192.168.10.254 dev bond0
xx.xx.92.0/24 via 10.124.1.1 dev bond1 <----- このエントリにヒットする
10.10.20.0/24 via 192.168.10.254 dev bond0
10.124.1.0/25 dev bond1 scope link
172.17.0.0/16 dev k8br0 scope link
192.168.10.0/24 dev bond0 scope link
192.168.10.2 via 172.17.26.2 dev k8br0
192.168.10.3 via 172.17.26.1 dev k8br0
ルーティングの結果、Nexthop が 10.124.1.1 で、出口ポートが bond1 になり、Management Network経由となるため、通信が成功します。
・ND では先に Sourced Based で Routes テーブルを決めてから Destination Based でルーティング
・一般的に、ND 発のパケットの Source IP が mgmt IP、APP 発のパケットの Source IP が 172.17.0.0/16
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます