いなほちゅんのひとりごとブログ版

私のメモ帳を公開してみる。

Raspbian on Raspberry Pi ISC DHCP Server編

Raspbian on Raspberry Pi ISC DHCP Server編
日付
カテゴリー
シェア

はじめに

ここでは一般的には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
    }
}


アーカイブ

タグ

ページの先頭へ