この記事を作った動機

 Linux PC をルータ化するの話が長くなりすぎたので分けた。ここでは、簡易的にDHCPサーバを Linux 上で立てる方法について、簡易的にまとめることにする。難しいことはせず簡単に設定したので、不十分である可能性がある。今回は以下の項目について、今回立てるDHCPサーバでできることを目指した。

  • IPv4 で動作し、IPv6は今回取り扱わない
  • デフォルトゲートウェイを設定する
  • DNS サーバを設定する
  • IPを新しく接続されたコンピュータに対して割り当てる

 また、Linux PC をルータ化する でマスカレードやらの設定が終わっていてすでにネットワークが機能している状態を想定している。ネットワークの構成については、今回テストに使ったものは以下のような構成である。192.168.0.0/24のネットワークについて、DHCPサーバを構成することを目指す。

ネットワーク構成図

手順

パッケージのインストール

yay -Sy kea
# sudo pacman -Sy kea

/etc/kea/kea-dhcp4.conf設定をする

 # commentで示されるコメント部分は以下の例から取り除かないと多分動かない。また以下はほとんど Kea - ArchWiki の設定をコピーして私のテスト環境用に設定をちょっといじっただけである。

{
    "Dhcp4": {
        "interfaces-config": {
            "interfaces": [ "eno1" ], # DHCPサーバを動かしたい LAN 側のインターフェースを指定する
            "dhcp-socket-type": "raw"
        },

        "subnet4": [
            {
                "id": 1,
                "subnet": "192.168.0.0/24", # 管理するネットワークを指定する
                "pools": [ { "pool": "192.168.0.10 - 192.168.0.199" } ], # あたらしく接続されたクライアントに割り当てるIPの範囲を指定する
                "option-data": [
                    {
                        "name": "routers",
                        "data": "192.168.0.3" # デフォルトゲートウェイにしたいサーバを指定する
                    },
                    {
                        "name": "domain-name-servers",
                        "data": "192.168.0.3" # DNS サーバを指定する
                    }
                ]
            }
        ]
    }
}

kea-dhcp4サービスを有効化、起動する

sudo systemctl enable --now kea-dhcp4

DHCPでネットワーク設定を自動取得できるか試す

 スイッチ越しにクライアントを接続し設定なしでインターネットなどが利用できることを確認する。

ipconfig
# ...
# イーサネット アダプター Embedded LOM 1 Port 1:
# 
#    接続固有の DNS サフィックス . . . . .:
#    説明. . . . . . . . . . . . . . . . .: Broadcom NetXtreme Gigabit Ethernet #2
#    物理アドレス. . . . . . . . . . . . .: xx-xx-xx-xx-xx-xx
#    DHCP 有効 . . . . . . . . . . . . . .: はい
#    自動構成有効. . . . . . . . . . . . .: はい
#    リンクローカル IPv6 アドレス. . . . .: fe80::2971:1249:57ad:9714%15(優先)
#    IPv4 アドレス . . . . . . . . . . . .: 192.168.0.12(優先)
#    サブネット マスク . . . . . . . . . .: 255.255.255.0
#    リース取得. . . . . . . . . . . . . .: 2026年2月26日 21:12:09
#    リースの有効期限. . . . . . . . . . .: 2026年2月26日 23:12:09
#    デフォルト ゲートウェイ . . . . . . .: 192.168.0.3
#    DHCP サーバー . . . . . . . . . . . .: 192.168.0.3
#    DHCPv6 IAID . . . . . . . . . . . . .: 136871971
#    DHCPv6 クライアント DUID. . . . . . .: XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX
#    DNS サーバー. . . . . . . . . . . . .: 192.168.0.3
#    NetBIOS over TCP/IP . . . . . . . . .: 有効
# ...

ping 192.168.1.1
# 192.168.1.1 に ping を送信しています 32 バイトのデータ:
# 192.168.1.1 からの応答: バイト数 =32 時間 =1ms TTL=63
# 192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=63
# 192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=63
# 192.168.1.1 からの応答: バイト数 =32 時間 =1ms TTL=63
# 
# 192.168.1.1 の ping 統計:
#     パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
# ラウンド トリップの概算時間 (ミリ秒):
#     最小 = 0ms、最大 = 1ms、平均 = 0ms

ping google.com
# google.com [142.251.118.113]に ping を送信しています 32 バイトのデータ:
# 142.251.118.113 からの応答: バイト数 =32 時間 =20ms TTL=113
# 142.251.118.113 からの応答: バイト数 =32 時間 =12ms TTL=113
# 142.251.118.113 からの応答: バイト数 =32 時間 =12ms TTL=113
# 142.251.118.113 からの応答: バイト数 =32 時間 =12ms TTL=113
# 
# 142.251.118.113 の ping 統計:
#     パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
# ラウンド トリップの概算時間 (ミリ秒):
#     最小 = 12ms、最大 = 20ms、平均 = 14ms

ping 192.168.0.3
# 192.168.0.3 に ping を送信しています 32 バイトのデータ:
# 192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=64
# 192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=64
# 192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=64
# 192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=64
# 
# 192.168.0.3 の ping 統計:
#     パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
# ラウンド トリップの概算時間 (ミリ秒):
#     最小 = 0ms、最大 = 0ms、平均 = 0ms

関連のある記事

使った画像とか

  • Windows 7(Vista) デフォルトのアイコン
    • ルーター
    • PCのアイコン
    • インターネット的なアイコン

参考にしたサイトとか