メインコンテンツまでスキップ

DHCPv6-PD 上の DS-Lite (IPv6 のみアクセス網)

IPv6-only access で DHCPv6-PD、delegated LAN IPv6、AFTR DNS forwarding、DS-Lite tunnel egress、安全な RA を構成する流れ

想定するシーン

ISP が IPv6 のみのアクセス網を提供し、IPv4 接続は AFTR (Address Family Transition Router) への DS-Lite トンネルで実現する構成です。 このとき、ルーターは次を担います。

  • DHCPv6-PD で IPv6 プレフィックスを取得し、LAN へ配ります。
  • AFTR への DS-Lite (IPv4-in-IPv6 / ip6tnl) トンネルを確立します。
  • AFTR の FQDN はアクセス網の DNS でしか解けない場合があるため、条件付き転送を使います。
  • IPv6 RA に RDNSS を含めて、SLAAC クライアント (Android を含む) へ DNS を伝えます。

このパターンは、日本国内のフレッツ系回線 (NTT NGN + gw.transix.jp など) で典型的ですが、同様の DS-Lite 配備全般に適用できます。

前提

  • WAN インターフェースが、HGW か ONU を経由して IPv6 のみのアクセス網につながっています。
  • そのインターフェースで DHCPv6-PD を利用できます。
  • AFTR の DNS が DHCPv6 の information-request で返るかどうかは ISP や HGW 次第です。どちらの場合にも備えてください。

DHCPv6-PD

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv6PrefixDelegation
metadata:
name: wan-pd
spec:
interface: wan

リースは次の場所に保存されます。

/var/lib/routerd/dhcpv6-client/wan-pd/lease.json

デーモンの状態は Unix ソケットで確認できます。

curl --unix-socket /run/routerd/dhcpv6-client/wan-pd.sock http://unix/v1/status

LAN アドレス導出と RA

- apiVersion: net.routerd.net/v1alpha1
kind: IPv6DelegatedAddress
metadata:
name: lan-from-pd
spec:
interface: lan
prefixDelegation: wan-pd
dependsOn:
- resource: DHCPv6PrefixDelegation/wan-pd
phase: Bound
addressSuffix: "::1"

- apiVersion: net.routerd.net/v1alpha1
kind: IPv6RouterAdvertisement
metadata:
name: lan-ra
spec:
interface: lan
prefixFrom:
resource: IPv6DelegatedAddress/lan-from-pd
field: address
oFlag: true
rdnssFrom:
- resource: IPv6DelegatedAddress/lan-from-pd
field: address

RA で広告する RDNSS には、委任されたプレフィックスから導出した LAN 側アドレスを使います。 SLAAC クライアントは、このリゾルバを自動で取得します。

AFTR の条件付き DNS 転送

AFTR の FQDN は、通常 ISP のアクセス網 DNS でしか解けません。 そのドメインだけをアクセス網のリゾルバへ転送し、それ以外は通常の上流に流します。

- apiVersion: net.routerd.net/v1alpha1
kind: DNSResolver
metadata:
name: resolver
spec:
listen:
- name: local
addresses: [127.0.0.1]
port: 53
sources:
- name: aftr
kind: forward
match: [transix.jp]
upstreams:
- udp://[2404:8e00::feed:101]:53
- name: default
kind: upstream
match: ["."]
upstreams:
- udp://1.1.1.1:53

transix.jp と上流の IPv6 アドレスは、ISP が公開している値に置き換えてください。

DS-Lite トンネル

- apiVersion: net.routerd.net/v1alpha1
kind: DSLiteTunnel
metadata:
name: ds-lite
spec:
interface: wan
tunnelName: ds-routerd
localAddressSource: interface
aftrFQDN: gw.transix.jp
dependsOn:
- resource: DNSResolver/resolver
phase: Applied

localAddressSource: interface は、SLAAC/RA で WAN 側に付いた IPv6 アドレスを、トンネルのローカルエンドポイントとして使います。 このアドレスは LAN 側の導出より早く取れるため、トンネルが早く立ち上がります。

ISP が安定した AFTR アドレスを公開していて、DNS 解決を省きたい場合は、aftrIPv6 を直接指定します。

spec:
aftrIPv6: 2001:db8:cafe::1

NTT NGN の HGW のように、DHCPv6 の information-request で AFTR が返らない環境では、aftrFQDN または aftrIPv6 の静的な指定が正しいフォールバックです。

トンネル内側の IPv4 アドレスには、通常 RFC 6333 の B4-AFTR リンク範囲 192.0.0.0/29 を使います。 LAN 範囲から切り出したアドレスを使いたい場合は、IPv4StaticAddress リソースで定義します。 その値を DSLiteTunnel.localAddressFromNAT44Rule.snatAddressFrom から参照します。 任意指定の例は examples/dslite-lan-range-snat.yaml にあります。

動作確認

routerctl apply --config router.yaml --dry-run
routerctl status

ip -6 tunnel show
ip route show default
nft list table ip routerd_nat

# トンネル経由で IPv4 の疎通を確認
curl --interface ds-routerd https://1.1.1.1/

まず dry-run で確認し、計画が妥当でロールバック経路もある状態で本適用してください。

関連項目