棍棒を振り回すか、外科手術を施すか:Router-on-a-Stickの呪縛と最適化の極致
ネットワークエンジニアという人種は、往々にして「美学」を追い求める。しかし、現実のインフラ設計において、限られたリソースの中で最大限のパフォーマンスを引き出すことは、時に泥臭い妥協と、理論の深淵を覗き込むような微調整の積み重ねだ。
今回は、現代のネットワーク設計において「レガシーの代名詞」のように語られることもある Router-on-a-Stick について、あえて深掘りしたい。なぜなら、L3スイッチ(SVI)が当たり前となった今だからこそ、この「一本の物理リンクに全てを詰め込む」という極端なトポロジーが持つ、パケットの動態とボトルネックを理解することが、真のプロフェッショナルへの試金石となるからだ。
—
1. パケットの行軍:802.1Qのタグが語る真実
Router-on-a-Stick の本質は、物理的な制約を論理的な sub-interface でいかに鮮やかに騙すかにある。ルーターの物理インターフェースに設定された GigabitEthernet0/0.10 や .20 は、単なる仮想的なラベルではない。
IEEE 802.1Qタグが挿入されるその瞬間、イーサネットフレームのヘッダーは4バイト拡張される。この「タグの付与・剥離」というプロセスこそが、この構成における最大の演算負荷源だ。
パケット処理の解剖学
ルーターが VLAN 10 から来たパケットを VLAN 20 へ流す際、内部では以下の挙動がミリ秒単位で行われる。
1. Ingress: 物理インターフェースでタグ付きフレームを受信。
2. De-encapsulation: ルーターのCPU(あるいはASIC)がVLANタグを読み取り、対応するサブインターフェースへマッピング。
3. Routing Decision: ルーティングテーブルを参照し、宛先インターフェース(VLAN 20側のサブインターフェース)を決定。
4. Encapsulation: 新たなVLANタグ(VLAN 20)をフレームに挿入。
5. Egress: 物理ポートから再送出。
この「単一の物理リンクを往復する」という挙動こそが、帯域幅を物理的に半分(厳密には往復分で全帯域を消費)にしてしまう Router-on-a-Stick の宿命だ。もし、このリンクがフルデュプレックスの1Gbpsであっても、実質的なスループットは理論上の上限を大きく下回る。
—
2. 現場の現実:TCPバッファとRTTが織りなす「沈黙のボトルネック」
高負荷なWebトラフィックを扱う環境において、VLAN間ルーティングの遅延は、そのまま TCP Window Size の増大を阻害し、スループットの頭打ちを招く。特にTLSハンドシェイクが頻発する環境では、RTT(Round Trip Time)の僅かな増大が、ユーザー体験に壊滅的な影響を与える。
カーネルレベルでのチューニング
Linuxルーターやゲートウェイでこの構成を組む場合、デフォルトの sysctl 設定では不十分だ。以下のパラメータを調整し、パケットの滞留を最小限に抑える必要がある。
# /etc/sysctl.conf への追加設定例
# 送受信バッファの最大値を拡張し、高遅延時でもスループットを維持
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# パケット処理のキュー長を確保し、瞬発的なバーストによるドロップを抑制
net.core.netdev_max_backlog = 5000
# TCP Fast Openを有効化し、TLSハンドシェイクのRTTを1往復削減
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_fastopen は、クライアントとサーバー間での「初回のやり取り」を最適化する。Router-on-a-Stick でインターフェースが混雑している際、このわずかなRTT削減が、結果的にセッション確立の安定性に直結する。
—
3. セキュリティという名の「見えない壁」
VLAN間ルーティングにおいて、最も恐ろしいのは「VLANが別れているから安全である」という過信だ。Router-on-a-Stick構成では、ルーターが全てのVLANのトラフィックを「見て」いる。
ACL(Access Control List)の最適化
ルーターのCPU負荷を抑えつつ、堅牢なセキュリティを実現するには、ACLの順序がすべてだ。頻繁にマッチするルールを先頭に配置するだけでなく、established キーワードを活用して、戻りパケットの検査を省略する手法を徹底すべきだ。
! Cisco IOSでのACL最適化例
ip access-list extended VLAN10_TO_VLAN20
! 確立済みのセッションは処理をスキップさせる(CPU負荷軽減)
permit tcp any any established
! よく利用されるHTTPS(443)を優先的にマッチさせる
permit tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 443
! その他、拒否ルール
deny ip any any log
—
4. 結び:エンジニアの美学とは
Router-on-a-Stick は、現代の超高速ネットワークにおいては確かに「旧式」かもしれない。しかし、この構成を限界までチューニングし、パケットの挙動を完全に制御下に置くことは、ネットワークアーキテクトにとって、基礎体力とプロトコル理解を証明する最高の舞台だ。
パケットは嘘をつかない。たとえ物理的な制約があろうとも、その中身を理解し、カーネルを叩き、ACLを研ぎ澄ます。それこそが、技術の深淵を愛する我々の、あるべき姿ではないだろうか。
次に show interface を打つとき、そこに流れるのは単なる数字ではなく、躍動するパケットの息遣いであることを忘れないでほしい。
コメント