VLAN間ルーティングの深淵:Router-on-a-Stickの残滓とL3スイッチの現在地
ネットワークエンジニアの諸君、今日もパケットの海を泳いでいるだろうか。
現代のデータセンターやエンタープライズネットワークにおいて、VLAN間ルーティングは空気のように当たり前の存在だ。しかし、その「空気」の品質を左右するのは、物理レイヤの信号品質や論理設計の整合性だけではない。我々インフラアーキテクトが向き合うべきは、L2/L3の境界線でパケットがどのような運命を辿るのか、その「ミリ秒の摩擦」を極限まで減らすことにある。
本稿では、レガシーな Router-on-a-Stick の限界を再考し、L3スイッチ(MLS: Multilayer Switch)における SVI(Switch Virtual Interface)ルーティングの最適解、そしてその先のパフォーマンスチューニングについて、現場の視点から紐解いていく。
—
1. ルータ・オン・ア・スティック:教本的な「詰まり」の正体
Router-on-a-Stick は、VLANをトランクリンク経由でルータへ引き上げ、サブインターフェースでルーティングする手法だ。概念的には美しいが、実務においてこれは「帯域のボトルネック」という名の物理的制約そのものだ。
全ての VLAN 間通信が、単一の物理リンクを往復する。例えば、サーバ間で大容量のデータ転送(East-Westトラフィック)が発生すれば、トランクリンクは瞬く間に飽和し、キューイング遅延がTCPの CWND(Congestion Window)を縮小させる。結果として、TCPの再送制御が発動し、RTT(Round Trip Time)は跳ね上がる。
もし君が大規模なトラフィックを扱うのであれば、この構成は論理的に論外と言わざるを得ない。
—
2. L3スイッチ(SVI)への移行:ハードウェア・フォワーディングの魔力
L3スイッチは、ルータとは次元が異なる。CPU(コントロールプレーン)によるルーティングではなく、ASICやFPGA(データプレーン)によるハードウェア・スイッチングを行うからだ。
SVI(Switch Virtual Interface)を作成することで、VLANはスイッチ内部のバックプレーンに直結される。これにより、パケットは物理ポートを跨ぐことなく、スイッチのファブリック内でルーティング処理される。
SVI設定のベストプラクティス(Cisco IOS例)
# VLANの定義とSVIへのIP割り当て
vlan 10
name Servers
vlan 20
name Clients
# SVIインターフェースの設定
interface Vlan10
description Gateway for Servers
ip address 10.0.10.1 255.255.255.0
# プロキシARPは不要なら無効化(セキュリティと不要なブロードキャスト抑制)
no ip proxy-arp
no ip redirects
interface Vlan20
description Gateway for Clients
ip address 10.0.20.1 255.255.255.0
no ip proxy-arp
ここで重要なのは、no ip redirects だ。ICMPリダイレクトは、ホストに対して最適ではない経路を教える機能だが、モダンなネットワークにおいてこれは攻撃者に「パケットを覗き見られる」隙を与えるセキュリティリスクになる。現代のインフラでは「デフォルトゲートウェイに任せる」のが原則だ。
—
3. パフォーマンスを極限まで引き出す:バッファチューニングとTLS
ルーティングの効率化だけでは、アプリケーションの体感速度は上がらない。特にTLSハンドシェイクが絡む現代のWebトラフィックでは、TCPの Initial Window(IW)の調整が鍵となる。
TCPバッファの最適化(Linuxカーネル設定例)
ルーティングを通過するサーバ側の sysctl で、バッファを拡張し、TCPファストオープン(TFO)を有効にする。
# /etc/sysctl.conf への追記
# TCPバッファの自動チューニング範囲を拡大
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# TCP Fast Openを有効化(3ウェイハンドシェイクを1回分短縮)
# 3はクライアント/サーバ双方で有効化
net.ipv4.tcp_fastopen = 3
# キューイング遅延を防ぐためにfq_codelを導入
net.core.default_qdisc = fq_codel
fq_codel(Fair Queuing Controlled Delay)は、バッファブロート(Bufferbloat)を劇的に改善する。ルータやL3スイッチを通過する際の「パケットの渋滞」を、数学的に検知し、レイテンシに敏感なパケットを優先的に捌く仕組みだ。
—
4. セキュリティ:L3スイッチにおけるACLの罠
VLAN間ルーティングにおいて、最も恐ろしいのは「VLAN間の隔離が不十分であること」だ。SVIに ACL を適用する際は、常に Extended ACL を使い、established オプションを賢く活用して欲しい。
# 戻りパケットを許可しつつ、外部からの新規接続を遮断する例
ip access-list extended ACL_VLAN10_IN
permit tcp 10.0.20.0 0.0.0.255 10.0.10.0 0.0.0.255 established
deny ip any any
この established を使うことで、内側から開始されたコネクションの戻りパケットのみを許可し、外部からの不正なスキャンをステートフルに(擬似的に)防ぐことができる。
—
最後に:ネットワークは「生き物」である
L3スイッチによるSVIルーティングは効率的だが、それは「適切に設計・監視されていること」が前提だ。スイッチのCPU使用率がスパイクしていないか、ASIC の転送レートは飽和していないか。SNMP や gRPC を用いたテレメトリで、パケットの微細な挙動を常に観測し続けること。
パケットがヘッダーを書き換えられ、次のL3デバイスへと転送されるその瞬間。そこに我々エンジニアの美学がある。教科書を閉じて、CLIのプロンプトの向こう側にある「パケットの鼓動」を感じてほしい。
それが、真のインフラアーキテクトへの道だ。
コメント