Categories: 未分類

「設定できないものは設定させちゃだめでしょ」── Omadaコントローラに日本語のVLAN名を付けて、3日溶かした話

■ はじめに

TP-LinkのOmada SDNで社内ネットワークを管理しています。今回、新しく買った48ポートのL2+スイッチ「SG3452」を、上位のスイッチとTagged VLANでつないで、管理VLANの上でOmadaソフトウェアコントローラの管理下に置こうとしたところ、丸3日ハマりました。

結論から書くと、原因は「VLAN名に日本語(と全角カッコ)を使っていたこと」でした。コントローラは普通に受け付けてくれるし、既存のスイッチやAPは全部その名前で動いている。ところが新しく買ったSG3452だけが、その名前を拒否していたのです。しかもエラーは画面には出ず、イベントログを掘って初めて分かりました。

「設定できないものは設定させちゃだめでしょ」というのが、3日目の夕方に私の口から出た言葉です。同じところで詰まる人が一人でも減るように、経緯をなるべく一次情報のまま残します。

※ IPアドレス・VLAN ID・機器名などは、そのままだと身元が分かるのでブログ用に書き換えています。構成の関係性は実際のままです。

■ 環境

・Omada Software Controller(Windows Server上で稼働。NICが2枚あり、管理VLAN側 10.90.0.250 と、事務PC側 192.168.10.250)

・上位スイッチ:TP-Link ES224G(Easy Managedシリーズ。以下「上位SW」)

・新しいスイッチ:TP-Link SG3452 v1.30(以下「SG3452」)

・管理VLAN:VLAN 900、サブネット 10.90.0.0/24、ゲートウェイ 10.90.0.254。DHCPサーバもこのVLAN上にあります

・そのほかのVLANは「【本館】PC」「【共通】管理」「【共通】監視カメラ」のように、建屋名を全角カッコで頭に付けた日本語名で運用していました

・やりたいこと:SG3452のポート48 ⇔ 上位SWのポート9 をトランク(ネイティブVLAN 1、Tagged で VLAN 900 ほか)で接続し、SG3452 を VLAN 900 上の静的IP 10.90.0.151 で管理する

つまり、既に同じ形で管理できているPoEスイッチがもう1台あるので、「同じことをもう一台やるだけ」のはずでした。

■ 1日目:ポートを差し替えると通信できない

最初は上位SWの「アクセスポート(ネイティブ VLAN 900)」にSG3452を挿してみました。これは一発で採用(Adopt)できて、DHCPで 10.90.0.195 を取りました。

で、ケーブルを本番のトランクポート(Tagged 900)に差し替えると、いきなり通信できなくなる。ハートビートミスのまま戻ってこない。

これは今思えば当然で、SG3452側の管理IPは「VLAN 1(タグなし)」に付いていて、アクセスポートだから上位SWがタグなしフレームをVLAN 900に入れてくれていただけです。Taggedのポートに挿せば、両端でVLANの設定が一致していないので通りません。

じゃあコントローラの画面から、SG3452の管理VLANを「VLAN 900」に変えればいいはず。デバイス → 設定 → VLANインターフェース で管理VLANを 900 にして、静的IP 10.90.0.151 を入れて適用。

……すると、VLAN 1 のIPが 0.0.0.0 になって、VLAN 900 にはIPが載らない。切断されたまま。CLIで show ip interface を見ると、VLAN 1 に旧IPが残っていて VLAN 900 は空、というパターンもありました。

この時点では「Omadaの管理VLAN変更の仕様を自分が理解できてないんだろう」と思って、ひたすらCLIで試し始めます。

■ シリアルコンソールの小ネタ:38400bps

SG3452のコンソールはUSB-Cです。Tera Termで開くと、初期値の9600bpsだと文字化けして何も読めません。スピードを 38400 にすると正常に表示されました。マニュアルにも書いてありますが、最初はケーブルを疑って時間を無駄にしたので書き残しておきます。

Tera Term の設定:ポート COM3/スピード 38400/データ 8bit/パリティ none/ストップビット 1bit/フロー制御 none

■ 2日目:CLIで reset したら、もっとひどくなった

コントローラからの変更がうまくいかないので、いったん初期化して最初からやり直そうと、CLIで reset を打ちました。

SG3452> enable

SG3452# reset

ここからが本当のハマりです。

reset 後、SG3452 はDHCPでIPを取ってこなくなりました。IPは 192.168.0.1 の静的。調べると、SG3452の工場出荷状態は「静的 192.168.0.1、DHCPオフ」です。最初に採用できたときはDHCPで取れていたので、あれは工場出荷状態ではなく、何かの拍子にDHCPが有効になっていた状態だったのだと思います。

さらに、show logging buffer にこんな行が出ます。

[ECS] used mgmt-vlan information from the previous connection in Discover state.

