DigiLoog

PC関係の事なら何でもいけるそんな処

IPv6用DNS・DHCPv6サーバを自鯖へ移設した

2022年03月06日(日) - 22:37 | カテゴリ: Linux

前回の記事にも書いた通り、”ns-lab BB”はIPv4とIPv6を分離してあり検証に特化させている。
IPv6側はテスト用からスタートしたので他とは違ってラズパイをサーバとして使っていたが、
SDカードの寿命が近いのか読み書きが詰まる様になっていた。

テスト用でスタートしたが今は常用しているので、今回を機に仮想サーバへ移設する事にした。

NAT64用のDNS64サーバは既存のDNSキャッシュサーバへ移し、
DHCPv6サーバは別の仮想サーバへ乗せ直した。

メイン利用しているDNSはBINDとNSDだが、
アプリ間の差分を見る為にキャッシュDNSはunbound、権威DNSはPowerDNSも動いている。
今回はキャッシュDNSのみ移せば良かったので、
既存のキャッシュDNSでDNSルーティングを行いつつ、unboundでDNS64を応答する様にした。

unboundでDNS64を設定するのは意外と簡単で設定ファイルに次の設定を追記すれば動く。
BINDの様に細かく制御が出来ないので、単純なDNS64動作しかできない点に注意が必要だが、
そもそも、DNS64はAAAAレコードの合成が本質なのでサクッと組める方が嬉しかったりする。

server:
    module-config:  "dns64 iterator"
    dns64-prefix:   64:ff9b::/96
    dns64-synthall: no

………

DHCPv6は以前作成した構成メモをIPv6へアレンジして再実装した。
今回はDHCPv6サーバの冗長化も行いたかったので、hook-librariesを使ってHAも組む事に。
IPプールはIPv4と殆ど同じなので楽に組めるが、IPv6でHAを組む時はピア設定に工夫が必要だった。

実際に嵌ったポイントは”high-availability”の”peers-url”となる。
IPv6をWebブラウザで直接開く時にはブラケットで囲う必要があるのだが、
HAモジュールでHTTPを叩いているらしくURL指定もブラケットで囲わないと動かなかった。

    "hooks-libraries": [
        {
            "library": "/usr/local/lib/kea/hooks/libdhcp_lease_cmds.so",
            "parameters": { }
        },
        {
            "library": "/usr/local/lib/kea/hooks/libdhcp_ha.so",
            "parameters": {
                "high-availability": [
                    {
                        "this-server-name": "server-a",
                        "mode": "load-balancing",
                        "heartbeat-delay": 10000,
                        "max-response-delay": 60000,
                        "max-ack-delay": 10000,
                        "max-unacked-clients": 0,
                        "peers": [
                            {
                                "name": "server-a",
                                "url": "http://[2001:db8::a:a]:10547/",
                                "role": "primary",
                                "auto-failover": true
                            },
                            {
                                "name": "server-b",
                                "url": "http://[2001:db8::a:b]:10547/",
                                "role": "secondary",
                                "auto-failover": true
                            }
                        ]
                    }
                ]
            }
        }
    ],

Kea-DHCP v2.1.Xで実際に動かしたコンフィグは上の通りだが、
アプリのアップグレードが最近多くて動かなくなるかもしれない。

………

この構成で重要なのが、IPv6のネットワークからDHCPv6パケットを如何に転送するかになる。
筆者の場合、RA広報・RDNSS・DHCPv6-Relayに対応していて、
比較的購入しやすい価格入手できるFortigate 50Eを使っているのだが、
『対応しているならCLIで打ち込めば出来るだろう』と思いドキュメントを読んでみた。

結果、やはりCLIではちゃんと対応しており次のコマンドを打ったら正常動作した。

config system interface
    edit "lan1"
        set vdom "root"
        set type physical
        set device-identification enable
        set role lan
        set snmp-index 11
        config ipv6
            set ip6-address 2001:db8::b:1/64
            set ip6-allowaccess ping
            set ip6-send-adv enable
            set ip6-other-flag enable
            config ip6-prefix-list
                edit 2001:db8::b:0/64
                    set valid-life-time 21600
                    set preferred-life-time 10800
                    set rdnss 2001:db8::a:c 2001:db8::a:d
                    set dnssl "example.jp"
                next
            end
            set dhcp6-relay-service enable
            set dhcp6-relay-ip 2001:db8::a:a 2001:db8::a:b
        end
    next
end

FortigateでVDOMを切っているので”set vdom root”も入っているが、
VDOMを切っていなくてもインターフェースで上の様な物を入力すれば動く。

この状態で通信を流したり、Windows・Mac・Linux・Androidで接続できるかテストもしたが、
キャッシュDNSで名前解決する事は勿論の事、
DNS64によるAAAAレコード合成や、DHCPv6でDNSサーバを広報する事も出来た。

IPv6はクセが強い事もありNWを組もうとしても面倒だったりする。
一般生活者向けに浸透しているとは言えないが、
NEC AtermがRA広報とRDNSSに対応したり普及の兆しが見えてきたのも事実。
もっと普及させる為には、技術者側が腕を磨くのも重要なので今後も色々試してみようと思う。





  • 応援中

    はじめるセカイの理想論 -goodbye world index-