DHCPリレーを使って、OpenWrtから離れたセグメントにIPアドレスを割り当てるのに苦労したときのメモです。
-
OpenWrt 22.03.0-rc4
-
Dnsmasq 2.86-13
-
-
VyOS 1.3.0-rc6 (equuleus)
-
Debian GNU/Linux 11 (bullseye)
OpenWrtでは、DnsmasqというDNS兼DHCPサーバーが動作しており、私の環境では 10.1.2.0/24 のネットワークでIPアドレスを配布しています。 現在の設定から、10.1.130.0/24 のネットワークでもDHCPによるIPアドレス他を自動設定できるようにします。

設定
以下の作業を行います。
-
DHCPリレーの設定
-
Dnsmasqの設定ファイルに、配布するIPアドレスの範囲やDHCPオプションを記述
-
UCIで、Dnsmasqの設定内容を関連付ける
VyOS DHCPリレー設定
10.1.130.0/24 で流れるDHCPパケットをセグメント外部のDHCPサーバーに転送するため、DHCPリレーエージェントとして構成します。 インターフェイスは、DHCPリレーで使う全てのインターフェイスを指定する必要があります。
コマンドの詳細は以下リンクを参照してください。
DHCP Relay — VyOS 1.3.x (equuleus) documentation
set service dhcp-relay interface <interface>
set service dhcp-relay server <server>
show config
service {
dhcp-relay {
interface eth3
interface eth0
server 10.1.2.1
}
}
OpenWrt DHCPサーバー設定
OpenWrtでは、Dnsmasqの設定ファイル /etc/dnsmasq.conf を編集し、uci
コマンドで設定内容を連携させます。
Dnsmasqの設定
/etc/dnsmasq.conf に dhcp-range
と dhcp-options
を追加します。
設定項目の詳細はマニュアルを参照してください。
Man page of DNSMASQ
dhcp-range=set:cf,10.1.130.100,10.1.130.249,255.255.255.0,12h
dhcp-option=tag:cf,3,10.1.130.1
dhcp-option=tag:cf,6,10.1.130.1
- dhcp-range
-
開始アドレス、終了アドレス、ネットマスク、貸出期間などを設定します。DHCPリレーを使う場合、ネットマスクの設定は必須です。
set:<tag>
は、タグ名が一致するdhcp-option
を適用するためのラベルです。(ちなみにcfはcloudflareの略)開始アドレス
10.1.130.100
終了アドレス
10.1.130.249
ネットマスク
255.255.255.0
貸出期間
12時間
- dhcp-option
-
値 名前 意味 3
Router
デフォルトゲートウェイ
6
Domain Server
DNSサーバー
UCI
でDHCP設定に追加
-
dhcpコンフィグに新たに
ex
という名前のセクションを追加します。 -
dhcp.ex.tag
リストに /etc/dnsmasq.conf で追加したタグを追加します。
DHCP設定に関する公式マニュアル
[OpenWrt Wiki] DNS and DHCP configuration /etc/config/dhcp
uci
コマンドについては、以下のリンクが参考になります。
OpenWrt UCIコマンドの使い方
uci show dhcp
dhcp.ex=dhcp
dhcp.ex.tag='cf'
Caution
|
既存の dhcp.<section>.tag に追加すると、そのセグメントでIPアドレスが配布されなくなってしまったので、新たにセクションを追加しています。
|
動作確認
dhclient
コマンドを使ってDHCPによるIPアドレスの設定や開放を行います。
root@dhcp-test:~# dhclient -r
Killed old client process
root@dhcp-test:~#
root@dhcp-test:~#
root@dhcp-test:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 66:6f:7f:74:a2:1d brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet6 fe80::646f:7fff:fe74:a21d/64 scope link
valid_lft forever preferred_lft forever
root@dhcp-test:~#
root@dhcp-test:~#
root@dhcp-test:~# dhclient
root@dhcp-test:~#
root@dhcp-test:~#
root@dhcp-test:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 66:6f:7f:74:a2:1d brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 10.1.130.155/24 brd 10.1.130.255 scope global dynamic ens18
valid_lft 43197sec preferred_lft 43197sec
inet6 fe80::646f:7fff:fe74:a21d/64 scope link
valid_lft forever preferred_lft forever
journalctl
Mar 12 08:22:39 dhcp-test dhclient[578]: Killed old client process
Mar 12 08:22:40 dhcp-test dhclient[578]: DHCPRELEASE of 10.1.130.155 on ens18 to 10.1.2.1 port 67
Mar 12 08:22:49 dhcp-test dhclient[588]: DHCPDISCOVER on ens18 to 255.255.255.255 port 67 interval 7
Mar 12 08:22:52 dhcp-test dhclient[588]: DHCPOFFER of 10.1.130.155 from 10.1.130.1
Mar 12 08:22:52 dhcp-test dhclient[588]: DHCPREQUEST for 10.1.130.155 on ens18 to 255.255.255.255 port 67
Mar 12 08:22:52 dhcp-test dhclient[588]: DHCPACK of 10.1.130.155 from 10.1.130.1
Mar 12 08:22:52 dhcp-test dhclient[588]: bound to 10.1.130.155 -- renewal in 18984 seconds.