Raspberry Pi を利用したサーバの、初期に行うべき手順で IPv4 アドレスを固定します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。
IPv6 を有効化していると、ホームルータの NAT に関係なく、インターネットと直接接続できるようになります。
セキュリティ的に設定が面倒なのと、まだ IPv4 が中心なので IPv6 無効化と、静的 IP アドレス設定を行います。
/etc/sysctl.conf に IPv6 の利用を停止する設定を追記します。
$ sudo cp -p /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
61,62d60
< net.ipv6.conf.all.disable_ipv6 = 1
< net.ipv6.conf.default.disable_ipv6 = 1
$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ ip a
対象のバージョンを確認します。
Raspberry Pi OS が bookworm の場合は、NetworkManager を設定します。
【参考】ネットワーク設定パッケージ
Debian 系 | ネットワーク設定 | 備考 |
12 | bookworm | NetworkManager | |
11 | bullseye | dhcpcd | |
これは 11 から 12 への変更点のひとつです。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
NAME="Raspbian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
ここでは、Raspberry pi OS 12 (bookworm) 以降の NetworkManager を利用した IP アドレスの設定を行います。
まずは、DEVICE を確認します。
$ nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 0f3c983a-4e89-39f5-b433-aa43b0088c28 ethernet eth0
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback connected (externally) lo
wlan0 wifi disconnected --
p2p-dev-wlan0 wifi-p2p disconnected --
NAME が 'Wired connection 1' のものが eth0 となっています。
次に、デバイス毎の詳細情報を、ふむふむと確認しておきます。
$ nmcli device show
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: B8:27:EB:27:55:9C
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: Wired connection 1
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 192.168.1.198/24
IP4.GATEWAY: 192.168.1.1
IP4.ROUTE[1]: dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 100
IP4.DNS[1]: 192.168.1.1
IP4.SEARCHES[1]: flets-east.jp
IP4.SEARCHES[2]: iptvf.jp
IP6.GATEWAY: --
IP6.DNS[1]: 2404:1a8:7f01:b::3
IP6.DNS[2]: 2404:1a8:7f01:a::3
IP6.SEARCHES[1]: flets-east.jp
IP6.SEARCHES[2]: iptvf.jp
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.STATE: 100 (connected (externally))
GENERAL.CONNECTION: lo
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 127.0.0.1/8
IP4.GATEWAY: --
IP6.GATEWAY: --
GENERAL.DEVICE: wlan0
GENERAL.TYPE: wifi
GENERAL.HWADDR: B8:27:EB:72:00:C9
GENERAL.MTU: 1500
GENERAL.STATE: 30 (disconnected)
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
IP4.GATEWAY: --
IP6.GATEWAY: --
GENERAL.DEVICE: p2p-dev-wlan0
GENERAL.TYPE: wifi-p2p
GENERAL.HWADDR: (unknown)
GENERAL.MTU: 0
GENERAL.STATE: 30 (disconnected)
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
これは行わなくてもいいのですが、毎回クォートで括らなければならない接続名(NAME)を 'Wired connection 1' から svnet へ変更しておきます。
逆に言うと、毎回クォートで括れば、設定変更の必要はありません。
$ sudo nmcli con mod 'Wired connection 1' connection.id svnet
$ nmcli con show
次に、IP アドレスやルーティングの設定を変更します。
IP アドレスや設定情報は、適当に読み替えてください。
$ sudo nmcli con mod svnet ipv4.address "192.168.10.100/24"
$ sudo nmcli con mod svnet ipv4.gateway "192.168.10.1"
$ sudo nmcli con mod svnet ipv4.dns "192.168.10.1 192.168.10.10"
$ sudo nmcli con mod svnet ipv4.dns-priority 10 ipv6.dns-priority 20
$ sudo nmcli con mod svnet ipv4.dns-search "example.jp"
$ sudo nmcli con mod svnet ipv4.routes "192.168.10.0/24 192.168.10.1"
$ sudo nmcli con mod svnet ipv4.method "manual"
$ sudo nmcli con mod svnet ipv6.method "disabled"
$ sudo nmcli con up svnet
途中、IPv6 は無効にしているのに指定があるのはなぜかというと、IPv6 アドレスに対する名前解決の優先度が下げるためです。
いま接続しているセッションについては接続が切れないようですが、今後は新しい IP アドレスで接続する必要があります。
ネットワーク設定を確認する。
$ ip a
$ nmcli connection show
ネットワーク設定が保存されていることを確認するにはいくつか方法がありますが、すべて一括で反映するには OS を再起動します。
$ sudo reboot
起動後は、設定した IP アドレスに対して Tera Term 等で接続してください。
ネットワーク設定だけを反映したい場合は、対象サービスを再起動します。
$ systemctl status network.service
$ systemctl restart network.service
$ systemctl status network.service
後は、設定した IP アドレスに対して Tera Term 等で接続してください。
$ ip a
$ cat /etc/resolv.conf
# Generated by resolvconf
domain example.jp
nameserver 192.168.10.10
nameserver 192.168.10.1
$ ping 192.168.10.1 -c 3