はじめに
ここでは一般的にはWi-Fiルーターが担ってると思われるDHCPサーバーをRaspberry Piに構築してみたいと思う。
インストール
いつも通り apt
でインストールを行う。
sudo apt update && sudo apt install isc-dhcp-server
設定
設定ファイルは下記の3つ。
/etc/default/isc-dhcp-server
: 全体の設定/etc/dhcp/dhcpd.conf
: IPv4の設定/etc/dhcp/dhcpd6.conf
: IPv6の設定
全体の設定
/etc/default/isc-dhcp-server
を編集して全体の設定を行う。
ここではIPv4のみを使用するように設定する。
DHCPDv4_CONF
の行のコメントを外して、 INTERFACESv6
の行をコメントアウトする。
また INTERFACESv4
には使用するインターフェースの名前を入れる。
:
:
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
:
:
INTERFACESv4="eth0"
#INTERFACESv6=""
:
:IPv4の設定
/etc/dhcp/dhcpd.conf
を編集してIPv4の設定を行う。
この例では以下の内容を設定している。
項目 | 値 |
---|---|
ネットワーク | 192.168.100.0 |
ネットマスク | 255.255.255.0 |
デフォルトゲートウェイ | 192.168.100.1 |
DNS | 192.168.100.1 |
IPアドレス付与範囲 | 192.168.100.51~192.168.100.100 |
固定割当でMACアドレス xx:xx:xx:xx:xx:xx
にホスト名 PC01
とIPアドレス 192.168.100.101
割り当てている。
:
:
option domain-name-servers 192.168.100.1;
:
:
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.1;
range 192.168.100.51 192.168.100.100;
host PC01 {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixed-address 192.168.100.101;
}
:
:
}
注意点として、IPアドレス付与範囲と固定割り当てのアドレスが重なってはいけない。
IPv6の設定
/etc/dhcp/dhcpd6.conf
を編集してIPv6の設定を行う…が、今回はやってないので割愛。
起動
systemctl
で自動実行の制御を行う。
有効化
sudo systemctl enable isc-dhcp-server.service
起動
sudo systemctl start isc-dhcp-server.service
おわりに
Wi-FiルーターでやってることをわざわざRaspberry Piでやってみたわけだけど、意外と簡単にできた気がする。
おまけ
固定割り当てが多いと設定ファイルに書くのが面倒かも知れない。
そんな人のためにPowerShellでCSVファイルを投入すると設定ファイルにコピペできる形式で出力するスクリプトを書いてみた。
即席で書いたのでCSVファイルの1行目は1カラム目を「HOST」、2カラム目を「MAC」、3カラム目を「IP」で固定とした。
各項目の形式のチェックはしてないので、そこは別にやってください。
# ------------------------------------------------------------------
# CSV → Fixed IP 定義出力スクリプト for ISC DHCP Server
# ------------------------------------------------------------------
# ------------------------------------------------------------------
# 引数定義
# ------------------------------------------------------------------
Param(
[Parameter()][String]$InputFile = 'host.csv' ,
[Parameter()][String]$OutputFile = 'host.lst'
)
# ------------------------------------------------------------------
# メイン処理
# ------------------------------------------------------------------
Import-Csv -Path $InputFile | Sort-Object -Property 'HOST' | ForEach-Object -Begin {
# 出力ファイルを空にする
$Null > $OutputFile
} -Process {
# 出力処理
If ( ( $_.HOST -ne '' ) -and ( $_.MAC -ne '' ) -and ( $_.IP -ne '' ) ) {
( "host " + $_.HOST + " { hardware ethernet " + $_.MAC + "; fixed-address " + $_.IP + "; }" ) >> $OutputFile
} Else {
( "# host " + $_.HOST + " { hardware ethernet " + $_.MAC + "; fixed-address " + $_.IP + "; }" ) >> $OutputFile
}
}