VyOS rolling では VPP dataplane を利用できるようになっており、従来の Linux kernel dataplane とは異なる高速なパケット処理基盤として扱えます。VPP / DPDK は、単純な L3 forwarding や packet-rate の高い dataplane 処理では強力な選択肢になります。
一方で、実運用中の VyOS ルーターに VPP をそのまま入れる場合、話はかなり変わります。特に、Firewall、NAT、PBR、QoS、OSPF、DHCP、DNS forwarding、VPN、PPPoE、管理系 VRF まで一台に集約している構成では、VPP 化は高速化のための interface 置換ではありません。
この記事では、自宅インフラの物理 VyOS ルーターを前提に、VPP を本番 dataplane として入れられるのかを整理します。結論から言えば、VPP は有力な技術ですが、統合ルーターに対しては dataplane の責務分界を切り直さない限り、そのまま適用しにくい と考えています。
書籍
マスタリング TCP/IP ルーティング編
OSPF、BGP、経路制御、ルーティング設計を体系的に確認したい場合の参考書籍です。VyOS や VPP の前提になる L3 設計を確認する入口として紹介します。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
まず結論
今回の構成では、既存の物理 VyOS ルーター全体を VPP dataplane へ移す判断はしません。理由は、性能面では魅力があっても、制御面の依存関係が多すぎるためです。
| 観点 | 判断 |
|---|---|
| 単純な L3 forwarding | VPP の得意領域。検証対象としては十分に価値がある |
| PBR / Firewall / QoS | Linux kernel dataplane 側の適用点に依存している場合、そのままでは前提が崩れる |
| PPPoE / NAT / VPN | 外部接続や状態管理と密結合しやすく、初期移行対象として重い |
| OSPF / service listen | FRR や DHCP / DNS などの control plane / service plane との境界確認が必要 |
| 本番ルーター全体 | interface 置換ではなく、dataplane 責任分界の再設計になる |
つまり、VPP が悪いという話ではありません。VPP に向いた dataplane と、Linux kernel / VyOS 通常機能に任せるべき制御機能を混ぜたまま導入しようとすると、運用上の説明責任が曖昧になる、という話です。
VPP は Linux kernel dataplane の高速版ではない
まず前提として、VPP は Linux kernel dataplane を単純に高速化したものではありません。VyOS の公式ドキュメントでも、VPP dataplane は性能上の利点を持つ一方で、Linux kernel dataplane の全機能と feature parity があるわけではないと説明されています。
これは非常に重要です。既存の VyOS 設定で動いている Firewall、PBR、QoS、NAT、service listen、routing protocol が、VPP 側の forwarding path にそのまま同じ意味で適用されるとは限りません。
| 層 | 主な役割 | VPP 化時の論点 |
|---|---|---|
| Linux kernel dataplane | 通常の interface、routing、nftables、QoS、conntrack など | 既存の VyOS 機能がここに依存している場合が多い |
| VPP dataplane | userspace packet processing、DPDK、VPP ACL、VPP NAT、tunnel など | 高速だが、使える機能と運用方法を個別に確認する必要がある |
| control plane / service plane | FRR、DHCP、DNS forwarding、NTP、管理アクセスなど | どの interface / dataplane から到達させるかを設計する必要がある |
対象環境は単純な L3 ルーターではない
検討対象は、単純な Ethernet forwarding 装置ではなく、実運用中の物理 VyOS ルーターです。このルーターは、内部 routing、外部接続、VPN、NAT、Firewall、管理系、監視までを一台で受け持っています。
- IPv4 / IPv6 dual stack routing
- OSPF / OSPFv3
- Static route redistribution
- Policy Based Routing
- Firewall
- NAT44 / NAT66
- PPPoE
- OpenVPN site-to-site
- GRE tunnel
- DHCP server / DNS forwarding / NTP
- QoS
- management VRF
- Prometheus exporter / LLDP
このような構成では、interface は単なる port ではありません。経路制御、セキュリティ、NAT、QoS、管理アクセス、監視の適用点です。そのため、VPP 化の影響は interface 単位ではなく、ルーター全体の責務に波及します。
bond0 は性能面では候補だが制御面では重い
最初に VPP 化の候補に見えたのは内部側の bond0 です。内部 core 側の高速転送経路であり、MTU 9000 の jumbo frame と LACP bonding を使っているため、性能面だけを見ると VPP の対象として自然に見えます。
しかし、bond0 は単純な uplink ではありません。OSPF / OSPFv3、DHCP、QoS、Firewall trust、PBR の適用点になっています。特に、source prefix に応じて routing table を分ける PBR が入っている場合、ここを VPP 側へ移すと既存の kernel dataplane 前提が崩れます。
bond0 ingress
private / ULA 宛ては通常経路
OSPF / OSPFv3 は通常扱い
public 系 source は別 routing table
IPv4 default は tunnel next-hop
IPv6 default は tunnel next-hopこの構造では、bond0 は高速転送の入口であると同時に、経路制御上の分岐点でもあります。つまり、VPP 化するなら、PBR 相当の処理を VPP 側で持つのか、LCP 境界で吸収するのか、Linux routing table に残すのか、FRR との関係をどうするのかを決めなければなりません。
PPPoE / outside 側は初期移行対象にしにくい
外部接続側はさらに慎重に扱う必要があります。IPv4 は PPPoE 上で NAT masquerade、IPv6 は外側 interface で autoconf と NAT66、さらに outside firewall、MSS adjust、default route が絡みます。
- PPPoE
- IPv6 autoconf
- NAT44 / NAT66
- outside firewall
- MSS adjust
- default route
- ISP 側接続性
ここを VPP 化する場合、単に forwarding path を速くするだけでは済みません。外部接続が落ちた時の切り戻し、NAT / Firewall の適用点、IPv6 prefix の扱い、PPPoE の制約、監視と障害解析まで含めて再設計になります。初期検証対象としては重すぎます。
VPP が向く領域
今回の検討から、VPP が向く領域もかなり明確になります。VPP は、既存ルーターの全部を置き換えるよりも、責務を限定した dataplane として使う方が筋が良いです。
| 向く領域 | 理由 |
|---|---|
| 単純な高速 L3 forwarding | 制御点が少なく、VPP の性能面の利点を評価しやすい |
| DPDK NIC を使った dataplane 検証 | NIC queue、hugepages、CPU worker などを含めて性能検証しやすい |
| VPP ACL で完結する通信制御 | Linux firewall に戻さず、VPP 側で責務を閉じやすい |
| GRE / VXLAN / IPsec などの tunnel 検証 | VPP 側の機能範囲に収まる場合、NFV / CNF の研究対象になる |
| 既存ルーターから分離した forwarding path | 本番ルーターの control plane と切り離して検証できる |
逆に、Linux kernel firewall、interface ingress PBR、kernel QoS、PPPoE、NAT、VPN、DHCP、DNS forwarding、FRR、管理系 VRF が一台に密結合している場合は、導入難度が一気に上がります。
本番投入するなら分離設計が先に必要
本番に近い形で VPP を扱うなら、まず VPP に任せる領域を狭く切るべきです。既存ルーター全体を置き換えるのではなく、検証 VLAN、未使用 NIC、専用 forwarding segment、専用 tunnel endpoint のように、障害時の影響範囲を限定できる場所から始める方が現実的です。
| 段階 | 内容 |
|---|---|
| 検証 1 | 未使用 NIC または isolated VLAN で VPP interface を作る |
| 検証 2 | DPDK driver、hugepages、CPU worker、queue 設定を確認する |
| 検証 3 | VPP ACL / NAT / tunnel を単体で確認する |
| 検証 4 | Linux kernel dataplane との境界、LCP、FRR、監視を確認する |
| 本番判断 | 既存ルーターの機能を置き換えるのではなく、VPP 専用 dataplane として責務を分ける |
最終判断
今回の物理 VyOS ルーターに対して、VPP を本番 dataplane として全面導入することは見送ります。
理由は、bond0 に PBR、Firewall、QoS、OSPF / OSPFv3、DHCP が絡んでおり、outside 側にも PPPoE、NAT44、NAT66、Firewall、MSS adjust が密結合しているためです。この構成では、VPP 化による性能上の利点よりも、制御機能の再設計負荷と切り戻しリスクの方が大きくなります。
ただし、VPP 自体は今後も検証対象として残します。DPDK、VPP ACL、VPP NAT、GRE / VXLAN、CNF / NFV dataplane の研究には価値があります。重要なのは、既存ルーターの全機能を一気に VPP へ寄せることではなく、VPP に任せる dataplane を明確に切り出すことです。
まとめ
VyOS VPP は、高速な dataplane を作るための有力な選択肢です。しかし、実運用中の統合ルーターに対しては、Linux kernel dataplane の高速版として単純に扱うべきではありません。
PBR、Firewall、QoS、NAT、PPPoE、VPN、DHCP、DNS forwarding、OSPF / OSPFv3、管理系 VRF まで含むルーターでは、interface を VPP に移すだけでなく、どの機能をどの dataplane が責任を持つのかを設計し直す必要があります。
今回の結論は、VPP は本番ルーター全体の置換先ではなく、責務を限定した高速 dataplane として扱うべき というものです。性能を上げるために制御点を失うのではなく、性能を求める場所だけを切り出す。その順序が重要です。
参考資料
- VyOS 公式: VPP Configuration
- VyOS 公式: VPP Dataplane Limitations
- VyOS 公式: VPP Dataplane Interfaces Configuration
- VyOS 公式: VPP Dataplane Troubleshooting
- FD.io: Vector Packet Processing
関連記事
- DPDK で VM ネットワークを高速化する考え方 – dataplane / NFV / kernel bypass を見る
- パブリッククラウドで NFV は成立するのか – 仮想アプライアンスを置く前に考えること
- AWS EC2 のネットワーク帯域をどう読むか – baseline / burst / single-flow と NFV 設計
- AWS Direct Connect は何を接続するのか – Connection / VIF / DXGW / TGW の責務分界
- AWS VPC に L2 はあるのか – VLAN / ARP / VIP をクラウドの到達性モデルへ翻訳する
- クラウド管理型ネットワークと高度設計型ネットワークの違い – 抽象化と制御責任で考える
- VyOS MSS 設定 – TCP MSS 調整の基本
- VyOS PPPoE 利用時の MTU と MSS



