Raspberry Pi 4のbootloaderがアップデートされたよ

Raspberry Pi 4 のbootloaderのアップデートが先週リリースされていたようです。
sudo rpi-eeprom-update -a を実行した結果は以下の通りでした。

*** PREPARING EEPROM UPDATES ***

BOOTLOADER: update available
CURRENT: 2023年 1月 11日 水曜日 17:40:52 UTC (1673458852)
LATEST: 2024年 4月 15日 月曜日 13:12:14 UTC (1713186734)
RELEASE: default (/lib/firmware/raspberrypi/bootloader-2711/default)
Use raspi-config to change the release.

VL805_FW: Using bootloader EEPROM
VL805: up to date
CURRENT: 000138c0
LATEST: 000138c0
CURRENT: 2023年 1月 11日 水曜日 17:40:52 UTC (1673458852)
UPDATE: 2024年 4月 15日 月曜日 13:12:14 UTC (1713186734)
BOOTFS: /boot/firmware
'/tmp/tmp.VdOdIJyQvy' -> '/boot/firmware/pieeprom.upd'
Copying recovery.bin to /boot/firmware for EEPROM update

EEPROM updates pending. Please reboot to apply the update.
To cancel a pending update run "sudo rpi-eeprom-update -r".

実に1年3ヶ月ぶりのアップデートになりましたね。
で、何が変わったのかと言うと、

  • Raspberry Pi 5のファームウェアとコードを共通化して、バグ修正の対応をしやすくする
  • Secure Bootモードの問題修正

などなどとのこと。RPi5のファームウェアはこまめにアップデートされていて、RPi4は少し放置気味だったので、コードの共通化は良い傾向なのかな、と思います。

Raspberry Piを使った自宅サーバ構築の大まかな手順

今月に入って、Raspberry Pi 5が日本国内にも流通され始めたとのことで、自宅サーバをパワーアップするか少し悩んでいるところです。
とは言え、5V・5Aという電源要求や、発熱を考えると、ファンレスでぬくぬくと動いてくれるRasPi4のままでいいかなとも思っている次第です。
ということで、RasPi4で自宅にSSHサーバとVPNサーバを立てた際の備忘録をつらつらと書いてみました。

1.Raspberry Pi用のmicroSDにOSイメージを焼く

(気休め程度かもしれませんが、耐久性を期待してpSLCモードのmicroSDを使っています。)
Raspberry Pi Imagerを使ってmicroSDにインストールイメージを焼く。
その後、microSDの”/boot”に空のファイルで”ssh”を作成する。
無線LANを使う場合は、”wpa_supplicant”も”/boot”に配置する。
Ethernetのデバイス名を”eth0″との形式にするために、”/boot/cmdline.txt”の最後に以下の行を追加する。

net.ifnames=0

2.Raspberry Pi OSの初期設定

上記で設定したmicroSDを実装したRaspberry Piを起動してから、raspi-configで初期設定する。
SSHの公開鍵を生成と登録をして、SSHの公開鍵暗号方式でログイン出来るようにする。
apt updateなどでパッケージの更新、rpi-updateでファームウェアの更新をしたら初期設定は完了。

3.SSHのポート番号変更(必要に応じて)

標準状態ではSSHはポート番号22となっているので、”/etc/ssh/sshd_config”を編集してポート番号を振り替える。

4.Raspberry PiのIPアドレス固定化

インストール直後のRaspberry Pi OSでは、IPアドレスはDHCP設定となっているので、/etc/dhcpcd.confを以下の例を参考に編集して、IPアドレスを固定化する。(各々の設定値は、各自の環境によること。)
# ローカルのサブネットを”61″にしている理由は言わずもがなです 🙂

interface eth0
static ip_address=192.168.61.100/24
static routers=192.168.61.1
static domain_name_servers=192.168.61.1

5.VPNサーバのインストールファイルの準備

Softether VPNのサイトから、Softether VPN ServerのLinux ARM 64bitをwgetコマンドでダウンロードする。
記事記載時点のRTMバージョンをダウンロードする場合は以下の通り。

wget https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Linux/SoftEther_VPN_Server/64bit_-_ARM_64bit/softether-vpnserver-v4.42-9798-rtm-2023.06.30-linux-arm64-64bit.tar.gz

“/usr/local/vpnserver/”などのディレクトリを作成して、上記のtar.gzファイルを移動させてtarコマンドで解凍する。コマンドは以下の感じ。

tar zxvf softether(中略...)tar.gz

6.Softether VPN ServerのMake

上記で解凍したディレクトリで”make”コマンドを実行する。
コンパイル中にライセンスの同意などが問われるので、表示を確認して選択する。
コンパイルで生成された”vpncmd”と”vpnserver”に実行権限を付与して、その他のファイルの実行権限は削除するため、以下のコマンドを実行する。

chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver

