Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 16 章: NAT / DHCP / DNS を参照。
裏取りステータス: Code-verified
sonic-buildimage/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 L58 と dhcp-relay.programs.j2 L7/L27 で DHCP_RELAY[vlan_name]['dhcpv6_servers'] 条件で v6 用エントリを生成、dhcpv6-relay.agents.j2 L3-4 で dhcpv6_servers ループによる dhcrelay -6 形式の上流サーバ展開を確認。cli-plugin-tests/test_config_dhcp_relay.py / test_show_dhcp_relay.py で dhcpv6_servers キーを使ったテスト構成を確認(verified at: 2026-05-09)。
DHCPv6 リレー(dhcp-relay docker 内の dhcrelay -6 プロセス)¶
概要¶
SONiC の DHCPv4 リレーは dhcp-relay docker 内の isc-dhcp ベースの dhcrelay プロセスで実装されている。本 HLD は 同じ dhcp-relay docker に IPv6 用の dhcrelay -6 を並走させる 形で DHCPv6 リレー機能を追加する設計を定義する1。
主な機能要件1:
- 下流(VLAN 側)から上流への DHCPv6 パケットの中継。
dhcp-relayコンテナ内に IPv4 とは別プロセス として動かす。- 上流の 複数の unicast / multicast 宛先 へのリレーをサポート。
動作仕様¶
構成と前提¶
- 下流(downstream)は VLAN インターフェース。Global IPv6 アドレスがその interface に設定されていること が前提1。
- DHCPv6 のリレー機能を有効にすると、CoPP マネージャから DHCPv6 trap を有効化 する。逆に無効化したら trap も外す。両者は連動する1。
dhcp-relayコンテナの依存は IPv4 と同じくisc-dhcpプロジェクト。dhcrelayバイナリの-6オプションを使う1。
CONFIG_DB スキーマ¶
VLAN テーブルに dhcpv6_servers フィールドが追加される1:
{
"VLAN": {
"Vlan1000": {
"dhcp_servers": ["192.0.0.1", "192.0.0.2"],
"dhcpv6_servers": ["21da:d3:0:2f3b::7", "21da:d3:0:2f3b::6"],
"vlanid": "1000"
}
}
}
dhcp_servers(v4)と dhcpv6_servers(v6)が 同じ VLAN エントリ内に並ぶ。両方を同時に持っても良い。
起動コマンド¶
dhcp-relay コンテナ内で v6 用デーモンが個別に上がる1:
/usr/sbin/dhcrelay -6 -d \
--name-alias-map-file /tmp/port-name-alias-map.txt \
-l Vlan1000 \
-u 21da:d3:0:2f3b::7%Ethernet28 \
-u 21da:d3:0:2f3b::6%Ethernet28
引数の意味1:
| 引数 | 意味 |
|---|---|
-6 |
DHCPv6 モード |
-d |
foreground / debug |
--name-alias-map-file |
port name エイリアスマップファイル |
-l Vlan1000 |
downstream interface(lower) |
-u <addr>%<iface> |
upstream の unicast / multicast 宛先(複数指定可) |
複数の -u を指定することで 複数の DHCPv6 サーバへ同時にリレー できる1。
並列プロセス構成¶
flowchart LR
subgraph DR["dhcp-relay docker"]
V4["dhcrelay (IPv4 既存)"]
V6["dhcrelay -6 (IPv6 新規)"]
end
DOWN[Downstream VLAN\nGlobal IPv6 設定済] --> V6
V6 -->|-u list| UP1[DHCPv6 Server 1]
V6 -->|-u list| UP2[DHCPv6 Server 2]
DOWN --> V4
V4 --> UPv4[DHCPv4 Server]
IPv4 と IPv6 は 同一コンテナ内の別プロセス。両方有効でも片方のみでも構成可能1。
DHCP Monitor¶
既存の DHCP Monitor が DHCPv6 対応に拡張 される1。具体的な拡張点(監視するメッセージタイプの増加、メトリクス命名の方針など)は HLD には詳細記述がない。
初期化フロー¶
HLD には init フロー図(init.svg)が貼られているが文章での詳細はない。一般的な依存関係として、CONFIG_DB の VLAN にエントリが入った段階で dhcp-relay コンテナが起動 / 再起動して dhcrelay -6 プロセスを立てる、という流れになる。
📋 検証エビデンス: sonic-net/SONiC/doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md#L62-L82 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/DHCPv6_Relay/DHCPv6_Relay_HLD.md#L62-L82 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
- DHCPv6 trap should be enabled through the COPP manager when the DHCP relay feature is enabled and vice versa.
- Downstream network is the VLAN interface with the relay configuration. Global IPv6 address is required to be configured on that interface.
"dhcpv6_servers": [ "21da:d3:0:2f3b::7", "21da:d3:0:2f3b::6" ]
判断根拠: CoPP 連動・global IPv6 必須・CONFIG_DB スキーマの根拠。
設定¶
関連する CONFIG_DB¶
| Table | Key | フィールド | 用途 |
|---|---|---|---|
VLAN |
<Vlan name> |
dhcpv6_servers |
リレー先の DHCPv6 サーバアドレス(list) |
VLAN |
<Vlan name> |
dhcp_servers |
既存の DHCPv4 リレー先(list、v4/v6 共存可) |
関連する CLI¶
既存の config vlan dhcp_relay コマンドが IPv4 / IPv6 共通 に拡張される1:
| Command | 用途 |
|---|---|
config vlan dhcp_relay add <vlan_id> <ip> |
リレー先サーバを追加(v4/v6 自動判別) |
config vlan dhcp_relay del <vlan_id> <ip> |
同 削除 |
show vlan brief |
VLAN 一覧(DHCP Helper Address カラムに v4/v6 サーバが混在表示) |
設定例¶
admin@sonic:~$ sudo config vlan dhcp_relay add 1000 21da:d3:0:2f3b::7
Added DHCP relay destination address 21da:d3:0:2f3b::7 to Vlan1000
Restarting DHCP relay service...
show vlan brief の出力例1:
+---------+----------------------+------------+----------+-----------------------+----------+
| VLAN ID | IP Address | Ports | Tagging | DHCP Helper Address | ProxyARP |
+=========+======================+============+==========+=======================+==========+
| 1000 | 21da:d3:0:2f3b::6/96 | Ethernet28 | untagged | 21da:d3:0:2f3b::6 | disabled |
| | | | | 21da:d3:0:2f3b::7 | |
+---------+----------------------+------------+----------+-----------------------+----------+
CLI 操作後は Restarting DHCP relay service... と表示され、コンテナごと再起動して新構成で dhcrelay -6 が立ち上がる1。
制限事項¶
- VLAN インターフェースに global IPv6 アドレスが必須。link-local だけでは relay は起動しない1。
- リレー先サーバ追加 / 削除のたびに DHCP relay service を再起動 する設計。短時間ではあるがリレー断が発生する1。
- HLD は
isc-dhcp由来のdhcrelay -6に依存。同 OSS の v6 機能の制約(option ハンドリング、-uの宛先数上限など)を引き継ぐ。HLD では明示されていない。 dhcrelay -6 -u <addr>%<iface>の zone-id 表記が必要なため、upstream interface 名がコンテナ内で参照可能 であることが前提。
干渉する機能¶
- CoPP マネージャ: DHCPv6 trap の有効化と相互連動する。CoPP 側で trap を別途無効化していると DHCPv6 メッセージが CPU に上がらず、リレー機能だけ有効でも実際に中継できない1。
- 既存 DHCPv4 リレー: 同一
dhcp-relaydocker に並走する別プロセス。config vlan dhcp_relay add/delの引数 IP のアドレス族で自動判別される設計1。 - DHCP Monitor: 既存 monitor の v6 拡張。監視 / メトリクスの一貫性確保のため、運用上は v4/v6 同時に enable する想定1。
docker-dhcp-relayの supervisord: VLAN 構成に応じて-6 -l <vlan> -u <addr>%<iface>を組み立てる Jinja テンプレート(実装詳細は本 HLD で言及されていない)が必要になる。- VLAN の Global IPv6 アドレス管理:
config interface ip add等で適切に設定されていないと relay が立ち上がらない1。
トラブルシューティング¶
dhcrelay -6が立ち上がらない: VLAN に global IPv6 が設定されているか確認。link-local のみだと不可1。- DHCPv6 が一切来ない: CoPP 側の DHCPv6 trap が有効か確認。HLD の連動仕様どおりに動いていない場合、relay enable とは別に trap を確認する必要1。
- リレー先追加で短時間断:
Restarting DHCP relay service...が出る挙動どおり。コンテナ再起動分のダウンタイムが発生1。 show vlan briefのDHCP Helper Addressに v6 が出ない: CLI またはshow側が当該機能未対応の可能性。実装確認は裏取り課題。
コマンド例¶
DHCPv6 relay の設定と統計を確認する。
関連 reference¶
引用元¶
関連 Topics¶
参考リンク¶
本ページに関連する参照ドキュメント: