サマリ
Windows 10 ビルド 15063 (Creators Update) に、RFC6106 RDNSS, DNSSL のクライアント機能が載っていた。MicrosoftがAPNIC blogにポストした記事で Windows10のDHCPv6, RAでのIPv6アドレスおよびDNS設定まわりの動作[1]の状況を解説していたが、実装が出てきたものと思われる。なお、RFC6106はすでにobsolutedで、最新仕様はRFC8106。[2]に差分が解説されている。
やってみた
環境
- ルータ: Ubuntu 16.04 + radvd
- ノード: Windows 10 Pro ビルド 15063 (Creators Update)
IPv6 only (DHCPv4サーバなし) でRA+prefix information optionで/64のprefixを1つ広告しつつ、DNSサーバ(3つ)、サフィックスリスト(2つ)を配布。
+-----------------+ +-------------------+
| |ens33 Ethernet0| |
| Ubuntu 16.04 *--------------------------* Windows 10 (15063)|
| (ルータ) | 2001:db8:0:1::/64 | (ノード) |
+-----------------+ +-------------------+
RA --->
+PIO 2001:db8:0:1::/64
+RDNSS 2001:db8::53:{1,2,3} (3つ)
+DNSSL example.com example.jp (2つ)
```
## ルータ側の設定
```
# /etc/radvd.conf
interface ens33
{
AdvSendAdvert on;
prefix 2001:db8:0:1::/64
{
AdvOnLink on;
AdvAutonomous on;
};
RDNSS 2001:db8::53:1 2001:db8::53:2 2001:db8::53:3 {
# AdvRDNSSLifetime infinity
# Default: 2*MaxRtrAdvInterval
# FlushRDNSS on|off
# Default: on
};
DNSSL example.com example.jp {
# AdvRDNSSLifetime infinity
# Default: 2*MaxRtrAdvInterval
# FlushRDNSS on|off
# Default: on
};
};
```
## ノード側の Windows 10 の動き
netshで確認できるインターフェイスの設定項目に
```
RA ベースの DNS 構成 (RFC 6106) : enabled
DHCP/静的 IP の共存 : enabled
```
2つの設定項目が増えており、RFC6106はデフォルトでONになっていた。
```
PS C:\> netsh int ipv6 show interfaces interface=Ethernet0 level=verbose
インターフェイス Ethernet0 パラメーター
----------------------------------------------
IfLuid : ethernet_32769
IfIndex : 5
状態 : connected
メトリック : 25
リンク MTU : 1500 バイト
到達可能な時間 : 24500 ミリ秒
基本の到達可能な時間 : 30000 ミリ秒
再転送間隔 : 1000 ミリ秒
DAD 転送 : 1
サイト プレフィックスの長さ : 64
サイト ID : 1
転送 : disabled
アドバタイズ : disabled
近隣探索 : enabled
近隣到達不可能性検出 : enabled
ルーター発見 : enabled
管理されたアドレス構成 : disabled
その他のステートフル構成 : disabled
脆弱なホストによる送信 : disabled
脆弱なホストによる受信 : disabled
自動メトリックの使用 : enabled
既定ルートを無視 : disabled
アドバタイズされたルーターの有効期間: 1800 秒
既定ルートのアドバタイズ : disabled
現在のホップ制限 : 64
ARPND スリープ解除パターンの強制 : disabled
指定の MAC スリープ解除パターン : disabled
ECN 機能 : application
RA ベースの DNS 構成 (RFC 6106) : enabled
DHCP/静的 IP の共存 : enabled
```
### RDNSS, DNSSL 入りRAを受信する
状態確認のコマンドをそれぞれ動かしてみる。
- ipconfig /all
- netsh int ipv6 show dnsservers
- Get-DnsClient (PowerShellのコマンドレット)
- Get-DnsClientServerAddress (PowerShellのコマンドレット)
```
PS C:\> ipconfig /all
Windows IP 構成
ホスト名. . . . . . . . . . . . . . .: TESTENV
プライマリ DNS サフィックス . . . . .: TESTENV.JP
ノード タイプ . . . . . . . . . . . .: ハイブリッド
IP ルーティング有効 . . . . . . . . .: いいえ
WINS プロキシ有効 . . . . . . . . . .: いいえ
DNS サフィックス検索一覧. . . . . . .: TESTENV.JP
example.com
example.jp
イーサネット アダプター Ethernet0:
接続固有の DNS サフィックス . . . . .: example.com
説明. . . . . . . . . . . . . . . . .: Intel(R) 82574L Gigabit Network Connection
物理アドレス. . . . . . . . . . . . .: 00-0C-29-80-6D-5A
DHCP 有効 . . . . . . . . . . . . . .: はい
自動構成有効. . . . . . . . . . . . .: はい
IPv6 アドレス . . . . . . . . . . . .: 2001:db8:0:1:a4bf:fbd5:49c6:33e8(優先)
一時 IPv6 アドレス. . . . . . . . . .: 2001:db8:0:1:7d8d:b0c9:2421:a5a4(優先)
リンクローカル IPv6 アドレス. . . . .: fe80::a4bf:fbd5:49c6:33e8%5(優先)
自動構成 IPv4 アドレス. . . . . . . .: 169.254.51.232(優先)
サブネット マスク . . . . . . . . . .: 255.255.0.0
デフォルト ゲートウェイ . . . . . . .: fe80::20c:29ff:fe0d:8de%5
DHCPv6 IAID . . . . . . . . . . . . .: 33557545
DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-1D-A0-E0-6A-00-0C-29-80-6D-5A
DNS サーバー. . . . . . . . . . . . .: 2001:db8::53:1
2001:db8::53:2
2001:db8::53:3
NetBIOS over TCP/IP . . . . . . . . .: 有効
接続固有の DNS サフィックス検索の一覧:
example.com
example.jp
```
```
PS C:\> netsh int ipv6 show dnsservers
インターフェイスの構成 "Ethernet0"
DHCP で構成された DNS サーバー: 2001:db8::53:1
2001:db8::53:2
2001:db8::53:3
次のサフィックスで登録します: プライマリのみ
```
```
PS C:\> Get-DnsClient
InterfaceAlias Interface ConnectionSpecificSuffix ConnectionSpecificSuffix RegisterThisConn UseSuffixWhen
Index SearchList ectionsAddress Registering
-------------- --------- ------------------------ ------------------------ ---------------- -------------
Ethernet0 5 example.com {example.com, example... True False
```
```
PS C:\> Get-DnsClientServerAddress
InterfaceAlias Interface Address ServerAddresses
Index Family
-------------- --------- ------- ---------------
Ethernet0 5 IPv4 {}
Ethernet0 5 IPv6 {2001:db8::53:1, 2001:db8::53:2, 2001:db8::53:3}
Bluetooth ネットワーク接続 14 IPv4 {}
Bluetooth ネットワーク接続 14 IPv6 {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}
Loopback Pseudo-Interface 1 1 IPv4 {}
Loopback Pseudo-Interface 1 1 IPv6 {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}
```
## アダプタ設定で値をセットする際のパラメータ
Creators Update で増えていたのは2つ
```
取りうる設定値はenabled, disabledの2値
[[rabaseddnsconfig=]enabled|disabled]
[[dhcpstaticipcoexistence=]enabled|disabled]
rabaseddnsconfig - RA ベースの DNS 構成 (RFC 6106) が有効になっているか
どうかを示します。
dhcpstaticipcoexistence - DHCP と静的 IP の共存が有効になっているかどうかを示します。
```
```
PS C:\> netsh int ipv6 set interface help
使用法: set interface [interface=]<文字列> [[forwarding=]enabled|disabled]
[[advertise=]enabled|disabled] [[mtu=]<整数>]
[[siteprefixlength=]<整数>]
[[nud=]enabled|disabled] [[basereachabletime=]<整数>]
[[retransmittime=]<整数>] [[dadtransmits=]<整数>]
[[routerdiscovery=]enabled|disabled|dhcp]
[[managedaddress=]enabled|disabled]
[[otherstateful=]enabled|disabled]
[[weakhostsend=]enabled|disabled]
[[weakhostreceive=]enabled|disabled]
[[ignoredefaultroutes=]enabled|disabled]
[[advertisedrouterlifetime=]<0-65535>]
[[advertisedefaultroute=]enabled|disabled]
[[currenthoplimit=]<0-255>] [[store=]active|persistent]
[[forcearpndwolpattern=]enabled|disabled]
[[enabledirectedmacwolpattern=]enabled|disabled]
[[ecncapability=]ecndisabled|ect1|ect0|application]
[[rabaseddnsconfig=]enabled|disabled]
[[dhcpstaticipcoexistence=]enabled|disabled]
パラメーター:
タグ 値
interface - インターフェイス名またはインデックスです。
forwarding - このインターフェイスに届いたパケットを他の
インターフェイスに転送できるかどうかを示します。
advertise - ルーター アドバタイズがこのインターフェイスに送信
されるかどうかを示します。既定は disabled です。
mtu - このインターフェイスの MTU です。
既定はリンクのナチュラル MTU です。
metric - インターフェイス上のすべてのルート用にルート
メトリックに追加された、インターフェイス
メトリックです。
siteprefixlength - サイトのグローバル プレフィックスの既定の長さです。
nud - 近隣の到達不可能性検出が有効かどうかを示します。
インターフェイスの種類により既定値は異なります。
basereachable - 基本の到達可能時間です (ms)。
retransmittime - 再転送時間です (ms)。
dadtransmits - 重複アドレス検出の転送数です。
routerdiscovery - 有効、無効、または DHCP による制御に設定できます。
managedaddress - 管理されたアドレス構成が有効かどうかを示します。
このパラメーターを設定しても、ルーター発見が有効
でアドバタイズが無効なインターフェイスには影響は
ありません。この場合、パラメーターはルーター発見
により制御されます。
otherstateful - その他のステートフルな構成が有効かどうかを示し
ます。このパラメーターを設定しても、ルーター発見
が有効でアドバタイズが無効なインターフェイスには
影響はありません。その場合、パラメーターは
ルーター発見により制御されます。
weakhostsend - 脆弱なホストの送信が有効かどうかを示します。
weakhostreceive - 脆弱なホストの受信が有効かどうかを示します。
ignoredefaultroutes- インターフェイス上の既定ルートを無視します。
既定値: Disabled
advertisedrouterlifetime- ルーターの有効期間です (秒単位)。
既定値は 1800 です。
advertisedefaultroute- インターフェイスが既定ルーターとしてアドバタイズ
されるかどうかを示します。
currenthoplimit - 送信トラフィックのホップ制限です。
store - active: 設定は次の起動時までしか適用されません。
persistent: 設定は固定されます。
forcearpndwolpattern- アドレス解決と近隣探索のパケット パターンが
コンピューターのスリープを解除するように
構成されているかどうかを示します。
enabledirectedmacwolpattern - 指定の MAC パケット パターンが
コンピューターのスリープを解除するように
構成されているかどうかを示します。
ecncapability - 発信パケットが ECN でマークされるかどうかを示します。
rabaseddnsconfig - RA ベースの DNS 構成 (RFC 6106) が有効になっているか
どうかを示します。
dhcpstaticipcoexistence - DHCP と静的 IP の共存が有効になっているかどうかを示します。
注釈: インターフェイス構成パラメーターを変更します。
例:
set interface "1" metric=2 forwarding=enabled store=active
```
# 参考文献
[1] IPv6-only at Microsoft, APNIC blog, 2017.01.19,
https://blog.apnic.net/2017/01/19/ipv6-only-at-microsoft/
[2] RFC 8106によってRFC 6106が廃止に, Geekなページ, 2017.03.21, http://www.geekpage.jp/blog/?id=2017-3-21-1