この記事及びシリーズは、ラズパイを使ってクラスターを構築していく試みです。
具体的には、ネットワーク設定(NAPT)、ファイアウォール、時刻同期、NIS、NFS、Slurm を実装していきます。
この記事では上のうち、ネットワークとファイアウォール、時刻同期までを設定します。
実行環境#
実行環境は以下の図のとおりです。

管理ノードはラズパイ5(8GBモデル)で計算ノードはラズパイ4(4GBモデル)です。
管理ノードのみ外のネットに繋がっています。また、管理ノードはNAPTもしてるので、計算ノードは管理ノード経由で外に出ます。
なお、この記事では計算ノード(worker)は一つのみ(192.168.200.11)のみ登場します。
OSはすべてのノードで同じでubuntu 26.04です。
cat /etc/os-release
# PRETTY_NAME="Ubuntu 26.04.1 LTS"
# NAME="Ubuntu"
# VERSION_ID="26.04"
# VERSION="26.04.1 LTS (Resolute Raccoon)"
# VERSION_CODENAME=resolute
# ID=ubuntu
# ID_LIKE=debian
# HOME_URL="https://www.ubuntu.com/"
# SUPPORT_URL="https://help.ubuntu.com/"
# BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
# PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
# UBUNTU_CODENAME=resolute
# LOGO=ubuntu-logo今回は時間同期までやりますが、実装順は
- ネットワーク設定とNAPT
- ファイアウォール設定
- 時刻同期
です。
管理ノードと計算ノードでやることが異なるので、参考にする際は
sshで繋いでる場合などで、どっちがどっちかわからなくならないように気をつけてください(筆者は経験済み)。
ネットワーク設定#

全体像#
やりたいことは上の写真の通りなのですが、文字にするとこんな感じです。
workerのデフォゲを設定 → マスターへ → 外部へを構築することなので
- 管理ノードでIP固定とNAPT設定
- 計算ノードでIP固定とデフォルトゲートウェイを管理ノードに設定
が必要です。
順にやっていきます。
管理ノードの設定#
IP固定#
netplanでIPを固定します。今回管理ノードは192.168.200.10/24としました。
sudo vi /etc/netplan/50-cloud-init.yamlnetwork:
version: 2
ethernets:
eth0:
optional: true
dhcp4: false
addresses:
- 192.168.200.10/24
routes:
- to: default
via: <自分家のWi-Fiとか>
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1設定を適用させます。
sudo netplan applyNAPTの設定#
NAPTしたいのですが、Linux はセキュリティのために「自分宛てじゃないパケットが届いたら破棄する」という設定があるので、まずはそれを無効にします。
以下で既に設定されてるか確認します。
sysctl net.ipv4.ip_forward
# net.ipv4.ip_forward = 0 # ← 1 ならOK上のコマンドでファイルがないみたいな返答が来た場合は/etc/sysctl.d/の中に.confファイルを適当な名前で作り、以下のように記述します。
net.ipv4.ip_forward=1ルールの適用を確認
sudo sysctl --system
# net.ipv4.ip_forward = 1 # ← これがあるか確認次に、NAPTする際のインターフェースを指定します。
なので、外部ネットワークに繋がっているインターフェースを確認します。今回はwlan0だとわかりますね、
ip route show |grep default
# default via 192.168.10.1 dev wlan0 proto dhcp src 192.168.10.114 metric 600インターフェース名を指定しながら以下のようにIPマスカレードを設定します。
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE設定の保持#
これらの設定を再起動後も保持したいので、iptables-persistentをインストールします。途中で「現在のルールを保持するか?」と効かれたらYesを選択します。
sudo apt update
sudo apt install iptables-persistentこんな感じ↓

計算ノードの設定#
計算ノードでもnetplanでIPを固定します。
このとき、デフォゲは管理ノードのIPにします。
そうすれば外に出たいときは管理ノードを経由することになります。
network:
version: 2
ethernets:
eth0:
optional: true
dhcp4: false
addresses:
- 192.168.200.11/24
routes:
- to: default
via: 192.168.200.10 # ← ここで指定
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1いま、計算ノードと管理ノードはイーサネットケーブルで繋がっています。
通信テストをする前にWi-Fiをdownにさせ、イーサネットから管理ノード経由で通信することを確認します。
sudo ip link set wlan0 down
ip route show
# default via 192.168.200.10 dev eth0 proto static
# 192.168.200.0/24 dev eth0 proto kernel scope link src 192.168.200.11通信テスト#
計算ノードで以下のようなコマンドを打ってみます。
管理ノードを経由して外に出ていることがわかります(via 192.168.200.10)。
ip route get 1.1.1.1
# 1.1.1.1 via 192.168.200.10 dev eth0 src 192.168.200.11 uid 1000
# cache管理ノードでも確認できます。
計算ノードで適当にpingさせておきながら、
ping 8.8.8.8iptables -t nat -L -v -nを何回か打つとパケットのカウントが増えてることを確認できます。
sudo iptables -t nat -L -v -n
# Chain POSTROUTING (policy ACCEPT 50 packets, 3636 bytes)
# pkts bytes target prot opt in out source destination
# 33 3210 MASQUERADE all -- * wlan0 0.0.0.0/0 0.0.0.0/0
sudo iptables -t nat -L -v -n
# Chain POSTROUTING (policy ACCEPT 50 packets, 3636 bytes)
# pkts bytes target prot opt in out source destination
# 36 3450 MASQUERADE all -- * wlan0 0.0.0.0/0 0.0.0.0/0ファイアーウォール#
計算ノードの方が簡単なので、先に設定します。
計算ノードにて#
sshで動かしてる場合は、enableにする前に許可しないと泣くので忘れず許可します。
計算ノードはこれでOKです。
sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw enable管理ノードにて#
管理ノードではsshに加え、後で設定するNTPの許可もしておきます。
sudo apt update
sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 123/udpまたNAPTのための色々も設定します。/etc/default/ufwを開き転送ポリシーをACCEPTに、デフォではDROPだと思いまいます。
DEFAULT_FORWARD_POLICY="ACCEPT"さらに、/etc/ufw/before.rulesで先頭に以下のように記述します。
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMITファイアウォールを適用します。
sudo ufw enable時間同期#
全体像#
時間同期もネットワーク設定と似たような感じで、以下のような状態を目指します。

管理ノードの設定#
NTPサーバーはNTPクライアント(今回は計算ノードのこと)からの接続を許可する必要があるので、その設定を進めます。
以下を追記するかコメントアウトを外します。
allow 192.168.200.0/24設定を反映させて、管理ノードでの設定は完了です。
sudo systemctl restart chronyd計算ノードの設定#
計算ノードは軽量さを取ってsystemd-timesyncdで実装します。systemd-timesyncdをインストールする際、chronyはアンインストールされます。
sudo apt update
sudo apt install systemd-timesyncdインストールできたら、/etc/systemd/timesyncd.confを以下のようにコメントアウトを外して、同期先を管理ノードにします。
また、フォールバックのコメントアウトも外して明示的に空にしときます。管理ノードを指定しても、接続テストに失敗するとフォールバックや他の動的設定に切り替わることがあるので、それを無効にしてます。
[Time]
NTP=192.168.200.10
FallbackNTP=設定を反映させて、同期のステータスを確認すると、serverの項目が管理ノードのIPになっていっるのがわかります。
sudo systemctl restart systemd-timesyncd
timedatectl timesync-status
# Server: 192.168.200.10 (192.168.200.10)
# Poll interval: 1min 4s (min: 32s; max 34min 8s)
# Leap: normal
# Version: 4
# Stratum: 3
# Reference: 65D8456C
# Precision: 1us (-25)
# Root distance: 163.474ms (max: 5s)
# Offset: +2.606ms
# Delay: 329us
# Jitter: 0
# Packet count: 1
# Frequency: -84.758ppm通信テスト#
一応通信テストもしておきまs。
nc -zvu 192.168.200.10 123
Connection to 192.168.200.10 123 port [udp/ntp] succeeded!ncコマンドはネットワークの接続テストで特定のポートやプロトコルに対して相手が応答できているか確認するコマンドです。
pingと比較すると、扱っている層が異なります。
| コマンド | OSI | 役割 |
|---|---|---|
nc | 第4層 トランスポート層 | ポート・サービスが生きてるか確認する |
ping | 第3層 ネットワーク層 | 経路が生きてるか確認する |
つづく#
今後、NIS、NFS、Slurmの設定をしていきたいと思うので記事にしたらリンクを下に貼っていきます。
