1. 結局DHCPv6
以前「YAMAHA RTシリーズルーターをIPv6ネイティブ環境に接続して、v6用DNSをLAN内サーバーに設定させた話」という記事を書いたのですが、結局ローカルにDHCPv6サーバーを立てて動かすようになりました。
何故かって理由なのですが、どうもWindowsではIPv6 DNSを真面目に設定してある方が、IPv6を空にしてIPv4 DNSに任せるよりも早い「気がする」のです。「気がする」です。気分の問題です(ここ重要)。以前の記事通りにIPv4 DNSがちゃんと動いていれば別に困ることはないはずです。
そんなわけで、DHCPv6でDNS情報を広告させることにしました。
2. ISC DHCPの設定
CentOS8で作っていたDNSサーバー上にDHCPを構築しました。
DHCPは新しいKea DHCPも試したのですが動作が安定せず、ごく安パイにISC DHCPをdnf installで入れました。
書いたconfigはこれだけです。
subnet6 2001:db8::/64
{
option dhcp6.name-servers 2001:db8::2;
option dhcp6.domain-search "local.example.net";
}
もちろんDNSサーバー側にもスタティックなIPv6アドレスを付与しておき、DHCPv6で配布する情報と合わせておきます。
firewall-cmd --add-service=dhcpv6 --permanent
firewall-cmd --reload
でファイアウォールを開けて、
systemctl enable dhcpd6
systemctl start dhcpd6
で起動。問題なく動いていれば、すぐにDNSサーバー情報が各端末に伝播するでしょう。
DHCPv6サーバーを作ったので、ついでにDHCPv4サーバーも相乗りさせてRTX830のDHCPは止めました。
default-lease-time 43200;
max-lease-time 86400;
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.21 192.168.0.99;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name "local.example.net";
option domain-name-servers 192.168.0.2;
}
当たり前ですが、DNS情報しか配っていないv6に比べてv4はconfigが多いですね。
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload
でファイアウォールを開けて、
systemctl enable dhcpd
systemctl start dhcpd
で起動します。
動作確認は端末側でipconfig /renew
とか、スマホだったらWi-Fiを切断→接続とかしてアドレスリースを確認します。
3. unboundの設定
DNSはpdns-recursorで作ってましたが、パフォーマンスが優れていると聞いてunboundを入れて置き換えました。これも自己満足ですpdns-recursorがダメとかないです。
unboundは設定できる項目が多く、かつネットで拾える設定例が間違ってるのも多く見かけたので、今の弊宅の設定を貼っておきます。
デフォルトの/etc/unbound/unbound.conf
は触らず、/etc/unbound/conf.d
の下に unbound.conf
、performance.conf
を置いてカスタマイズ、さらにローカルゾーンの情報としてlocal.example.net.conf
を置いています。
server:
interface: 0.0.0.0
interface: ::0
prefer-ip6: yes
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/24 allow
access-control: ::0/0 refuse
access-control: ::1/128 allow
access-control: 2001:db8::/64 allow
access-control: fe80::/64 allow
hide-version: yes
hide-identity: yes
logfile: "/var/log/unbound/unbound.log"
use-syslog: no
log-time-ascii: yes
forward-zone:
name: "."
forward-addr: 2001:4860:4860::8888
forward-addr: 2001:4860:4860::8844
forward-addr: 202.232.2.2
forward-addr: 202.232.2.3
remote-control:
control-interface: 127.0.0.1
control-interface: ::1
フォワーダーは鉄板のGoogle Public DNSをプライマリに、プロバイダDNSをバックアップに指定しています。
Google Public DNSはプロバイダDNSに比べてTTLが、という話があって私もこないだまでそっちの宗派だったのですが、実際にtracertしてみると、DS-Lite環境ではプロバイダDNSよりもGoogle Public DNSの方がhop数が少なく近いところにいました。
また構築後にベンチマーク(namebench)を走らてフォワーダーがプロバイダDNSのみの設定と比較しましたが、これもGoogle Public DNSの方が良好なスコアとなりました。
DS-Liteはtransixから出て行くのでPPPoEとはまた話が違っちゃうんでしょうね。
server:
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
rrset-cache-size: 128m
msg-cache-size: 64m
outgoing-range: 8192
num-queries-per-thread: 4096
so-rcvbuf: 4m
so-sndbuf: 4m
minimal-responses: yes
qname-minimisation: yes
infra-cache-numhosts: 1000000
この辺もunboundで鉄板のパフォーマンスカスタマイズですが、デフォルトのunbound.conf
に記載済みの項目は省きました(num-threads
、prefetch
等)。
後はso-rcvbuf
、so-sndbuf
に絡んでCentOS側で
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 4194304
net.core.wmem_max = 4194304
とかやってます。
server:
local-zone: "local.example.net." transparent
local-data: "mail. 600 A 192.168.0.10"
local-data: "mail.local.example.net. 600 A 192.168.0.10"
local-data: "www.example.net. 600 A 192.168.0.20"
local-data-ptr: "192.168.0.10 600 mail.local.example.net."
ローカルゾーンはお好みのように。説明は割愛します。
それでは本記事はこの辺で。