NanoPIにUdhcpdをたてる

# 摘要
使用NanoPI创建UDHCP服务器

# はじめに

[NanoPIをRouterにする](https://qiita.com/maclineto/items/a5f455ec273a26519d1a) にて、1台のマシンをinternetに繋ぎ、その他のマシンをLANでせつぞくしてInternet接続を共有する方法を説明しました。
しかし「接続できる。」と「使える」には隔たりがあります。routeの設定、DNSの設定がなければ繋がっていても使えません。手動で各clientを設定することはできますが、手間なのでdhcp daemonを導入しましょう。

# DHCPDの種類

dhcpdは一種類ではありません。

- isc-dhcp-daemon
- udhcpd
- dhcp3-server

などがあります。
[NanoPI上でdeadwoodを動かす](https://qiita.com/maclineto/items/1fb65d908f830098a6df)に書いたように、iscのソフトは一般的ですが、デカくて、重くて、バギーなのであまり好きになれません。今回はudhcpdを使ってみることにしました。

# Install

Installはとっても簡単です。

```
apt update
apt upgrade
apt install udhcpd
```

# 設定

設定もとっても簡単です。

```file:/etc/udhcpd.conf

# Sample udhcpd configuration file (/etc/udhcpd.conf)

# The start and end of the IP lease block

start           192.168.254.150 #default: 192.168.0.20
end             192.168.254.160 #default: 192.168.0.254


# The interface that udhcpd will use

interface       eth0            #default: eth0


# The maximim number of leases (includes addressesd reserved
# by OFFER's, DECLINE's, and ARP conficts

max_leases      10              #default: 254


# If remaining is true (default), udhcpd will store the time
# remaining for each lease in the udhcpd leases file. This is
# for embedded systems that cannot keep time between reboots.
# If you set remaining to no, the absolute time that the lease
# expires at will be stored in the dhcpd.leases file.

#remaining      yes             #default: yes


# The time period at which udhcpd will write out a dhcpd.leases
# file. If this is 0, udhcpd will never automatically write a
# lease file. (specified in seconds)

#auto_time      7200            #default: 7200 (2 hours)


# The amount of time that an IP will be reserved (leased) for if a
# DHCP decline message is received (seconds).

#decline_time   3600            #default: 3600 (1 hour)


# The amount of time that an IP will be reserved (leased) for if an
# ARP conflct occurs. (seconds

#conflict_time  3600            #default: 3600 (1 hour)


# How long an offered address is reserved (leased) in seconds

#offer_time     60              #default: 60 (1 minute)

# If a lease to be given is below this value, the full lease time is
# instead used (seconds).

#min_lease      60              #defult: 60


# The location of the leases file

#lease_file     /var/lib/misc/udhcpd.leases     #defualt: /var/lib/misc/udhcpd.leases

# The location of the pid file
#pidfile        /var/run/udhcpd.pid     #default: /var/run/udhcpd.pid

# Everytime udhcpd writes a leases file, the below script will be called.
# Useful for writing the lease file to flash every few hours.

#notify_file                            #default: (no script)

#notify_file    dumpleases      # <--- useful for debugging

# The following are bootp specific options, setable by udhcpd.

#siaddr         192.168.0.22            #default: 0.0.0.0

#sname          zorak                   #default: (none)

#boot_file      /var/nfs_root           #default: (none)

# The remainer of options are DHCP options and can be specifed with the
# keyword 'opt' or 'option'. If an option can take multiple items, such
# as the dns option, they can be listed on the same line, or multiple
# lines. The only option with a default is 'lease'.

#Examles
opt     dns     192.168.254.80
option  subnet  255.255.255.0
opt     router  192.168.254.80
opt     wins    192.168.10.10
option  domain  local
option  lease   864000          # 10 days of seconds


# Currently supported options, for more info, see options.c
#opt subnet
#opt timezone
#opt router
#opt timesrv
#opt namesrv
#opt dns
#opt logsrv
#opt cookiesrv
#opt lprsrv
#opt bootsize
#opt domain
#opt swapsrv
#opt rootpath
#opt ipttl
#opt mtu
#opt broadcast
#opt wins
#opt lease
#opt ntpsrv
#opt tftp
#opt bootfile
#opt wpad

# Static leases map
#static_lease 00:60:08:11:CE:4E 192.168.0.54
#static_lease 00:60:08:11:CE:3E 192.168.0.44
```

# 再起動

設定したら再起動します。

```
systemctl restart udhcpd
```

# 結論

小型軽量の組込用に使いやすいdhcp daemonです。