HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

RFC8950: IPv6ネクストホップでIPv4を発表する

RFC8950: Announce IPv4 with an IPv6 next-hop (anuragbhatia.com)

59 pointsby porridgeraisin27 コメント

要約

RFC8950は、IPv6ネットワーク上でIPv4をルーティングすることを可能にする技術です。これにより、ネットワークコアをIPv6のみにしつつ、エッジデバイスでIPv4をサポートすることが可能になります。この技術は、ISPやIXPがIPv4をオプション機能として維持しながら、ネットワークインフラストラクチャをIPv6のみで運用することを可能にし、管理オーバーヘッドを削減するのに役立ちます。

全文翻訳

RFC8950: IPv6ネクストホップでIPv4を発表する ここ数日間、RFC8950の設定を試しています。これは、IPv6上でIPv4をルーティングすることを可能にします。論理的には非常にシンプルですが、トンネルなしでIPv6ネットワーク上で「IPv4をオプション機能」にするための非常に強力な応用があります。 興味深いユースケースのいくつか: 大規模ネットワークは、コア全体でIPv6のみを実行し、エッジデバイスにIPv4のみを残すことができます。これは、顧客がエンドで何も調整しなくても機能します。彼らは古い方法で物事を続けますが、バックボーンはコアでIPv6のみを実行できます。 IPトランジットバックボーンはIPv6のみを実行しながら、IPv6セッションを介して顧客/ピア/アップストリームとIPv4ルートを交換できます。したがって、IPv4は「機能」として残りますが、ネットワーク自体はIPv4インターフェイス設定、BGPセッション設定、ファイアウォール設定などのオーバーヘッドなしでIPv6のみになります。 IXPは、(一意の) IPv6をIX LANで提供し、ルートサーバーを実行してIPv4およびIPv6ルートをIPv6のみのセッションで交換することにより、本質的にIPv4なしでサービスを提供できます。 したがって、464XLATがモバイルネットワークに対して行ったことは、これがバックボーンネットワークに対して行う可能性を秘めています。 仕組みは? マルチプロトコルBGP (MP-BGP) は、IPv4セッションでIPv6ルートを発表し、IPv6ネクストホップを持つことをサポートします。RFC8950は、IPv4がIPv6ネクストホップを持つようにこの機能を拡張します。したがって、IPv4アドレスの場合、ネクストホップはIPv6であり、IPv6到達性は通常のNDPを介して行われ、IPv4はNDPによって検出された同じMACアドレスでイーサネットフレームに乗って送信されます。技術的には、RFC8950はコントロールプレーンをIPv6として使用することでコントロールプレーンの決定にのみ影響しますが、データプレーンはそのまま維持されます。IPv4はIPv4のままで、ワイヤ上をIPv4として送信されます。これは、トンネルや464xLATなどとは異なります。 ハードウェアサポート 現在、Juniper JunOS、Cisco IOS XR、Nokia SR OS、Mikrotik、Huawei、BIRD、FRRなど、多くのルーティングプラットフォームで広くサポートされています。したがって、最新バージョンのOSを実行している場合は、ほぼ確実にサポートされています。 デモラボ ここでは、2つの顧客ルーターを持つ楽しいラボを紹介します。C1とC2は、コンテナラボのプロバイダー ルーターR1-R2-R3を介して接続されています。ここでのすべてのルーターは、オープンソースFRRを実行しています。 C1は、WAN側がR1に面しており、IPv6のみです。これは、IPv6セッションを介してR1に10.0.0.0/24をオリジネートします。 R1とR2はIPv6のみで、インターフェイスにはIPv4は一切ありません(ただし、テーブルにはIPv4ルートを運びます)。 R3はR2とIPv6を持っていますが、C2とはIPv4のみです。したがって、C2は、IPv6展開がなく、IPv4のみの動作を望む典型的なエンタープライズユーザーのようなものです。 R3は100.64.0.0/24を持っており、IPv4テーブル(IPv6隣接性 - R2へ)にオリジネートします。 C2はR3から与えられた100.64.0.2/30に接続されており、IPv4のみで通信します。 C1とC2は、トンネルなしでIPv6のみの部分があるこのネットワークを介して互いに到達できます。 topology.yml ```yaml name: rfc8950 topology: nodes: R1: kind: linux image: frr-with-bgpd binds: - configs/R1.conf:/etc/frr/frr.conf R2: kind: linux image: frr-with-bgpd binds: - configs/R2.conf:/etc/frr/frr.conf R3: kind: linux image: frr-with-bgpd binds: - configs/R3.conf:/etc/frr/frr.conf C1: kind: linux image: frr-with-bgpd binds: - configs/C1.conf:/etc/frr/frr.conf C2: kind: linux image: frr-with-bgpd binds: - configs/C2.conf:/etc/frr/frr.conf links: - endpoints: ["C1:eth1", "R1:eth1"] - endpoints: ["R1:eth2", "R2:eth1"] - endpoints: ["R2:eth2", "R3:eth1"] - endpoints: ["R3:eth2", "C2:eth1"] ``` ```bash > clab deploy -t topology.yml 16:37:08 INFO Containerlab started version=0.76.1 16:37:08 INFO Parsing & checking topology file=topology.yml 16:37:09 INFO Creating lab directory path=~/ipv4-over-ipv6/clab-rfc8950 16:37:09 INFO Creating container name=C2 16:37:09 INFO Creating container name=C1 16:37:09 INFO Creating container name=R1 16:37:09 INFO Creating container name=R2 16:37:09 INFO Creating container name=R3 16:37:09 INFO Created link: R3:eth2 ▪┄┄▪ C2:eth1 16:37:09 INFO Created link: C1:eth1 ▪┄┄▪ R1:eth1 16:37:09 INFO Created link: R1:eth2 ▪┄┄▪ R2:eth1 16:37:09 INFO Created link: R2:eth2 ▪┄┄▪ R3:eth1 16:37:09 INFO Adding host entries path=/etc/hosts 16:37:09 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-rfc8950.conf ╭─────────────────┬───────────────┬─────────┬───────────────────╮ │ Name │ Kind/Image │ State │ IPv4/6 Address │ ├─────────────────┼───────────────┼─────────┼───────────────────┤ │ clab-rfc8950-C1 │ linux │ running │ 172.20.20.6 │ │ │ frr-with-bgpd │ │ 3fff:172:20:20::6 │ ├─────────────────┼───────────────┼─────────┼───────────────────┤ │ clab-rfc8950-C2 │ linux │ running │ 172.20.20.4 │ │ │ frr-with-bgpd │ │ 3fff:172:20:20::4 │ ├─────────────────┼───────────────┼─────────┼───────────────────┤ │ clab-rfc8950-R1 │ linux │ running │ 172.20.20.2 │ │ │ frr-with-bgpd │ │ 3fff:172:20:20::2 │ ├─────────────────┼───────────────┼─────────┼───────────────────┤ │ clab-rfc8950-R2 │ linux │ running │ 172.20.20.8 │ │ │ frr-with-bgpd │ │ 3fff:172:20:20::8 │ ├─────────────────┼───────────────┼─────────┼───────────────────┤ │ clab-rfc8950-R3 │ linux │ running │ 172.20.20.5 │ │ │ frr-with-bgpd │ │ 3fff:172:20:20::5 │ ╰─────────────────┴───────────────┴─────────┴───────────────────╯ Checking C1 for route to C2 C1# show ip bgp 100.64.0.2 BGP routing table entry for 100.64.0.0/24, version 2 Paths: (1 available, best #1, table default) Advertised to non-peer-group peers: 2001:db8:0:1::1 65501 65502 65503 2001:db8:0:1::1 from 2001:db8:0:1::1 (172.20.20.2) (fe80::a8c1:abff:fe60:5467) (used) Origin IGP, valid, external, best (First path received) Last update: Mon Jun 22 18:57:38 2026 C1# C1 -> C2 trace C1# traceroute 100.64.0.2 traceroute to 100.64.0.2 (100.64.0.2), 30 hops max, 46 byte packets 1 clab-rfc8950-R1.clab (172.20.20.2) 0.004 ms 0.004 ms 0.002 ms 2 clab-rfc8950-R2.clab (172.20.20.8) 0.002 ms 0.003 ms 0.003 ms 3 clab-rfc8950-R3.clab (172.20.20.5) 0.002 ms 0.003 ms 0.003 ms 4 100.64.0.2 (100.64.0.2) 0.002 ms 0.006 ms 0.003 ms C1# Note: It took IPv4 from the eth0 management interfaces as deployed by Container Lab for TTL exceeded used in the trace. If I check R1, it has only IPv6 sessions but no IPv6 prefixes R1# sh bgp ipv6 summary IPv6 Unicast Summary (VRF default): BGP router identifier 172.20.20.2, local AS number 65501 VRF-ID 0 BGP table version 0 RIB entries 0, using 0 bytes of memory Peers 2, using 1434 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc 2001:db8:0:1::2 4 64512 151 141 0 0 0 00:39:19 0 0 N/A 2001:db8:0:2::2 4 65502 65 64 0 0 0 00:36:46 0 0 N/A Total number of neighbors 2 R1# Checking for IPv4 routes on R1 R1# sh bgp ipv4 BGP table version is 4, local router ID is 172.20.20.2, vrf id 0 Default local pref 100, local AS 64512 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 10.0.0.0/24 fe80::a8c1:abff:fe44:afb8 0 0 64512 i *> 100.64.0.0/24 fe80::a8c1:abff:fed8:5eb5 0 65502 65503 i Displayed 2 routes and 2 total paths R1# Router Configs Router | Link R1 | Click here R2 | Click here R3 | Click here C1 | Click here C2 | Click here