「前回接続時の管理VLAN情報を使っています」。つまり reset しても、Omadaエージェントは前回の管理VLANの記憶を持ったままです。工場出荷時に戻ったわけではない。

ネットで検索しても、AIに聞いても、「本体のリセットボタンを5秒以上長押しして初期化してください」と言われます。ところが、SG3452には物理のリセットボタンがありません。筐体の前面・背面を何度も見ましたが、ないものはない。CLIの reset か、Web UIからの初期化しかありません。そして、その reset がエージェントの状態を残す。ここで「一般論の初期化手順」は使えないと分かりました。

しかたなく、CLIで手動でIPを付けて採用し直します。

SG3452# configure

SG3452(config)# interface vlan 1

SG3452(config-if)# ip address 10.90.0.152 255.255.255.0

SG3452(config-if)# exit

SG3452(config)# ip route 0.0.0.0 0.0.0.0 10.90.0.254

SG3452(config)# end

SG3452# copy running-config startup-config

途中で ip address 10.9.0.152 と1桁打ち間違えて、Destination Host Unreachable を眺めて10分溶かしたのも書いておきます。パスワードを admin にしようとして「length out of range」で弾かれたのも(8文字以上必要です)。

採用はできました。で、また管理VLANを900に変更 → また切断。同じ場所で止まる。

■ 2日目の夜:Pingは通るのにコントローラに現れない

「コントローラからの変更が効かないなら、CLIで直接VLAN 900にIPを付けて、ポートもTaggedにすればいいだろう」と考えました。

SG3452(config)# interface vlan 1

SG3452(config-if)# no ip address

SG3452(config-if)# exit

SG3452(config)# interface vlan 900

SG3452(config-if)# ip address 10.90.0.151 255.255.255.0

SG3452(config-if)# exit

SG3452(config)# interface gigabitEthernet 1/0/48

SG3452(config-if)# switchport general allowed vlan 900 tagged

SG3452(config-if)# switchport pvid 1

これで本番のトランクポートに挿すと、

・SG3452 → ゲートウェイ 10.90.0.254:Ping OK

・SG3452 → コントローラ 10.90.0.250:Ping OK

・コントローラサーバ → SG3452(ping -S 10.90.0.250 10.90.0.151):OK、TTL=64

・サーバの arp -a にSG3452のMACが正しく載っている

L2もL3も完璧に通っています。なのに、コントローラの画面には出てこない。「保留中」にも出ない。デバイスを「忘れる」してもダメ。再起動してもダメ。

ついでに分かったのが、Windowsサーバ側のファイアウォールです。管理VLAN側のNICが「パブリック」プロファイルになっていて、SG3452からのPingが Defender を無効にしたときだけ通る。これも一つの壁でしたが、無効にしても状況は変わらなかったので、本命ではありませんでした。

サーバ側で netstat -ano | findstr 29814 を見ると、他のスイッチはみんな 10.90.0.250:29814 に ESTABLISHED しているのに、SG3452からの接続だけが一本もない。SG3452は「つなぎに来ていない」。

SG3452 の show logging buffer を見ると、起動直後にこう出て、そのあと17時間ずっと沈黙していました。

[ECS] get netif-info failed. Failure count is 1 when state is Discover.

[ECS] used mgmt-vlan information from the previous connection in Discover state.

[ECS] get netif-info failed. Failure count is 5 when state is Prelink.

[ECS] ssl connect failed. Failure count is 5 when state is Prelink.

[HEALING] L3 Intf VLAN1 Heal Check Start.

「get netif-info failed」=自分の管理インターフェイスの情報が取れない。最後の行が答えで、エージェントは「管理インターフェイス=VLAN 1」だと思い込んでいます。私がCLIでVLAN 900に付けたIPは、エージェントから見れば関係のないL3インターフェイスで、VLAN 1にIPがないから検出パケットそのものを送れていなかった、ということです。

ここで理解しました。Omadaの管理VLANは、コントローラからの投入でしか変わらない。CLIでどれだけVLAN 900にIPを付けても、エージェントの管理VLANは動かない。だから「Pingは通るのに見えない」が起きる。

■ 3日目:ログに全部書いてあった

3日目の朝、コントローラのログ → イベントを、対象のMACアドレスで検索して、ようやく本当の原因が出てきました。

VLAN Configuration Fail

VLAN name configuration on XX-XX-XX-XX-XX-XX failed.

The length should be 1-128, and it only allows letters, numbers and

some special symbols: -@_:/. , please configure it again!

VLAN名は英数字と「- @ _ : / .」だけ。日本語も全角カッコも使えない。

うちのサイトのVLAN名は「【本館】PC」「【共通】管理」……全部これに引っかかります。コントローラはSG3452にサイトのVLAN一式を流し込むのですが、名前で弾かれてVLAN設定の投入が丸ごと失敗していた。VLAN 900 自体がSG3452の中に作られないので、管理VLANを900に変えろと言われても変えられず、IPが消える。1日目に見た症状は、全部これで説明がつきました。

