Raspberry pi 4 (4GB)に、Raspberry pi OS(32bit)を導入した。
OSのバージョンは、2021-10-30-raspios-bullseye-armhf-lite である。
このOSには、Network Managerが導入されていなかった。
また、デフォルトでdhcpcdというDHCPクライアントが導入されていた。
以下では、Raspberry pi OS(2021-10-30-raspios-bullseye-armhf-lite)の導入と基本設定、Network Managerの導入およびDHCPクライアントであるdhclientの導入までを行った手順を記載している。
また、以下で構築した環境に、静的IPv4アドレス、ルーティング情報を追加するには、次のページを参照してください。
ログに書き込まれる内容によって、SDカードの寿命が気になれば、
次のページに記載の方法で、「/var/log」をRAM領域に移すこともできる。
■Raspberry pi 4 (4GB)にOSイメージを書き込こみ
これは作業用の別のLinuxマシンで行った。
◯次のファイルをダウンロードした。
(これは古いバージョンである。現時点でより新しいOSが発表されている。)
https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-11-08/2021-10-30-raspios-bullseye-armhf-lite.zip
◯展開したimgファイルの内容をddを用いてmicroSDに書き込んだ。
$ sudo dd if='/Path/To/2021-10-30-raspios-bullseye-armhf-lite.img' of=/dev/sdX bs=3M
詳細は次のページを参照する。
■Raspberry pi 4の起動
Raspberry pi 4本体での操作である。
Raspberry pi 4に次のものを取り付けた。
・OSを書き込んだmicroSD(上記手順)
・USBキーボード
・HDMI接続モニター
・LANケーブル(プライベートIPv4アドレスがDHCPで自動割当され、インターネットにも接続可能な安全なネットワーク)
そして、Raspberry pi 4を安定で十分な容量の電源に繋ぎシステムを起動させた。
■Raspberry pi 4にSSHリモート接続
◯次のページを参照して、Raspberry pi 4にSSH接続を行った。
■Raspberry pi 4の基本設定
◯次のページを参照して、Raspberry pi 4に基本設定を行った。
・rootユーザーに切り替え
・仮想端末tmuxの導入
・システムの更新
◯時刻が日本時刻ではなかったのでタイムゾーンを東京に設定した。
pi@raspberrypi:~ $ sudo raspi-config
次のように順に項目を選択していく。
5 Localisation Options Configure language and regional settings→L2 Timezone Configure time zone→Asia→Tokyo
完了したら<Finish>を選択する。
設定が終わると、次のように表示された。
Current default time zone: 'Asia/Tokyo'
■NetworkManagerとdhclientの導入
ネットワークが不通になる場合に備えて、モニターとUSBキーボードを準備しておく。
操作はrootユーザーに切り替えて行った。
◯デフォルトの dhcpcdを停止し無効にした。
停止しなければNetwork Managerのdhcpシステムと競合の恐れがある。
# systemctl stop dhcpcd.service
# systemctl disable dhcpcd.service
# systemctl is-enabled dhcpcd.service
disabled
◯NetworkManagerのインストールを行った。
# apt update
# apt install network-manager
◯NetworkManagerが有効になっているか確認した。
# systemctl is-enabled NetworkManager
enabled
(もし無効のときは、systemctl enabled NetworkManager を実行する。)
◯nmcliコマンド(Network ManagerのCLI)の動作確認
$ nmcli d
DEVICE TYPE STATE CONNECTIONeth0 ethernet connected Wired connection 1wlan0 wifi disconnected --p2p-dev-wlan0 wifi-p2p disconnected --lo loopback unmanaged --
◯DHCPクライアントとしてdhclientを利用する
デフォルトのDHCPクライアントは次のように内蔵のものが使用されていた。
# journalctl -b | egrep "internal"
Feb 09 01:35:36 raspberrypi NetworkManager[6075]: <info> [1644338136.7170] dhcp-init: Using DHCP client 'internal'Feb 09 01:35:36 raspberrypi NetworkManager[6075]: <info> [1644338136.7178] settings: Loaded settings plugin: keyfile (internal)Feb 09 01:35:37 raspberrypi NetworkManager[6075]: <info> [1644338137.0383] device (wlan0): supplicant interface state: internal-starting -> disconnected
一方で、次の結果は返ってこなかった。
# journalctl -b | egrep "dhclient"
次のように設定して、dhclientが用いられるようにした。
# nano /etc/NetworkManager/NetworkManager.conf
[main]plugins=ifupdown,keyfiledhcp=dhclient[ifupdown]managed=false
そしてシステムを再起動した。
(IPアドレスの変化に備えて、予めモニターに接続しておいた。)
# reboot
再起動後、IPアドレスが変化したので注意する。
DHCPクライアントとしてdhclientが使用されているか確認した。
# journalctl -b | egrep "dhclient"
Feb 09 01:40:46 raspberrypi NetworkManager[377]: <info> [1644338446.1600] dhcp-init: Using DHCP client 'dhclient'Feb 09 01:40:48 raspberrypi NetworkManager[377]: <info> [1644338448.3818] dhcp4 (eth0): dhclient started with pid 565Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPOFFER of 192.168.XXX.12 from 192.168.XXX.254Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPREQUEST for 192.168.XXX.12 on eth0 to 255.255.255.255 port 67Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPACK of 192.168.XXX.12 from 192.168.XXX.254Feb 09 01:40:48 raspberrypi dhclient[565]: bound to 192.168.XXX.12 -- renewal in 125304 seconds.
Network Managerに連携してdhclientが動作していることがわかった。
DHCPクライアントのdhclientが取得したネットワーク情報は次のファイルに保存されていた。
(*で示した部分は環境固有の値だと考えられる。)
# less /var/lib/NetworkManager/dhclient-********-****-****-****-************-eth0.lease
lease {interface "eth0";fixed-address 192.168.XXX.12;option subnet-mask 255.255.255.0;option dhcp-lease-time 259200;option routers 192.168.XXX.254;option dhcp-message-type 5;option dhcp-server-identifier 192.168.XXX.254;option domain-name-servers 192.168.YYY.ZZZ;option dhcp-renewal-time 129600;option dhcp-rebinding-time 226800;renew 4 2022/02/10 03:29:12;rebind 5 2022/02/11 07:40:48;expire 5 2022/02/11 16:40:48;}
◯ eth0の状態を表示させた。
dhcpクライアント(dhclient)が動作して、ネットワーク情報を正しく取得できている。
# nmcli dev show eth0
GENERAL.DEVICE: eth0GENERAL.TYPE: ethernetGENERAL.HWADDR: DC:A6:32:**:**:**GENERAL.MTU: 1500GENERAL.STATE: 100 (connected)GENERAL.CONNECTION: Wired connection 1GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1WIRED-PROPERTIES.CARRIER: onIP4.ADDRESS[1]: 192.168.XXX.12/24IP4.GATEWAY: 192.168.XXX.254IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.XXX.254, mt = 100IP4.ROUTE[2]: dst = 192.168.XXX.0/24, nh = 0.0.0.0, mt = 100IP4.DNS[1]: 192.168.YYY.ZZZIP6.ADDRESS[1]: fe80::****:****:****:****/64IP6.GATEWAY: --IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 100IP6.ROUTE[2]: dst = ff00::/8, nh = ::, mt = 256, table=255
■iptablesについて
◯Network Managerを導入した後、iptablesが既に導入されていた。
root@raspberrypi:/home/pi# apt install iptables
iptables is already the newest version (1.8.7-1).iptables set to manually installed.0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
◯IPフィルタの状態を調べた。
以下のように、フィルタが全く存在していない。
必要に応じて適切なフィルタリング設定を行う必要がある。
(IPv4について)
root@raspberrypi:/home/pi# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination
(IPv6について)
root@raspberrypi:/home/pi# ip6tables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination
◯iptablesフィルタルールの永続化
iptablesコマンドでフィルタを設定した場合、永続化しなければ再起動でルールが消えてしまう。
そのため、簡単に永続化できるように、次のパケージを導入した。
root@raspberrypi:/home/pi# apt install iptables-persistent
導入処理の際、次のように尋ねられる。
現在のiptablesのフィルタリングルールを永続化するかどうか尋ねられる。
保存を選択すると、「/etc/iptables/rules.v4」にフィルタルールが保存される。
Configuring iptables-persistentCurrent iptables rules can be saved to the configuration file /etc/iptables/rules.v4. These rules will then be loaded automatically during system startup.Rules are only saved automatically during package installation.See the manual page of iptables-save(8) for instructions on keeping the rules file up-to-date.Save current IPv4 rules?
引きつづき、IPv6についても同様の質問がされる。
詳細は次のページを参考にしてください。
■dhclientの設定ファイルについて
「/var/lib/NetworkManager/dhclient-eth0.conf」の内容は、Network Managerが管理しており、
「/etc/dhcp/dhclient.conf」で設定された内容を自動的に統合している。
このように「 /var/lib/NetworkManager/dhclient-eth0.conf」はNetwork Managerによって自動的に生成されており、たとえ直接変更しても元の状態に戻された。
以下は、オリジナルの「/etc/dhcp/dhclient.conf」に対して、
「 /var/lib/NetworkManager/dhclient-eth0.conf」がどのように生成されているか対照したものである。
◯デフォルトの「/etc/dhcp/dhclient.conf」の内容
root@raspberrypi:/home/pi# cat /etc/dhcp/dhclient.conf
# Configuration file for /sbin/dhclient.## This is a sample configuration file for dhclient. See dhclient.conf's# man page for more information about the syntax of this file# and a more comprehensive list of the parameters understood by# dhclient.## Normally, if the DHCP server provides reasonable information and does# not leave anything out (like the domain name, for example), then# few changes must be made to this file, if any.#option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;send host-name = gethostname();request subnet-mask, broadcast-address, time-offset, routers,domain-name, domain-name-servers, domain-search, host-name,dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,netbios-name-servers, netbios-scope, interface-mtu,rfc3442-classless-static-routes, ntp-servers;#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;#send dhcp-lease-time 3600;#supersede domain-name "fugue.com home.vix.com";#prepend domain-name-servers 127.0.0.1;#require subnet-mask, domain-name-servers;#timeout 60;#retry 60;#reboot 10;#select-timeout 5;#initial-interval 2;#script "/sbin/dhclient-script";#media "-link0 -link1 -link2", "link0 link1";#reject 192.33.137.209;#alias {# interface "eth0";# fixed-address 192.5.5.213;# option subnet-mask 255.255.255.255;#}#lease {# interface "eth0";# fixed-address 192.33.137.200;# medium "link0 link1";# option host-name "andare.swiftmedia.com";# option subnet-mask 255.255.255.0;# option broadcast-address 192.33.137.255;# option routers 192.33.137.250;# option domain-name-servers 127.0.0.1;# renew 2 2000/1/12 00:00:01;# rebind 2 2000/1/12 00:00:01;# expire 2 2000/1/12 00:00:01;#}
◯ そのときの「/var/lib/NetworkManager/dhclient-eth0.conf」の内容
root@raspberrypi:/home/pi# cat /var/lib/NetworkManager/dhclient-eth0.conf
# Created by NetworkManager# Merged from /etc/dhcp/dhclient.conf# Configuration file for /sbin/dhclient.## This is a sample configuration file for dhclient. See dhclient.conf's# man page for more information about the syntax of this file# and a more comprehensive list of the parameters understood by# dhclient.## Normally, if the DHCP server provides reasonable information and does# not leave anything out (like the domain name, for example), then# few changes must be made to this file, if any.#option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;#send dhcp-lease-time 3600;#supersede domain-name "fugue.com home.vix.com";#prepend domain-name-servers 127.0.0.1;#require subnet-mask, domain-name-servers;#timeout 60;#retry 60;#reboot 10;#select-timeout 5;#initial-interval 2;#script "/sbin/dhclient-script";#media "-link0 -link1 -link2", "link0 link1";#reject 192.33.137.209;#alias {# interface "eth0";# fixed-address 192.5.5.213;# option subnet-mask 255.255.255.255;#}#lease {# interface "eth0";# fixed-address 192.33.137.200;# medium "link0 link1";# option host-name "andare.swiftmedia.com";# option subnet-mask 255.255.255.0;# option broadcast-address 192.33.137.255;# option routers 192.33.137.250;# option domain-name-servers 127.0.0.1;# renew 2 2000/1/12 00:00:01;# rebind 2 2000/1/12 00:00:01;# expire 2 2000/1/12 00:00:01;#}send host-name "raspberrypi"; # added by NetworkManageroption rfc3442-classless-static-routes code 121 = array of unsigned integer 8;option ms-classless-static-routes code 249 = array of unsigned integer 8;option wpad code 252 = string;request; # override dhclient defaultsalso request subnet-mask;also request broadcast-address;also request time-offset;also request routers;also request domain-name;also request domain-name-servers;also request domain-search;also request host-name;also request dhcp6.name-servers;also request dhcp6.domain-search;also request dhcp6.fqdn;also request dhcp6.sntp-servers;also request netbios-name-servers;also request netbios-scope;also request interface-mtu;also request rfc3442-classless-static-routes;also request ntp-servers;also request ms-classless-static-routes;also request static-routes;also request wpad;also request root-path;
◯両者の違いについてdiffコマンドの結果
root@raspberrypi:/home/pi# diff /var/lib/NetworkManager/dhclient-eth0.conf /etc/dhcp/dhclient.conf
1,3d0< # Created by NetworkManager< # Merged from /etc/dhcp/dhclient.conf<14a12>15a14,21>> send host-name = gethostname();> request subnet-mask, broadcast-address, time-offset, routers,> domain-name, domain-name-servers, domain-search, host-name,> dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,> netbios-name-servers, netbios-scope, interface-mtu,> rfc3442-classless-static-routes, ntp-servers;>28a35>33a41>47,75d54< send host-name "raspberrypi"; # added by NetworkManager<< option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;< option ms-classless-static-routes code 249 = array of unsigned integer 8;< option wpad code 252 = string;<< request; # override dhclient defaults< also request subnet-mask;< also request broadcast-address;< also request time-offset;< also request routers;< also request domain-name;< also request domain-name-servers;< also request domain-search;< also request host-name;< also request dhcp6.name-servers;< also request dhcp6.domain-search;< also request dhcp6.fqdn;< also request dhcp6.sntp-servers;< also request netbios-name-servers;< also request netbios-scope;< also request interface-mtu;< also request rfc3442-classless-static-routes;< also request ntp-servers;< also request ms-classless-static-routes;< also request static-routes;< also request wpad;< also request root-path;<
<参考>
・NetworkManager.conf
< https://developer-old.gnome.org/NetworkManager/stable/NetworkManager.conf.html > 2022年2月7日
・NetworkManager
< https://wiki.archlinux.jp/index.php/NetworkManager > 2022年2月7日
・LinuxでDHCPについて勉強してみた
< https://qiita.com/toshihirock/items/fbb9c74e63eab3a6c9a1 > 2022年2月7日
・Adding a static IP to a DHCP-enabled NetworkManager connection
< https://www.szakmeister.net/blog/2017/jun/1/static-ip-nmcli/ >2022年2月6日
「Network Managerなしでdhclientを動作させる場合」
・Raspberry Pi(Debian)でdhclientを使う
< https://qiita.com/kmorimoto/items/e76047be70dd64c08a1e > 2022年2月7日
・corvax19/dhclient.service
< https://gist.github.com/corvax19/6230283 > 2022年2月7日