# PTX VoQ 101
PTXシリコンには、インターフェースごとの仮想出力キュー(VoQ)が搭載されており、ラインカードCPUにパントされたパケット専用のキューも含まれています。理論上はコントロールプレーンのヴァルハラと言えるでしょうが、実際にはデフォルトのキューマップは毛玉のようなものです。巧妙に仕組まれたわずか10Mbpsのノイズでも、ルーティングプロトコルを飢餓状態に陥らせ、シャーシを不活性なヒートシンクに変えてしまう可能性があります。その理由を紐解いてみましょう。
## VoQの理論と現実
**VoQの本来の動作**
- 各インターフェースは8つのキューを所有し、そのうち半分は保証された帯域幅、残りの半分はベストエフォートのオーバーフローです。
- BGP、OSPF、gRPCテレメトリは、ハード予約された高優先度キューに格納されます。
- バルク転送(TFTP、HTTPイメージフェッチ)は、空きサイクルを奪う可能性のある中間層のキューに格納されます。
- ICMP pingと不要なUDPは、格安の超過キューに格納されます。
**標準装備**
- 内蔵の分類器は、パントされたパケットのほとんど(良、悪、カオスニュートラル)を同じキューに送り込みます。
- キュー2は10Mbpsに制限されており、従来はバーストが発生しませんでした。ファームウェアのコピーはダイヤルアップのようにゆっくりと進み、小規模な標的型フラッドはキープアライブを破壊します。実に素晴らしい。
## 実現しなかった「修正」
Juniperはバーストパラメータを緩和しましたが、不安定な分類器はそのまま残しました。これにより、悪意のあるトラフィックがより多くの帯域幅を占有し、予測不能な急上昇を起こし、ルーターをさらに急速にブラックホール化させる可能性があります。まさに「他人の不幸を喜ぶ」気持ちです。
## DIYチューニングでは救われない理由
- Junosは`ddos-protocols`ノブを公開していますが、パントキューマッピングは依然としてハードコードされています。
- たとえ公開されていたとしても、多くの組織では既によりシンプルな`lo0`フィルタを巧妙に操作しています(プロのヒント:SPORT/DPORTの入れ替えはMXの書籍の例をすり抜けてしまいます)。VoQの手術を彼らに任せるのは…ダーウィンの考えです。
- キューの計算は単純ではありません。トークンバケット、バースト負債、マイクロバースト吸収などです。チューニングを誤れば、独自のDoS攻撃を仕掛けることになります。
## _すべき_こと_(ベンダー様へ)
- プロトコルの再マッピング、キューごとの保証のサイズ変更、バースト制限の設定を行うための、ドキュメント化されたCLI/NETCONFモデルを公開してください。
- バルク転送を制御トラフィックから分離し、認証されていないパントをわずかな容量に制限する、強化されたデフォルトプロファイルを提供します。
- 障害によるツイートストームが発生する前に、オペレーターがキューのヘッドルームを確認できるように、参照トラフィックモデルを公開します。
## 今すぐ導入できる暫定的な緩和策
- エッジポリシング - ジャンクがPTXに到達する前にドロップまたはレート制限します。
- TAC専用ノブ - リスクプロファイルがエスカレーションを正当化する場合は、Juniperに隠しコマンドを要求します。
- カナリアを監視する - `show class-of-service queue voq` カウンターをテレメトリにストリーミングします。テールドロップの増加は、障害発生の兆候です。
## まとめ
シリコンは堅牢です。デフォルトのキュー分類は潜在的な障害です。パントキューが再構築されるまでは、10Mbpsの速度とWiresharkさえあれば、スクリプトキディがNOCに高額なラブレターを送ることは可能です。リスクレジスターを適宜調整し、丁寧ながらも厳格さを保ったJTACテンプレートを常に用意しておきましょう。