↓ メインコンテンツへスキップ

ラズパイクラスター | ネットワークとファイアウォール、時刻同期の設定

·2814 文字·6 分
わて
著者
わて

この記事及びシリーズは、ラズパイを使ってクラスターを構築していく試みです。

具体的には、ネットワーク設定(NAPT)、ファイアウォール、時刻同期、NIS、NFS、Slurm を実装していきます。

この記事では上のうち、ネットワークとファイアウォール、時刻同期までを設定します。

実行環境
#

実行環境は以下の図のとおりです。

overview

管理ノードはラズパイ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

今回は時間同期までやりますが、実装順は

  1. ネットワーク設定とNAPT
  2. ファイアウォール設定
  3. 時刻同期

です。

管理ノードと計算ノードでやることが異なるので、参考にする際は
sshで繋いでる場合などで、どっちがどっちかわからなくならないように気をつけてください(筆者は経験済み)。

ネットワーク設定
#

networking

全体像
#

やりたいことは上の写真の通りなのですが、文字にするとこんな感じです。

workerのデフォゲを設定 → マスターへ → 外部へ

を構築することなので

  • 管理ノードでIP固定とNAPT設定
  • 計算ノードでIP固定とデフォルトゲートウェイを管理ノードに設定

が必要です。
順にやっていきます。

管理ノードの設定
#

IP固定
#

netplanでIPを固定します。今回管理ノードは192.168.200.10/24としました。

sudo vi /etc/netplan/50-cloud-init.yaml
/etc/netplan/50-cloud-init.yaml
network:
  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 apply

NAPTの設定
#

NAPTしたいのですが、Linux はセキュリティのために「自分宛てじゃないパケットが届いたら破棄する」という設定があるので、まずはそれを無効にします。

以下で既に設定されてるか確認します。

sysctl net.ipv4.ip_forward
# net.ipv4.ip_forward = 0       # ← 1 ならOK

上のコマンドでファイルがないみたいな返答が来た場合は/etc/sysctl.d/の中に.confファイルを適当な名前で作り、以下のように記述します。

/etc/sysctl.d/99-ipfoward.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

こんな感じ↓

img

計算ノードの設定
#

計算ノードでも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.8

iptables -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だと思いまいます。

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

さらに、/etc/ufw/before.rulesで先頭に以下のように記述します。

/etc/ufw/before.rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT

ファイアウォールを適用します。

sudo ufw enable

時間同期
#

全体像
#

時間同期もネットワーク設定と似たような感じで、以下のような状態を目指します。

ntp

管理ノードの設定
#

NTPサーバーはNTPクライアント(今回は計算ノードのこと)からの接続を許可する必要があるので、その設定を進めます。
以下を追記するかコメントアウトを外します。

/etc/chrony/chrony.conf
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を以下のようにコメントアウトを外して、同期先を管理ノードにします。

また、フォールバックのコメントアウトも外して明示的に空にしときます。管理ノードを指定しても、接続テストに失敗するとフォールバックや他の動的設定に切り替わることがあるので、それを無効にしてます。

/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の設定をしていきたいと思うので記事にしたらリンクを下に貼っていきます。