既存のスイッチやAPで問題が出ていなかったのは、機種やファームウェアによってこの制限がないからです。実際、上位SWのES224Gはコントローラの「非互換」一覧に「VLAN名に対応していません」と出ていて、名前を受け取ってすらいません。SG3452 v1.30 の新しいファームだけが、律儀にチェックしていた。

だから、タイトルの言葉になります。コントローラ側で名前を入力する時点で「この文字は一部の機種で使えません」と弾いてくれれば、3日はかからなかった。設定できないものは設定させちゃだめでしょ。

■ 直し方

VLAN名を全部半角英数字に変えました。「【本館】PC」→「HonkanPC」、「【共通】管理」→「ComMGMT」、という具合。ポートプロファイルの名前も念のため英数字に。名前はラベルでしかなく、VLAN IDやポート割当はIDで紐付いているので、通信への影響はありません。

ただし副作用が一つ。上位SWのES224Gは、コントローラ本体がそのポート1に直結しています。VLAN名を1つ変えるたびにコントローラが上位SWにVLAN設定を送り、上位SWが自分のVLANテーブルを書き換える瞬間に、コントローラとの管理セッションが一瞬途切れて「デバイスの応答がタイムアウトしました(switch_-6)」→ ステータスが「構成中」のまま固まる、という現象が出ました。これは デバイス → 設定 → デバイスの管理 → 強制プロビジョニング で解消します。こういう機種への設定変更は、まとめて行って最後に一回プロビジョニングし直すのが吉です。

そのうえで、SG3452 を次の順番で設定しました。「一度アクセスポートでつないで採用し、コントローラから管理VLANを変え、配線を切り替える」というOmadaの流儀どおりです。

0. SG3452 の空きポート ⇔ 上位SWのアクセスポート(ネイティブ VLAN 900)を接続

1. CLI で VLAN 1 に作業用の静的IP 10.90.0.152 を付けて、コントローラで採用

2. デバイス名を英数字に変更

3. ポート48 にトランク用プロファイル(ネイティブ 1、Tagged に 900 を含む)を割当

4. 管理VLANを 900 に変更。ただしIPは いったん DHCP

→ ここで静的 10.90.0.151 を入れると「IPアドレスが同じ範囲」と拒否されます。VLAN 1 に同じサブネットの静的IPが残っているからです

→ 適用直後に「切断されました」になるのは正常。Taggedになった管理フレームをアクセスポートが捨てるだけなので、慌てて戻さない

5. ポート48 ⇔ 上位SWのトランクポート(Tagged 900)に配線を切り替える。1〜2分で再接続

6. VLAN 1 の静的IPを DHCP に変更(これで同一サブネットの静的IPがVLAN 1から外れる)

7. VLAN 900 を静的 10.90.0.151 / 255.255.255.0 / GW 10.90.0.254 に変更

これで、Tagged VLAN 900 の 10.90.0.151 で「接続しました」になりました。show ip interface で VLAN 900 に .151、show vlan でポート48が VLAN 900 の Tagged メンバー、イベントログに VLAN Configuration Fail なし。3日かかった割に、正しい順番でやれば30分です。

■ 学んだこと

・Omadaの管理VLANはコントローラからの投入でしか変わらない。CLIで別のVLANインターフェイスにIPを付けても、エージェントは前回の管理VLANを見続ける。「Pingは通るのにコントローラに現れない」はこれ

・SG3452 の CLI reset は工場出荷状態には戻らない。Omadaエージェントの管理VLAN情報が残る(ログに used mgmt-vlan information from the previous connection と出る)。そしてSG3452には物理のリセットボタンがないので、「ボタン長押し」という一般的な助言は使えない

・SG3452 の工場出荷値は静的 192.168.0.1・DHCPオフ。初期化後にDHCPで取れないのは正常

・シリアルコンソールは 38400bps。9600 では化ける

・VLAN名に日本語・全角記号を使わない。英数字と - @ _ : / . だけ。1台でもフルマネージドのスイッチが混ざるなら、サイト全体を英数字にしておく

・原因は画面ではなくログに出ている。コントローラの ログ → イベント をMACアドレスで検索する、サーバの server.log を grep する、スイッチの show logging buffer を読む。この3つを最初にやっていれば1日で終わっていた

・同一サブネットの静的IPは2つのVLANインターフェイスに同時に付けられない。管理VLANを移すときは DHCP を経由するか、先に旧側を外す

・コントローラ本体が直結しているスイッチのVLAN設定を触ると「構成中」で固まりやすい。強制プロビジョニングで復旧

「設定できないものは設定させちゃだめでしょ」。TP-Linkさん、コントローラ側でVLAN名のバリデーションをお願いします。

(おわり)

hanako