DHCPサーバーを建てた(IPv6対応)

目次

昔閉鎖したブログから復活させた記事です
ごちゃついていますが見たい方はどうぞご覧下さい。

背景

つい先日、家の固定回線をJ:COMのごみ回線からNURO光に変えました。J:COMの時も下りに関しては120Mbpsプランで実行速度が110Mbps出てたのでその点には不満がなかったのですが、上りは10Mbpsが上限となっていました。完全なる罠です。私の両親はあまり詳しくないので、中3から大学2年の間はずっとJ:COMを使わされていたのです。ネットワークドライブとVPNを構築しても、外部からの使用が遅すぎて大変不便でした。 やっとNURO光になったのでありますが、予想外の事態が発生しました。NURO光はIPv6に対応していたのです。ローカルにDNSサーバーを建てる予定でいるのですが、NURO光提供のONU兼ルーターでは、IPv6に対してDHCPでDNSサーバーのアドレスを通知できないようになっています。したがって、IPv6向けのDNSサーバーアドレスを通知するためだけにDHCPサーバーを構築します。

DHCPサーバーのインストール

OSは Raspbian Buster を使います。Debian系は同じやり方できると思います。

$ sudo apt install isc-dhcp-server

私の場合は赤文字でたくさんエラーが出ましたが、あとで解決します。

設定ファイルの編集

設定ファイルを編集していきます。IPv4用とIPv6用でファイルが分かれています。

dhcpd.conf

dhcpcd.conf ではありません! dhcpd.conf となります。 とりあえず、バックアップを取っておきましょう。

$sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.example

バックアップが完了したら編集します。

$ sudo vim /etc/dhcp/dhcpd.conf

vim を使って編集します。nano が良ければそっちを使ってもいいです。もちろん Emacs でも可能。

全消しして真っ新なところに書きます。

# デフォルトの貸し出し時間
default-lease-time 600;
# クライアントから「〇〇分貸せや!」と言われた場合の上限時間
max-lease-time 7200;
# よくわからんけど無効のほうがよい
ddns-update-style none;

# ネットワークアドレスとサブネットマスクを書く
subnet 192.168.1.0 mask 255.255.255.0 {
    # 貸し出す範囲を指定
    range 192.168.1.100 192.168.1.249;
    # DNSサーバーを指定
    option domain-name-servers 192.168.1.252, 192.168.1.1;
    # デフォルトルーターの指定(デフォルトゲートウェイ)
    option routers 192.168.1.1;
}

DNSサーバーを指定しているのですが、これはアドレスを配布された側が参照するアドレスを指定しています。つまり、DHCPサーバー自信が問い合わせをするDNSの設定ではありませんので注意して下さい。127.0.0.1とかすると死にます。

dhcpd6.conf

dhcpd6.conf は名前から察しが付くと思いますが、IPv6に関する設定ファイルです。

# デフォルトの貸し出し時間
default-lease-time 2592000;
# preferred(推奨)状態にある時間
preferred-lifetime 604800;
# あとで書きます
option dhcp-renewal-time 3600;
# あとで書きます
option dhcp-rebinding-time 7200;
# 要求を許可
allow leasequery;
# わからん
option dhcp6.info-refresh-time 21600;
# このへんはIPv4といっしょ
subnet6 fdXX:XXXX:XXXX::/64 {
        # 詳細なアドレスは隠しました
        range6 fdXX:XXXX:XXXX:0::0 fd35:5789:dd92:0::ffff;
        # LAN内DNSサーバーのアドレス
        option dhcp6.name-servers fdXX:XXXX:XXXX:0:YYYY:YYYY:YYYY:YYYY;
}

dhcp-renewal-time と dhcp-rebinding-time についてですが、DHCPv6のメッセージに Renew と Rebind がありそれに関することのようです。とりあえず動けばよしでやっているので詳しくは勉強していきたいと思います。

簡単にまとめると、renewal-time は すでに割り当てられた設定パラメータの有効期間を延ばすために送信する Renew メッセージを送信するまでの時間で、rebind-time は Renew メッセージに対する応答を受け取れない場合に送信される Rebind メッセージを送るまでの時間という感じです。

以下の書籍ではIPv6に関することが詳細に書かれております。少し参考にしましたがまだまだ私も勉強が必要です。(お金に余裕のある人は有料版を買いましょう) プロフェッショナルIPv6

ユニークローカルアドレスの計算が以下のサイトを使うと簡単です。私のアドレスは隠しましたが、簡単に作れますのでやってみて下さい。 https://cd34.com/rfc4193/

isc-dhcp-server

最後に isc-dhcp-server を編集します。

INTERFACESv4="eth0"
INTERFACESv6="eth0"

この2行さえあればOKです。

IPアドレスの固定

IPv4はすごく簡単だと思います。手段は問いません。

dhcpcdを使ってもいいですし、NetworkManager をインストールしてそちらで固定しても大丈夫です。(急に雑)

問題はIPv6です。上位64ビットは先ほどのサイトを使えば生成できるのですが下位64ビットは自分で計算しなくてはなりません。どこかのサイトに計算方法が書いてあるので自分で調べてみて下さい。MACアドレスをもとに計算しますが、やり方さえわかれば簡単です。手計算でもできるでしょう。

再起動

IPアドレスを固定できたら再起動しましょう。エラーの原因がよくわからなかったのですが、再起動で解決しました。IPの固定がうまくできていなかった場合は再起動後もDHCPサーバーの起動に失敗しますので注意して下さい。

$ sudo reboot
$ sudo systemctl status isc-dhcp-server

コンソールにActiveと表示されたらちゃんと動いているのでWindowsならipconfigとかを使ってIPが割り振られているか確認してください。




Archives

2022 (6)
2021 (3)
2020 (4)

Writer

筆者のイメージ画像
kusshie

情報系学部に所属していた社会人1年生です。大学ではネットワークを学んでいましたがまだまだです。 最近は友達に誘われてISPごっこに足を踏み入れました (AS63791)。