Geant4(その4) ネットワーク設定

ソフトウェア

今回の話題

前回までで簡単なGeant4アプリが完成しました.今回はちょっと番外編でGeant4と直接関係ないですが(強いて言えばGeant4アプリを並列実行するための環境整備),ラックマウントサーバのネットワーク設定を紹介します.目標は次の3点です.

  • ルータ的設定: ラック内LANから外へシームレスに通信できるようにする.
  • WOL設定: 外から起動できるようにする.
  • SSH設定: ラック内LANでパスフレーズなしにSSHできるようにする.

経緯

社内に DellのPowerEdge R200というラックマウントサーバがあります.クアッドコアXeonのブレード5台に制御コンソールとネットワークルータが各1台つながってラックに収まっています.ある研究所さんから譲り受けたのが10年前と結構な年季モノですが,新品当時は500万円くらいしたという噂.

Dellのラックマウントサーバ(前面)

それがある日,コンソールとルータがパタリと動かなくなりました.ケーブルまわりが怪しいものの,ラック背面でトグロを巻くそれらは見るからに恐ろしく,とても触る気にはなれません.さりとて500万円は惜しい.惜しいが触りたくない.マシン自体は生きている雰囲気…

ということで,社内に転がっているスイッチングハブを持ってきてリモートで操作できるようつなぎ直すことにしました.なおこれに先立ち,BIOSを更新し,OSをOpenSUSEからUbuntu 18.04 に入れ替えました.なので以下はUbuntuでの作業です.

ソフトウェアルータでラック内外を接続

ラック内LANはGeant4計算専用として隔離しつつ,ソフトのアップデートなどのため外と通信できるようにします.

ネットワークの構成は次のとおりです.マシン #1-#5 はネットワークI/F “eno1” でラック内ネットワーク(172.16系)を作ります.マシン #5 をルータとし “eno2” からラック外(192.168系社内ネットワーク〜インターネット)とつなぎます.

ネットワーク構成
  • eno1 (#1-#4):
    • address/subnetmask: 172.16.7.1〜4/16
    • gateway: 172.16.7.5
    • dns: 192.168.11.254 …以下略…
  • eno1 (#5):
    • address/subnetmask: 172.16.7.5/16
  • eno2 (#5):
    • address/subnetmask: 192.168.11.61/24
    • gateway: 192.168.11.254
    • dns: 192.168.11.254 …以下略…

接続用のホスト名はマシン #1-#5 で共有しておきます.

192.168.11.61  dellGW  # eno2(#5)     ラック内外の出入口
172.16.7.1     dell1   # eno1(#1-#5)  ラック内LAN
172.16.7.2     dell2
172.16.7.3     dell3
172.16.7.4     dell4
172.16.7.5     dell5

マシン #5 をルータ化する設定は次のとおりです(2-9行目).これでプライベートアドレスのマシン #1-#4 が外と通信可能になります.一応ここが今回のハイライト.

# ルーティングの設定 (#5 のみ):
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eno2 -j MASQUERADE
iptables -F
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eno1 -o eno2 -s 172.16.7.0/16 -j ACCEPT
iptables -A FORWARD -j DROP
iptables -A OUTPUT -o eno2 -d 172.16.0.0/16 -j DROP

# 次回WOL有効化:
ethtool -s eno2 wol g  # (#5 の場合)
#ethtool -s eno1 wol g  # (#1-#4 の場合)
  • gatewayの設定で,マシン #1-#4 からラック外への通信は #5 の eno1, eno2 を通ります.
  • その際,FORWARDの設定(6-8行目)で,ラック内からラック外への通信とその返事だけが遮断されず転送されます.Geant4,ソフトウェアルータ,ip masquerade,iptables,wake on lan,ethtool
  • その際,MASQUERADEの設定(4行目)で,送信元が有効なアドレス(192.168.11.61)のフリをします.

これでソフトウェアルータが完成し,ラック内LANからインターネットにつなげるようになりました.
なおこの手の設定はネットワーク起動前に,たとえば /etc/network/if-pre-up.d/ あたりでやるのが良いようですが,ここではひとまとめに /etc/rc.local で(=一連の起動処理の最後に)しました.また社内環境につき,ファイアウォール的な設定は省略しました.

Wake-On-LANでリモート起動

WOLを有効にするには,まずBIOSの設定(割愛)とLANアダプタの設定(前節コード12-13行目)が必要です.マシン #5 では社内LANから起動できるよう eno2 を,マシン #1-#4 ではマシン #5 から起動できるよう eno1 を,それぞれ毎起動時に ethotool wol g します.これで次回poweroff後,各マシンがWOL可能になります.

次は起動用ツールの例です.1-2行目の $mac$ip を適宜書き換えて使います.同一LANセグメント内の別のPCで perl wol.pl すると,ほどなく $mac に該当するマシンが起動します.

$mac = "\xAA\xBB\xCC\xDD\xEE\xFF";  # targe MAC address (EDIT HERE)
$ip = "172.16.255.255";             # broadcast address (EDIT HERE)

$magic = "\xFF" x 6 . $mac x 16;  # WOL magic packet
use IO::Socket;
$sock = IO::Socket::INET->new(PeerAddr=>$ip, Broadcast=>1, PeerPort=>'discard', Proto=>'udp');
$sock->send($magic);

perlスクリプトなので,LinuxでもWindowsでも(たとえばGit for Windowsに同梱のperlで)使えます.MACアドレスは ip addr コマンドなどで調べます.

パスフレーズなしでSSH

最後はラック内LANでパスフレーズなしでsshを実行できるようにする手順の概要です.

  1. 各マシンに openssh-server & client をインストール(sudo apt-get install ...).
  2. 各マシンにユーザアカウントを追加(sudo useradd ...).
  3. 各マシンでユーザの鍵ペアを生成(ssh-keygen で空のパスフレーズを指定).
  4. 各マシンで,接続先各マシンにユーザの公開鍵を送付(ssh-copy-id HOST).

これで接続元の公開鍵 ~/.ssh/id_rsa.pub が接続先の許可リスト ~/.ssh/authorized_keys に追加登録され,公開鍵認証が可能になります.パスフレーズなしなので秘密鍵 ~/.ssh/id_rsa の漏洩にはご注意.

次回予告

以上でなんとかラックマウントサーバが復活しました.次回はランダムサンプリングの一般的な手法をまとめます.所望の確率分布を持つ線源粒子の生成とか,モンテカルロの収束速度向上とかに役立つかも?


Accutheraでは加速器・医療システム・機械学習・放射線シミュレーションなどの専門技術を軸に開発やコンサルティングを承っております。お困りの案件がございましたら、こちら からお気軽にお問合せください。

タイトルとURLをコピーしました