7.vpnserverのサービスの作成

上記のvpnserverをsystemdで自動起動させるために、サービスを作成する。
“/etc/systemd/system/vpnserver.service”というユニット定義ファイルを作成して、以下の内容とする。

[Unit]
Description=Softether VPN Server Service
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=on-abort
WorkingDirectory=/usr/local/vpnserver/

[Install]
WantedBy=multi-user.target

8.サービスの有効化と確認


以下のコマンドで作成したvpnserver.serviceに実行権限を付与する。

chmod 755 /etc/systemd/system/vpnserver.service

デーモンをリロードして、サービスを有効化する。

sudo systemctl daemon-reload
sudo systemctl enable vpnserver.service
sudo systemctl start vpnserver.service

再起動後に以下のコマンドでプロセスを確認して、vpnserverが起動していれば成功。

ps aux | grep vpn

9.Softether VPNの設定

個々のネットワーク構成や、タップをどう配置するかによっても対応方法が違うので、詳細は省略。
(と言いつつ、ここがサーバ構築の一番のクライマックスのはずでは。。。)
Windowsマシンに”Softether VPN Server Manager for Windows”を入れてそこからグラフィカルで設定するのが一番簡単。ただ、サーバ上でvpncmdを使って設定しても、対話型のインタフェースとなっているので、Windowsを使うことは必須ではない。
L2TP/IPSecとOpenVPNが使えるようになっていればOK。

余談ですが、現時点で最新のOpenVPNのクライアントアプリではL2モードは有効ではなく、L3モードのみ動作するとのことです。OpenVPNを有効にしても、L2モードで接続しようとするとクライアント側でエラーにとなり「どこがおかしいんや…」と悪戦苦闘しました。

10.DDNSの設定とルータのポートフォーワード設定

必要に応じてDDNSの設定をする。ルータ側でDDNSを設定しても、サーバでddclientを使っても構わない。
ルータ側でポートフォーワードの設定をして、以下のポートでアクセスされた場合に、Raspberry PiのIPアドレス宛に転送されるようにする。

  • TCP 22(SSHを22/tcpに設定した場合)
  • UDP 500(標準的なL2TP/IPSecの設定に準拠した場合)
  • TCP 1194(OpenVPNを1194/tcpに設定した場合)

11.ファイアウォールの設定

ufwをaptコマンドでインストールして設定する。

sudo apt-get install ufw

以下のコマンドでufwで限られたポートのみアクセス可能となるように設定する。
(ローカルのIPアドレスやポート番号は個々の環境によること。)

sudo ufw default deny
sudo ufw allow proto tcp from 192.168.61.0/24 to any port 22
sudo ufw allow proto udp from 192.168.61.0/24 to any port 500
sudo ufw allow proto udp from 192.168.61.0/24 to any port 1194
sudo ufw allow proto tcp from 192.168.61.0/24 to any port 5555
sudo ufw limit proto tcp from any to any port 22
sudo ufw limit proto udp from any to any port 500
sudo ufw limit proto tcp from any to any port 1194

12.スワップファイルの停止とログファイルのRAMディスク化

microSDの劣化を回避するため、スワップファイルの作成を停止させる。

sudo apt autoremove -y dphys-swapfile

“/etc/fstab”を編集して、tmpディレクトリとlogディレクトリをRAM上に保存するように変更する。

tmpfs   /tmp        tmpfs   defaults,size=256m,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

13.NTPサーバの変更

“/etc/systemd/timesyncd.conf”を以下の通り編集して、NTPサーバを日本国内のものに変更する。

NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp

変更したら、timesyncdを再起動。

sudo systemctl restart systemd-timesyncd

13.動作確認

一通りの設定が出来たら、再起動してからSSHでコンソールにログインできる
ことを確認する。アクセス不可の場合は、ローカルコンソールからログインした
後に、dmesgコマンドで起動エラーが出ていないか確認する。

数年離れている間に…

Webサーバの管理から数年離れている間に、色々と世の中の常識が変化していることに、今更ながら気付かされております。

ひと昔前ならば、faviconを置いておけば、サイトのアイコンをカスタム化出来ておしゃれ(?)に出来る、という感じで、faviconを用意するかは任意だと思っていたのですが、今の時代はiOS端末やらAndroid端末のためにシステム要求にあわせたアイコンを用意することが望ましいようですね。

その他、IE11は自らの都合でXMLファイルを要求してくる、と言ったこともここ数日で新たに把握し、Webの構築も大変になったなぁ、と思っている次第です。

BLOGを建ててみました

ドメインの契約更新もせずに放置していた”WYM Laboratory”ですが、サーバだけは復帰させました。

これからの運用方針は全く決めておりませんが、WordPressを設置出来るようなので、BLOGだけ建ててみました。久々に、サーバ運用の勉強でもしてみましょうかと思いますが、時間が取れるのかどうかが問題です。