投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2022年2月9日水曜日

【Linux RaspiOS bullseye】Raspberry pi OSにNetwork Managerとdhclientを導入する

 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         CONNECTION         
eth0           ethernet  connected     Wired connection 1 
wlan0          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,keyfile
dhcp=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 565
Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPOFFER of 192.168.XXX.12 from 192.168.XXX.254
Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPREQUEST for 192.168.XXX.12 on eth0 to 255.255.255.255 port 67
Feb 09 01:40:48 raspberrypi dhclient[565]: DHCPACK of 192.168.XXX.12 from 192.168.XXX.254
Feb 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:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         DC:A6:32:**:**:**
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Wired connection 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.XXX.12/24
IP4.GATEWAY:                            192.168.XXX.254
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.XXX.254, mt = 100
IP4.ROUTE[2]:                           dst = 192.168.XXX.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             192.168.YYY.ZZZ
IP6.ADDRESS[1]:                         fe80::****:****:****:****/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.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               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain 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               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain 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-persistent 

Current 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 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;


◯両者の違いについて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日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad