ナマケモノの家

ナマケモノ

はじめに

余剰になった Raspberry Pi 3B+ で、DHCP,DNS サーバー を構築した時のメモ

OS インストール

  1. rpi-imager を使って SD カードに OS のイメージを書き込む。
    • ホスト名は pi.local (mDNS で引くので、既存のものと重複しないように。後で変更する)
    • 有線LAN (インストール時に固定IPは出来ない。dhcp 必須。)
    • SSH を有効に
  2. SDカードを挿して起動し、ヘッドレスで接続する。
    • 初回は boot に時間かかるので、しばらく待ってから ssh で login
       $ ssh pi.local 
      
  3. OS のアップデート

    $ sudo apt update 
    $ sudo apt -y upgrade
    
  4. DHCPサーバーなので、IPアドレスを固定とする。

    自アドレス 192.168.1.2/24
    gateway 192.168.1.1
    DNS 192.168.1.2,8.8.8.8
    IPv6 停止
    ドメイン home
     $ nmcli connection show
     $ sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.1.2/24
     $ sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.1.1
     $ sudo nmcli connection modify "Wired connection 1" ipv4.dns 192.168.1.2,8.8.8.8
     $ sudo nmcli connection modify "Wired connection 1" ipv4.dns-search home
     $ sudo nmcli connection modify "Wired connection 1" ipv4.method manual
     $ sudo nmcli connection modify "Wired connection 1" ipv6.method disabled
     $ sudo nmcli connection up "Wired connection 1"
    
    • “Wired connection 1” は、nmcli connection show で出てきた NAME
    • up と同時に IP が変わるので接続が切れる。
  5. mail の設定 (smtpサーバーに投げるだけ)

     $ sudo apt install -y msmtp-mta msmtp
    

    の後 ~/.msmtprc を適宜設定

  6. ntp(chrony) の設定

     $ sudo apt -y install chrony
    

    の後 /etc/chrony/chrony.conf を適宜設定

     $ sudo systemctl restart  chrony
     $ sleep 10 ; chronyc sources
    
  7. ロケールの設定

     $ sudo raspi-config
      1. 5 Localisation Options
        1. L1 Locale       Configure language and regional settings
    

    ja_JP.UTF-8 に設定する。

  8. DNSサーバー(unbound) のインストール (設定は後述)

     $ sudo apt -y install bind9-host unbound
     $ sudo systemctl stop  unbound
    
  9. DHCPサーバー(udhcpd) のインストール (設定は後述)

     $ sudo apt -y install udhcpd
     $ sudo systemctl stop udhcpd
    

OS カスタマイズ(不要なサービスの停止)

  1. /boot/firmware/config.txt を修正する

     #dtparam=audio=on              # コメントアウト
     #camera_auto_detect=1          # コメントアウト
     #dtoverlay=vc4-kms-v3d         # コメントアウト
     #max_framebuffers=2            # コメントアウト
     #disable_overscan=1            # コメントアウト
     dtoverlay=disable-bt           # 追記
     dtoverlay=disable-wifi         # 追記
    
  2. IPv6 の停止の為に /boot/firmware/cmdline.txt に ipv6.disable=1 を追加

     console=serial0,115200 console=tty1 root=PARTUUID=ca2c7784-02 rootfstype=ext4 ipv6.disable=1 fsck.repair=yes rootwait
    
  3. /etc/modprobe.d/raspi-blacklist.conf に下記を設定

     blacklist bcm2835_codec
     blacklist bcm2835_v4l2
     blacklist bcm2835_isp
     blacklist snd_bcm2835
     blacklist drm
     blacklist dm_mod
     blacklist ipv6
    

SDカードの長寿命化

  1. スワップを使用しない

     sudo apt remove -y dphys-swapfile
    
  2. /tmp等 を RAMディスク に変更 /etc/fstab に追記

     tmpfs   /tmp         tmpfs   defaults,size=64m,noatime,mode=1777  0  0
     tmpfs   /var/tmp     tmpfs   defaults,size=16m,noatime,mode=1777  0  0
     tmpfs   /var/log     tmpfs   defaults,size=32m,noatime,mode=0755  0  0
    

DNS (unbound) の設定

  1. /etc/unbound/unbound.conf に設定 下記は設定例

     server:
         verbosity: 1
        
         interface: 0.0.0.0
         interface: 127.0.0.1
         access-control: 192.168.0.0/16 allow
         access-control: 127.0.0.0/8 allow
         do-ip6: no
        
        local-zone: "home." static
        local-data: "gw.home.                IN A 192.168.1.1"
        local-data: "dhcpd.home.             IN A 192.168.1.2"
        local-data: "dns.home.               IN A 192.168.1.2"
        local-data: "book.home.              IN A 192.168.1.2"
        local-data: "raspi.home.             IN A 192.168.1.2"
        local-data: "ubuntu.home.            IN A 192.168.1.3"
        
     forward-zone:
         name: "."
         forward-addr: 8.8.8.8
         forward-addr: 8.8.4.4
        
     remote-control:
    
     $ sudo systemctl restart unbound
    

DHCPD (udhcpd) の設定

配布アドレス 192.168.1.233 -> 252
gateway 192.168.1.1
DNS 192.168.1.2,8.8.8.8
ドメイン home
  1. /etc/udhcpd.conf に設定

     start   192.168.1.233
     end     192.168.1.252
     interface   eth0
     max_leases  20
     option  subnet  255.255.255.0
     option  domain  home
     option  lease   864000
     opt dns 192.168.1.2, 8.8.8.8
     opt router  192.168.1.1
    
  2. /etc/default/udhcpd を編集して no -> yes にしてから

     $ sudo systemctl restart udhcpd