はじめに

PCで使用するデータはNASで管理しているが、そのNASが(どこのメーカーとは言えないが)IPアドレスでのアクセス制御ができない。

なので自分以外のPCからアクセスしようと思えば可能。

当然、ID/PWで管理しているがMFA機能もないのでちょっと不安。

そして、心配なのは管理画面用の80/tcpとSMBの445/tcp以外にもNAS内部用として動作しているSSHやMySQLなどのポートが開いているが、NASの設定ではそれを閉じられない。

なので、LANとNASとの間にMiniPCで構築したLinuxルーターを挟み、NASは完全プライベートのネットワーク(192.168.)上で動かし、自分のPC(172.16.1.201)からのみのアクセスを受け付けるようにした。

今回構築したLinuxルーターの概要は以下のとおり

  • WAN→LAN: NAS01のWebとSMBのみ、指定した送信元IPから転送
  • LAN→WAN: UFWの転送許可ルールでLAN発の通信を許可し、MASQUERADEで送信元を変換
  • DHCP: LAN内の指定した範囲でアドレスを配布
  • アクセス制御: WAN側からの転送先・ポートを限定
          +------------+
          |  確認用PC  |
          | Windows 11 |
          +------------+
           172.16.1.201

               ↓↑

    WAN: enp2s0 / 172.16.1.200
+------------------------------------+
|              Mini PC               |
|       Ubuntu 26.04 ルーター        |
| IPフォワーディング/DNAT/MASQUERADE |
|    DHCP: 192.168.200.101~120      |
+------------------------------------+
    LAN: enp3s0 / 192.168.200.1

                ↓↑

           192.168.200.11
          +-------------+
          |    NAS01    | Web: 外部 51080 → 内部: 80
          | 共有:/share | SMB: 外部 445 → 内部: 445
          +-------------+

下準備

今回使用した MiniPC は、2つのLANの口(RJ45)を持っている。それぞれのデバイス名はMACアドレスは「ip link show」で確認可能。

$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    altname enx00e04c5b8000
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    altname enx00e04c5b8001
4: wlp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DORMANT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    altname wlxe094679fae98

※MACアドレスは念のためマスクしている。

今回 WAN側(といってもプライベート 172.16.1.200)を enp2s0、LAN側(192.168.200.1)を enp3s0 に割り当てる

  • WAN側IP: 172.16.1.200、dev: enp2s0
  • LAN側IP: 192.168.200.1、dev: enp3s0

Ubuntuのインストール時に、WAN側のネットワークは設定しており、施設内ネットワークを経由してインターネットにアクセス可能な状態である。

$ ip route show table main
default via 172.16.1.254 dev enp2s0 proto static
172.16.1.0/24 dev enp2s0 proto kernel scope link src 172.16.1.200

私は、AlmaLinux や Rocky Linux などの RHEL 系を普段利用しているので、NetworkManager (nmcli) を使った管理が慣れている。しかし、Ubuntuは、Desktop や Server の形態で異なるが、基本 systemd-networkd と Netplan でネットワークを管理するようだ。

  • Netplan
    • ネットワーク設定の定義を行う
    • /stc/netplan/*.yaml に、IPアドレス、Gateway、DNSサーバのIPアドレスなどを記載する
    • それ自体がネットワーク接続を管理するデーモンではない
  • systemd-networkd
    • ネットワークを実際に管理(インターフェースの接続・切断等)するサービス
    • Netplanでの設定をもとに動作する
    • networkctl コマンドなどで確認
  • NetworkManager
    • systemd-networkd 同様、こちらもネットワークを実際に管理・制御する
    • nmcli はこれを操作するコマンド

Netplan を使わずに、NetworkManager にてコマンド nmcli connection modify netplan-enp2s0 ... のように直接変更することも可能だが、Netplan と NetworkManager の両方で設定を管理しようとすると、設定の競合や上書きが起こりやすくなってしまう。

(参考) NetworkManager default configuration - Netplan documentation

ということで、まずは NetworkManager を導入し、nmcli コマンドにて各種設定を確認してみる。

$ sudo apt install network-manager
$ sudo systemctl restart NetworkManager

インストール時に NetworkManager のサービスが起動されているかもしれない。

$ nmcli general status
STATE     CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN  METERED
切断済み  なし          有効     有効  missing  有効  不明

コネクションを認するが、まだ設定されていない。

$ nmcli connection show

デバイスの状態を確認する。

$ nmcli device status
DEVICE          TYPE      STATE     CONNECTION
wlp1s0          wifi      切断済み  --
enp2s0          ethernet  管理無し  --
enp3s0          ethernet  管理無し  --
lo              loopback  管理無し  --
p2p-dev-wlp1s0  wifi-p2p  管理無し  --

各 nmcli コマンドを実行しても、管理無しとなっている。

$ sudo NetworkManager --print-config
:
[main]
# rc-manager=auto
# migrate-ifcfg-rh=false
# auth-polkit=true
# dhcp=internal
# iwd-config-path=
firewall-backend=iptables
plugins=ifupdown,keyfile
configure-and-quit=no

[ifupdown]
managed=false
:

ここで、[ifupdown] の項目で managed=false となっている点に注意する。 これは、主に /etc/network/interfaces で管理されるインターフェースを NetworkManager が管理対象にする(true)か否(false)を制御するもの。 ただこれは、以下の Netplan の設定にて renderer: NetworkManager を指定することで、enp2s0、enp3s0 両方のインターフェースが NetworkManage に認識されるようになるため、managed=false を変更する必要はない。

設定

ネットワークインターフェースの設定

それでは、「/etc/netplan」配下の設定ファイル、今回はデフォルトで作成されている「00-installer-config.yaml」に、まだ未設定のLAN側IP(enp3s0)の設定を含めて修正する。

$ sudo cp -p /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml_20261020
$ sudo vi  /etc/netplan/00-installer-config.yaml

[/etc/netplan/00-installer-config.yaml]

# This is the network config written by 'subiquity'
network:
  renderer: NetworkManager
  ethernets:
    enp2s0:
      addresses:
      - 172.16.1.200/24
      match:
        macaddress: xx:xx:xx:xx:xx:xx
      nameservers:
        addresses:
        - 172.16.1.1
        - 172.16.1.2
        search: []
      routes:
      - to: default
        via: 172.16.1.254
      set-name: enp2s0
    enp3s0:
      dhcp4: false
      dhcp6: false
      accept-ra: true
      addresses:
        - 192.168.200.1/24
  version: 2
  wifis: {}

修正(追記)した箇所はこちら。

$ sudo diff -u /etc/netplan/00-installer-config.yaml_20261020 /etc/netplan/00-installer-config.yaml
--- /etc/netplan/00-installer-config.yaml_20261020      2026-10-15 10:02:33.922206965 +0900
+++ /etc/netplan/00-installer-config.yaml       2026-10-20 15:30:53.063131017 +0900
@@ -1,5 +1,6 @@
 # This is the network config written by 'subiquity'
 network:
+  renderer: NetworkManager
   ethernets:
     enp2s0:
       addresses:
@@ -16,6 +17,10 @@
         via: 172.16.1.254
       set-name: enp2s0
     enp3s0:
+      dhcp4: false
+      dhcp6: false
       accept-ra: true
+      addresses:
+        - 192.168.200.1/24
   version: 2
   wifis: {}

「renderer: NetworkManager」と追記することで、Netplan でのネットワーク設定が、systemd-networkd ではなく、NetworkManager の管理下で制御できるようになる。

それでは設定を有効にする。

$ sudo netplan generate
$ sudo netplan try --timeout 120

Netplanの設定の適用は「sudo netplan apply」だが、「sudo netplan try --timeout 120」とすることで、設定を仮適用し、120秒以内に正常に動作するかを確認できる。問題がなければ設定が適用される。

$ ip route show table main
default via 172.16.1.254 dev enp2s0 proto static metric 100
172.16.1.0/24 dev enp2s0 proto kernel scope link src 172.16.1.200 metric 100
192.168.200.0/24 dev enp3s0 proto kernel scope link src 192.168.200.1 metric 101

もう1個のデバイス enp3s0 が有効になった。各 nmcli コマンドを確認してみる。

$ nmcli general status
STATE     CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN  METERED
接続済み  完全          有効     有効  missing  有効  いいえ (推測)

コネクションの確認

$ nmcli connection show
NAME            UUID                                  TYPE      DEVICE
netplan-enp2s0  7ea6f90b-3495-3533-948a-xxxxxxxxxxxx  ethernet  enp2s0
netplan-enp3s0  6effa1b1-280b-3785-9b52-xxxxxxxxxxxx  ethernet  enp3s0
lo              0f24589a-a54f-4873-abb6-xxxxxxxxxxxx  loopback  lo

※UUIDは念のためマスクしている。

デバイスの確認

$ nmcli dev status
DEVICE          TYPE      STATE            CONNECTION
enp2s0          ethernet  接続済み         netplan-enp2s0
enp3s0          ethernet  接続済み         netplan-enp3s0
lo              loopback  接続済み (外部)  lo
wlp1s0          wifi      切断済み         --
p2p-dev-wlp1s0  wifi-p2p  切断済み         --

「接続済み」と表示されるようになり、NetworkManager の管理下になった。なお、Netplan を NetworkManager のバックエンドとして使用する場合は、Netplan が接続プロファイルを生成・管理するため、「netplan-enp2s0」のような名前になる。

一方、systemd-networkd については unmanaged になっていることが確認できる。

$ networkctl list
IDX LINK   TYPE     OPERATIONAL SETUP
  1 lo     loopback carrier     unmanaged
  2 enp2s0 ether    routable    unmanaged
  3 enp3s0 ether    routable    unmanaged
  4 wlp1s0 wlan     no-carrier  unmanaged

4 links listed.

NAT (マスカレード、LAN→WAN)

まずは現在のファイアウォール(UFW)の設定状況から確認

$ sudo ufw status verbose
状態: アクティブ
ロギング: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
新しいプロファイル: skip

To                         Action      From
--                         ------      ----
22022/tcp                  ALLOW IN    Anywhere
224.0.0.1                  DENY IN     Anywhere                   # Allhosts multicast
22022/tcp (v6)             ALLOW IN    Anywhere (v6)
  • すべてのホストからのsshd (ポート番号変更済: 22 → 22022) を許可
  • すべてのホストからのマルチキャスト通信を拒否

現在のIPフォワーディング設定を確認

$ cat /proc/sys/net/ipv4/ip_forward
0

現在のNATの設定状況を確認

$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

IPフォワーディングも有効でないし、NATも設定されていない。すべてのチェーンポリシーはACCEPTになっている。

まずはシステム全体のsysctl設定として、IPフォワーディングを永続化する。

[/etc/sysctl.d/99-router.conf]

net.ipv4.ip_forward=1

有効化

$ sudo sysctl --system

確認

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

続いて、UFW にて NAT を設定する。直接 /etc/ufw/before.rules を編集するのでオリジナルをバックアップしておく。

$ sudo cp -p /etc/ufw/before.rules /etc/ufw/before.rules.ORG

オリジナルとの差分は次のとおり。

$ sudo diff -U 1 /etc/ufw/before.rules.ORG /etc/ufw/before.rules
--- /etc/ufw/before.rules.ORG   2025-12-06 20:04:40.000000000 +0900
+++ /etc/ufw/before.rules       2026-10-21 14:51:04.818518374 +0900
@@ -10,2 +10,14 @@

+# NAT
+
+*nat
+-F
+:PREROUTING ACCEPT [0:0]
+:POSTROUTING ACCEPT [0:0]
+
+# LAN -> WAN Internet access
+-A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE
+
+COMMIT
+
 # Don't delete these required lines, otherwise there will be errors
@@ -75 +86,2 @@
 COMMIT
+

まだ、DNATの設定はしていないが、:PREROUTING ACCEPT [0:0] を入れている。 -A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE にて、LAN側ネットワーク (192.168.200.0/24) から出るパケットのソースIPを enp2s0 のインターフェースIP (172.16.1.200) に変換している。 「*nat」の次の行に「-F」を入れないと、sudo ufw reload の度に「-A」のエントリが重複されてしまう。

次にファイアウォール (UFW) にて転送許可設定を行う。

OS再起動時も、UFWの設定を保持するためには /etc/ufw/ufw.conf にて ENABLED=yes になっている必要がある。 これは「sudo ufw enable」を実行することで、ENABLED=yes つまり UFW は有効になる。

ufwのデフォルトのポリシーは次のとおりである。転送通信(FORWARD)のポリシーはデフォルトで拒否のままにしておく。

$ grep -E 'DEFAULT' /etc/default/ufw
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_APPLICATION_POLICY="SKIP"

ここで、LAN(enp3s0)側 192.168.200.0/24 からのパケットの、WAN(enp2s0)側への転送を許可するルールを設定する。

$ sudo ufw route allow in on enp3s0 out on enp2s0 from 192.168.200.0/24

ここで、UFW の設定を有効(再読み込み)する。

$ sudo ufw reload
ファイアウォールを再読込しました

iptables コマンドにてNATのルールを確認する。 管理・適用は UFW によるものだが、実際にパケット変換を行っているのは Linux カーネルの NAT 機能(iptables/nftables)である。

$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE

POSTROUTING(ルーティングの後処理)にて、LAN側ネットワーク (192.168.200.0/24) から出るパケットのソースIPを enp2s0 のインターフェースIP に変換する、というルールが設定されている。

次に ufw コマンドにて転送許可設定を確認する。

$ sudo ufw status verbose
状態: アクティブ
ロギング: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
新しいプロファイル: skip

To                         Action      From
--                         ------      ----
22022/tcp                  ALLOW IN    Anywhere
224.0.0.1                  DENY IN     Anywhere                   # Allhosts multicast
22022/tcp (v6)             ALLOW IN    Anywhere (v6)

Anywhere on enp2s0         ALLOW FWD   192.168.200.0/24 on enp3s0

LAN側インターフェース enp3s0 のネットワーク (192.168.200.0/24) からWAN側インターフェース enp2s0 へのパケットの転送を許可されている。

以上、「IPフォワーディング有効」、「UFWの転送許可」、「NAT(MASQUERADE)」の3つが揃って初めて、192.168.200.0/24 の LAN クライアントが enp2s0 側 172.16.1.200 のインターフェースを通ってインターネット等へアクセスできるようになった。

DNAT (ポートフォワーディング、WAN→LAN)

NATの設定によって、NAS01がLinuxルーター介してインターネットに接続できるようになったので、ファームウェアのアップデートがこれで可能になった。

次に、WAN側PC (172.16.1.201) にて、LAN側にある NAS01 (192.168.200.11) の共有フォルダに接続(ネットワークドライブ接続)できるようにするには、LinuxルーターにDNAT(ポートフォワーディング)の設定をする必要がある。

つまり、WAN側から、172.16.1.200 の特定のポートにアクセスすることで、192.168.200.11 の特定のポートにアクセスできるようにする設定である。

NAS01 (192.168.200.11) へのアクセスで必要なポートは

  • 80/tcp … NAS01のWeb管理画面
  • 445/tcp … Windowsファイル共有(SMB)

の2つである。結果的に次のようなポート転送を設定する。

  • 172.16.1.200 の 51080/tcp → 192.168.200.11 の 80/tcp
  • 172.16.1.200 の 445/tcp → 192.168.200.11 の 445/tcp

この2つを PREROUTING(ルーティング前処理)ルールとして、/etc/ufw/before.rules に追記する。

[/etc/ufw/before.rules]

:
# NAT

*nat
-F
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# WAN PC -> NAS Web
-A PREROUTING -i enp2s0 -s 172.16.1.201/32 -d 172.16.1.200/32 -p tcp --dport 51080 -j DNAT --to-destination 192.168.200.11:80

# WAN PC -> NAS SMB
-A PREROUTING -i enp2s0 -s 172.16.1.201/32 -d 172.16.1.200/32 -p tcp --dport 445 -j DNAT --to-destination 192.168.200.11:445

# LAN -> WAN Internet access
-A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE

COMMIT

# Don't delete these required lines, otherwise there will be errors
*filter
:

新しく追加したルールを有効化する。

$ sudo ufw reload
ファイアウォールを再読込しました

確認

$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -s 172.16.1.201/32 -d 172.16.1.200/32 -i enp2s0 -p tcp -m tcp --dport 51080 -j DNAT --to-destination 192.168.200.11:80
-A PREROUTING -s 172.16.1.201/32 -d 172.16.1.200/32 -i enp2s0 -p tcp -m tcp --dport 445 -j DNAT --to-destination 192.168.200.11:445
-A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE

NATの時同様、ファイアウォール (UFW) にて許可設定も行う。 ここでは、WAN側ネットワークの全ホストではなく、1台のPC 172.16.1.201 だけが NAS01 (192.168.200.11) の 80/tcp と 445/tcp へのアクセス(Linuxルータを経由したアクセス)を許可しておく。

$ sudo ufw route allow in on enp2s0 from 172.16.1.201 to 192.168.200.11 port 80 proto tcp comment "NAS01 Web"
ルールを追加しました
$ sudo ufw route allow in on enp2s0 from 172.16.1.201 to 192.168.200.11 port 445 proto tcp comment "NAS01 SMB"
ルールを追加しました

確認

$ sudo ufw status verbose
状態: アクティブ
ロギング: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
新しいプロファイル: skip

To                         Action      From
--                         ------      ----
22022/tcp                  ALLOW IN    Anywhere
224.0.0.1                  DENY IN     Anywhere                   # Allhosts multicast
22022/tcp (v6)             ALLOW IN    Anywhere (v6)

Anywhere on enp2s0         ALLOW FWD   192.168.200.0/24 on enp3s0
192.168.200.11 80/tcp      ALLOW FWD   172.16.1.201 on enp2s0     # NAS01 Web
192.168.200.11 445/tcp     ALLOW FWD   172.16.1.201 on enp2s0     # NAS01 SMB

ここまでの結果として、それぞれNATテーブルを確認してみる。

POSTROUTINGチェインの表示

$ sudo iptables -t nat -S POSTROUTING
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.200.0/24 -o enp2s0 -j MASQUERADE

→ POSTROUTING の MASQUERADE、つまり出ていくパケットの送信元のアドレス (192.168.200.x) を書き換える(送信元アドレス変換 SNAT)

PREROUTINGチェインの表示

$ sudo iptables -t nat -L PREROUTING -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source              destination
DNAT       tcp  --  172.16.1.201        172.16.1.200  tcp dpt:51080 to:192.168.200.11:80
DNAT       tcp  --  172.16.1.201        172.16.1.200  tcp dpt:445 to:192.168.200.11:445

→ PREROUTING の DNAT、つまり入ってきたパケットの宛先IPアドレス/ポートを書き換える

WAN側PCからNASが利用可能か確認

NASの設定

今までPCと一緒のネットワーク 172.16.1.0/24 にいた NAS01 をLinuxルーター配下のLAN側に移動するためにネットワークの設定変更をする。

  • IPアドレス: 192.168.200.11
  • ネットマスク: 255.255.255.0
  • デフォルトゲートウェイ: 192.168.200.1

WAN側PCのブラウザから http://172.16.1.200:51080 にアクセスすることで、NAS01のWeb管理画面にアクセスできるようになる。 また、WAN側PCからネットワークドライブ \\172.16.1.200\Share でNAS01の共有フォルダ「Share」に接続できる。

注意

10080番ポートとSMBポートの問題

当初、ポートの変換を、

  • 172.16.1.200 の 10080/tcp → 192.168.200.11 の 80/tcp
  • 172.16.1.200 の 10445/tcp → 192.168.200.11 の 445/tcp

のように考えていたが、これではうまくいかなかった。

まず、NAS01のWeb管理画面に http://172.16.1.200:10080 でアクセス可能と考えていたがNGだった。ポート 10080 はブラウザ自身がブロックするようだ。(恥ずかしながら今まで知らなかった。。。)

(参考) Web Application開発に10080番ポートは使ってはいけない

あと、WAN側PCからネットワークドライブ先をポート番号も指定して \\172.16.1.200:10445\Share でアクセスできると思ったが、このようなポートの設定はできない(445番固定)みたい。

OS起動時における NetworkManager と systemd-networkd の競合問題

Reboot すると。。。

起動中、「systemd-networkd-wait-online.service」の起動で時間がかかりタイムアウトして失敗してしまう。

$ sudo journalctl -b -p warning  --no-pager
:
... systemd-networkd-wait-online[1225]: Timeout occurred while waiting for network connectivity.
... systemd[1]: systemd-networkd-wait-online.service: Failed with result 'exit-code'.
... systemd[1]: Failed to start systemd-networkd-wait-online.service - Wait for Network to be Online.
... systemd-networkd-wait-online[1760]: Timeout occurred while waiting for network connectivity.

確認すると

$ systemctl is-active NetworkManager
active
$ systemctl is-active systemd-networkd
active
$ systemctl is-active systemd-networkd-wait-online
failed

NetworkManager と systemd-networkd 両方がアクティブになってしまっている。 実際は NetworkManager で管理しているので、「「systemd-networkd」、「systemd-networkd-wait-online」は無効にしなければならない。 これら、

  • systemd-networkd.service
  • systemd-networkd-wait-online.service

を無効 (disable) にしておく

$ sudo systemctl disable systemd-networkd-wait-online.service
Removed '/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service'.

$ sudo systemctl disable systemd-networkd.service
Removed '/etc/systemd/system/multi-user.target.wants/systemd-networkd.service'.
Removed '/etc/systemd/system/sockets.target.wants/systemd-networkd.socket'.

DHCPサーバ

今回、LAN側のNASのIPアドレスは固定にしたが、このLAN側ネットワークにつなぐそれ以外のPC等デバイスについては、IPアドレスを動的に割り振ることにする。

ということで、このLinux PCに「kea DHCP」をインストールし、DHCPサーバ機能を設定する。

$ sudo apt install kea

インストール後、既に kea-dhcp4-server.service は動いているもよう。 設定ファイルは、/etc/kea/kea-dhcp4.conf 、予めバックアップは取っておく。

$ sudo cp -p /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.ORG

設定ファイルの中身は、デフォルトで色々ごちゃごちゃしているが、"DHCP4": "subnet4":[...] 内に必要事項を記載しておけばとりあえずOK。

[/etc/kea/kea-dhcp4.conf]

{
"Dhcp4": {
    "interfaces-config": {
        "interfaces": [ "enp3s0" ]
    },
    :
	"subnet4": [
        {
            "id": 1,
            "subnet": "192.168.200.0/24",
            "pools": [ { "pool": "192.168.200.101 - 192.168.200.120" } ],
            "option-data": [
                {
                    "name": "routers",
                    "data": "192.168.200.1"
                },
                {
                    "name": "domain-name-servers",
                    "data": "172.16.1.1, 172.16.1.2"
                }
            ],
            "reservations": [
            ]
        }
    ],
    :
}
}
  • “subnet” にLAN側ネットワークアドレス "192.168.200.0/24"
  • “option-data”
    • “name”: “routers” として、LinuxルータのLAN側NICのIPアドレスを設定、LAN側に接続するPCにとってはデフォルトゲートウェイになる
    • “name”: “domain-name-servers” として、DNSサーバのIPアドレスを設定

今回、動的に割り当てるIPの範囲を 192.168.200.101 ~ 120 の 20台とするため

"pools": [ { "pool": "192.168.200.101 - 192.168.200.120" } ],

と設定した。

あとは、サービスの自動起動を有効にし、サービスの再起動を行う。

$ sudo systemctl enable --now kea-dhcp4-server
$ sudo systemctl restart kea-dhcp4-server
$ sudo systemctl status kea-dhcp4-server

UFWにて、LAN側からのブロードキャストを許可する設定をしておかなければならない。

$ sudo ufw allow in on enp3s0 to 255.255.255.255 port 67 proto udp