2020年7月30日木曜日

無償版ESXiでPacemakerのSTONITHを実装する

前回、CentOS 8にPacemakerを導入し、Squidをクラスタ構成にて構築した。

★前回の記事はこちら↓

今回はPacemakerの2ノードクラスタ構成で必要な設定となるSTONITHについて記載する。

STONITHとは

Pacemakerでは、2台のノードでクラスタを構成する場合は、STONITHの設定が必須となる。STONITHとは、「Shoot-The-Other-Node-In-The-Head」の略称であり、OSやクラスタリソースがハングアップした際に、強制的にノードの電源を停止させることで、ハングアップを解消させる機能となる。

STONITHは物理サーバであれば、商用向けのサーバに標準で搭載されているIPMI (例えばHPE製サーバであればiLO) の機能を利用して物理サーバ自体の電源をOFFにする。

仮想マシンであれば、仮想化ハイパーバイザ (ESXiやHyper-V) や仮想環境の統合管理機能 (vCenter ServerやSystem Center) に対して仮想マシンの電源をOFFにする指示を行うことでSTONITHを実現する。

VMware仮想環境におけるSTONITH実装方法

VMware仮想環境の場合、Pacemakerに標準で含まれるSTONITHエージェントとしてfence_vmware_soapがあり、ESXiに対してもサポートはしているのだが、前提としてvSphere APIを利用してESXiに対して仮想マシンの電源操作ができる必要がある。

しかし、無償版ESXiではvSphere APIが利用できないことからfence_vmware_soapは動作させることができない。そこで、GitHubで公開されているjosenk氏作成のfence_ESXiのスクリプトを利用してSTONITHの実装を行ってみた。なお、ライセンス形態はGPL (GNU General Public License) となる。

環境

今回fence_ESXiにてSTONITHの設定を行うクラスタの構成図は以下の通りとなる。2台の以下のノードでクラスタを構成する。それぞれのノードとなる仮想マシンは別のESXiで稼働しており、ESXiは無償版ライセンスで稼働している。

  • ノード#1 : t3021cent
  • ノード#2 : t3022cent

fence_ESXiのスクリプトをCentOS 8で動作するよう改修

ダウンロードしたfence_ESXiは「/usr/sbin」配下に配置し、実行権限を付与する。

# chown root:root /usr/sbin/fence_ESXi
# chmod 755 /usr/sbin/fence_ESXi
# ls -l /usr/sbin/fence_ESXi
-rwxr-xr-x 1 root root  3049  7月 23 20:19 /usr/sbin/fence_ESXi

fence_ESXiはPythonでコーディングされている。しかし、そのまま実行するとPythonのバージョン差異などによってCentOS 8では動作しない。fence_ESXiを動作させるためには、以下4点の修正が必要となる

  • 1行目の/usr/bin/python/usr/bin/python3に修正
  • インデントがタブではなくスペース x 8になっている箇所があるため修正
  • exceptionsモジュールはPython3では標準モジュールとして組み込まれたため不要となることから、importの対象から削除
  • conn.log_expect関数は引数が3つに変更されたため、先頭のoptionsの引数を削除

上記変更をsedで記載すると以下のようになる。

sed -i -e 's#/usr/bin/python#/usr/bin/python3#g' \
    -e 's/^        /\t/g' \
    -e 's/, exceptions//g' \
    -e 's/conn.log_expect(options, /conn.log_expect(/g' \
    /usr/sbin/fence_ESXi

fence_ESXiの動作確認

fence_ESXi実行時のオプションは以下の通り。

オプション 説明
--ip=<IP or Hostname> ESXiのIPアドレスまたはホスト名を指定。
--username=<Username> ESXiのSSH接続可能なユーザを指定。通常はrootになると思われる。
--password=<Password> usernameで指定したユーザのパスワードを指定。
-o <Action> ESXiに実行するアクションを指定する。仮想マシン一覧表示 (list)、ステータス表示 (status)、電源ON (on)、電源OFF (off)のアクションを選択可能。

コマンド実行例は以下の通り。Pacemakerのノードとなる仮想マシンがリストに含まれていれば問題ない。

# /usr/sbin/fence_ESXi --ip=192.168.33.10 --username=root --password="XXXXXXXX" -o list
~(中略)~
t3022cent,14
~(以下略)~

電源ON (on)、電源OFF (off)の動作も試してみよう。エラーが表示されず、「Success」と表示されればOKとなる。

# /usr/sbin/fence_ESXi --ip=192.168.33.10 --username=root --password="XXXXXXXX" -o off -n t3022cent
Success: Powered OFF
# /usr/sbin/fence_ESXi --ip=192.168.33.10 --username=root --password="XXXXXXXX" -o status -n t3022cent
Status: OFF
# /usr/sbin/fence_ESXi --ip=192.168.33.10 --username=root --password="XXXXXXXX" -o on -n t3022cent
Success: Powered ON
# /usr/sbin/fence_ESXi --ip=192.168.33.10 --username=root --password="XXXXXXXX" -o status -n t3022cent
Status: ON

Pacemakerへfence_ESXiを使ったSTONITHデバイスを作成

スクリプトが正常に動作することを確認できたら、実際にfence_ESXiを使ってSTONITHデバイスを作成してみよう。作成するSTONITHデバイスの設定は以下の通りとなる。

STONITHデバイス名 実行ノード 電源操作対象ノード 電源操作対象ESXi
rs-stonith-01 ノード#1 (t3021cent) ノード#2 (t3022cent) 192.168.33.10
rs-stonith-02 ノード#2 (t3022cent) ノード#1 (t3021cent) 192.168.33.12

STONITHデバイスの作成はpcs stonith createコマンドにて行う。

# pcs stonith create rs-stonith-01 fence_ESXi ipaddr=192.168.33.10 login=root passwd="XXXXXXXX"
# pcs stonith create rs-stonith-02 fence_ESXi ipaddr=192.168.33.12 login=root passwd="XXXXXXXX"

STONITHデバイスは、実行ノード以外で起動させる必要はないため、実行ノード以外のノードで起動しないようロケーション制約を設定する。

# pcs constraint location rs-stonith-01 avoids t3022cent
# pcs constraint location rs-stonith-02 avoids t3021cent
# pcs constraint
Location Constraints:
  Resource: rg-01
    Constraint: location-rg-01
      Rule: boolean-op=or score=-INFINITY
        Expression: pingd lt 1
        Expression: not_defined pingd
  Resource: rs-stonith-01
    Disabled on:
      Node: t3022cent (score:-INFINITY)
  Resource: rs-stonith-02
    Disabled on:
      Node: t3021cent (score:-INFINITY)
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

STONITHデバイス作成直後は、エラーが表示されることがあるようなので、一度エラーをpcs stonith cleanupコマンドでクリーンアップしておく。

# pcs stonith cleanup
Cleaned up all resources on all nodes

最終的に、クラスタの構成は以下の通り。

# pcs status
Cluster name: clst-01
Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Thu Jul 23 22:57:43 2020
  * Last change:  Thu Jul 23 22:57:26 2020 by hacluster via crmd on t3022cent
  * 2 nodes configured
  * 8 resource instances configured

Node List:
  * Online: [ t3021cent t3022cent ]

Full List of Resources:
  * Resource Group: rg-01:
    * rs-vip-33 (ocf::heartbeat:IPaddr2):       Started t3021cent
    * rs-systemd-squid  (systemd:squid):        Started t3021cent
  * Clone Set: rs-systemd-unbound-clone [rs-systemd-unbound]:
    * Started: [ t3021cent t3022cent ]
  * Clone Set: rs-ping-33-clone [rs-ping-33]:
    * Started: [ t3021cent t3022cent ]
  * rs-stonith-01       (stonith:fence_ESXi):   Started t3021cent
  * rs-stonith-02       (stonith:fence_ESXi):   Started t3022cent

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

STONITHの動作確認

STONITHを発生させるには、クラスタ間通信を行うネットワークをすべて切断すればよいが、今回は手軽にコマンドにてSTONITHを実行してみることにする。STONITHの手動実行はpcs stonith fence <電源操作対象ノード>にて行う。

# pcs stonith fence t3022cent
Node: t3022cent fenced

STONITHが実行され、ノード#2 (t3022cent) がOFFLINEになっていることがわかる。

# pcs status
Cluster name: clst-01
Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Thu Jul 23 23:08:47 2020
  * Last change:  Thu Jul 23 23:03:04 2020 by root via cibadmin on t3022cent
  * 2 nodes configured
  * 8 resource instances configured

Node List:
  * Online: [ t3021cent ]
  * OFFLINE: [ t3022cent ]

Full List of Resources:
  * Resource Group: rg-01:
    * rs-vip-33 (ocf::heartbeat:IPaddr2):       Started t3021cent
    * rs-systemd-squid  (systemd:squid):        Started t3021cent
  * Clone Set: rs-systemd-unbound-clone [rs-systemd-unbound]:
    * Started: [ t3021cent ]
    * Stopped: [ t3022cent ]
  * Clone Set: rs-ping-33-clone [rs-ping-33]:
    * Started: [ t3021cent ]
    * Stopped: [ t3022cent ]
  * rs-stonith-01       (stonith:fence_ESXi):   Started t3021cent
  * rs-stonith-02       (stonith:fence_ESXi):   Stopped

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

ESXiのVMware Host Clientでも、Power Off VMが実行されたのちPower On VMが実行されている。これは、STONITHのデフォルト動作がノードの再起動であるためであり、電源OFFしたのち電源ONが実行される正常な動作となる

まとめ

STONITHはクラスタリソースを正常に稼働させるうえで必要な機能であるが、クラスタの構築中などでは予期せぬタイミングでノードの電源OFFが発生することがある。クラスタの構築中は、メンテナンスモードにするなどして運用するほうが効率的な場合もあるだろう。

2020年7月25日土曜日

CentOS 8 + PacemakerでSquidとUnboundを冗長化する

自宅環境ではインターネット接続用のプロキシサーバ兼DNSサーバとしてSquidとUnboundの仮想マシンを稼働させている。このサーバが停止すると、インターネット接続ができなくなるため、ESXiのメンテナンスなどでサーバ停止が必要となる場合は、誰も利用していない時間帯を選ぶなどの考慮が必要だった。

先日、自作PCを構築して検証用PCが2台になったことから、それぞれのESXi上にCentOSの仮想マシンを構築し、SquidとUnboundをPacemakerでクラスタに組み込みを行い冗長化することにした。

また、RHEL7/CentOS 7のPacemakerと比べると、一部コマンドに差異があることが確認できたので、その点についても記載する。

環境

クラスタの構成図は以下の通りとなる。2台の以下のノードでクラスタを構成する。

  • ノード#1 : t3021cent
  • ノード#2 : t3022cent

なお、上記図ではSTONITH用のリソース (青色箇所) が設定されているが、説明が長くなるため、今回はSTONITHは無効として設定する。STONITHの有効化とSTONITH動作用のリソース(フェンスデバイス)の作成方法は、別記事にて記載することにする。

Pacemakerインストール

1. firewalldとSELinuxを停止

firewalldとSELinuxが動作しているといろいろ面倒なので停止しておく。

# systemctl stop firewalld
# systemctl disable firewalld
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
# reboot

2. Pacemaker + Corosyncインストール

PacemakerはCentOSの標準のレポジトリには登録されていないので、dnfコマンドを実行してもインストールに失敗する。

# dnf install pacemaker pcs fence-agents-all pcp-zerocon
メタデータの期限切れの最終確認: 0:19:53 時間前の 2020年07月18日 21時36分40秒 に 実施しました。
No match for argument: pacemaker
No match for argument: pcs
エラー: 一致するものが見つかりません: pacemaker pcs

dnf repolist allにてレポジトリを確認すると、「HighAvailability」のレポジトリが存在することがわかる。こちらを有効にすることでインストールが可能となる。

# dnf repolist all
repo id              repo の名前                                          状態
AppStream            CentOS-8 - AppStream                                 有効化
AppStream-source     CentOS-8 - AppStream Sources                         無効化
BaseOS               CentOS-8 - Base                                      有効化
BaseOS-source        CentOS-8 - BaseOS Sources                            無効化
Devel                CentOS-8 - Devel WARNING! FOR BUILDROOT USE ONLY!    無効化
HighAvailability     CentOS-8 - HA                                        無効化
PowerTools           CentOS-8 - PowerTools                                無効化
base-debuginfo       CentOS-8 - Debuginfo                                 無効化
c8-media-AppStream   CentOS-AppStream-8 - Media                           無効化
c8-media-BaseOS      CentOS-BaseOS-8 - Media                              無効化
centosplus           CentOS-8 - Plus                                      無効化
centosplus-source    CentOS-8 - Plus Sources                              無効化
cr                   CentOS-8 - cr                                        無効化
extras               CentOS-8 - Extras                                    有効化
extras-source        CentOS-8 - Extras Sources                            無効化
fasttrack            CentOS-8 - fasttrack                                 無効化

dnfのオプションに--enablerepo=HighAvailabilityを付与してインストールを実行すればよい。

# dnf --enablerepo=HighAvailability install pacemaker pcs fence-agents-all pcp-zeroconf -y

なお、pcp-zeroconfは以下RHEL 8のマニュアルにてインストールが推奨とされているのでインストールしているが、トラブルシュート時に利用するツールのようで、Pacemakerの動作に必須となるパッケージではない。

3. haclusterユーザのパスワード設定

Pacemakerをインストールすると、「hacluster」というユーザが自動で作成される。この「hacluster」ユーザに対して、クラスタの参加ノード全台で共通パスワードを設定しておく。

# cat /etc/passwd | tail
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
rngd:x:994:991:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin ←★自動で追加されたクラスタ管理用ユーザ
# passwd hacluster
ユーザー hacluster のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

4. hosts設定

hostsファイルにはクラスタで利用するIPアドレスをすべて登録しておく。

# vi /etc/hosts
192.168.33.21    t3021cent
192.168.22.21    t3021cent-22
192.168.33.22    t3022cent
192.168.22.22    t3022cent-22

5. クラスタサービス起動

クラスタのサービスである「pcsd」を起動させる。

# systemctl start pcsd.service
# systemctl enable pcsd.service

ここまでで、インストール作業は完了となる。次に、クラスタの初期設定を行っていく。

Pacemaker初期設定

1. クラスタ認証設定

クラスタに参加させるノードを認証させる。CentOS 8より前のバージョンでは、pcs cluster authコマンドで実施していたが、以下の通りエラーとなってしまう。

# pcs cluster auth -u hacluster -p 'XXXXXXXX' t3021cent t3022cent

Usage: pcs cluster auth...
    auth [-u <username>] [-p <password>]
        Authenticate pcs/pcsd to pcsd on nodes configured in the local cluster.

Hint: Syntax has changed from previous version. See 'man pcs' -> Changes in pcs-0.10.

pcs host authコマンドに変更されたようなので、コマンドを修正して再度実行する。構文は以下の通り。

pcs host auth <Node#1名> <Node#2名> -u hacluster -p '<haclusterのパスワード>'

コマンドを実行し、参加対象のノードが「Authorized」となれば成功となる。

# pcs host auth t3021cent t3022cent -u hacluster -p 'XXXXXXXX'
t3022cent: Authorized
t3021cent: Authorized

2. クラスタの初期セットアップ

次にクラスタの初期セットアップをする。CentOS 8より前のバージョンでは各ノードのIPアドレスをカンマ区切りで記述することで登録することができていたが、エラーになってしまった。これもどうやら構文が変わったようだ。

# pcs cluster setup --start --name clst-01 t3021cent,t3021cent-22 t3022cent,t3022cent-22
Error: Specified option '--name' is not supported in this command
Hint: Syntax has changed from previous version. See 'man pcs' -> Changes in pcs-0.10.

CentOS 8ではpcs cluster setupの構文は以下となる。

pcs cluster setup <クラスタ名> --start <Node#1名> addr=<Node#1 IPアドレス1> addr=<Node#1 IPアドレス2> <Node#2名> addr=<Node#2 IPアドレス1> addr=<Node#2 IPアドレス2>

コマンドを実行し、「Cluster has been successfully set up.」と表示されれば成功となる。

# pcs cluster setup clst-01 --start t3021cent addr=192.168.33.21 addr=192.168.22.21 t3022cent addr=192.168.33.22 addr=192.168.22.22
Destroying cluster on hosts: 't3021cent', 't3022cent'...
t3022cent: Successfully destroyed cluster
t3021cent: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 't3021cent', 't3022cent'
t3021cent: successful removal of the file 'pcsd settings'
t3022cent: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 't3021cent', 't3022cent'
t3021cent: successful distribution of the file 'corosync authkey'
t3021cent: successful distribution of the file 'pacemaker authkey'
t3022cent: successful distribution of the file 'corosync authkey'
t3022cent: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 't3021cent', 't3022cent'
t3021cent: successful distribution of the file 'corosync.conf'
t3022cent: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
Starting cluster on hosts: 't3021cent', 't3022cent'...

初期状態でのクラスタの状態も見ておこう。「Online: [ t3021cent t3022cent ]」と表示されていれば、ひとまずOKである。

# pcs status
Cluster name: clst-01

WARNINGS:
No stonith devices and stonith-enabled is not false

Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Sun Jul 19 00:47:54 2020
  * Last change:  Sun Jul 19 00:46:52 2020 by hacluster via crmd on t3021cent
  * 2 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ t3021cent t3022cent ]

Full List of Resources:
  * No resources

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

クラスタの管理通信 (Corosyncの通信) も2つのネットワークで冗長化されていることをcorosync-cfgtool -sコマンドで確認する。以下コマンドで「LINK ID 0」と「LINK ID 1」の2つが表示されればOKとなる。

# corosync-cfgtool -s
Printing link status.
Local node ID 2
LINK ID 0
        addr    = 192.168.33.22
        status:
                nodeid  1:      link enabled:1  link connected:1
                nodeid  2:      link enabled:1  link connected:1
LINK ID 1
        addr    = 192.168.22.22
        status:
                nodeid  1:      link enabled:1  link connected:1
                nodeid  2:      link enabled:0  link connected:1

3. STONITH無効化

Pacemakerは複数のクラスタからアクティブなノードを選出する際に、多数決によって決定を行う。しかし、ノードが2台の場合は多数決による決定ができないことから、以下2点の設定にて対処がするのがセオリーとなる。

  • クォーラム設定を「ignore」に設定 (no-quorum-policy=ignore)
  • STONITHを設定 (stonith-enabled=true ※デフォルト)

ただし、説明が長くなるため、今回はSTONITHは無効として設定する。設定は以下のようにpcs propertyコマンドにて実施する。

# pcs property
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: clst-01
 dc-version: 2.0.3-5.el8_2.1-4b1f869f0f
 have-watchdog: false
# pcs property set no-quorum-policy=ignore
# pcs property set stonith-enabled=false
# pcs property
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: clst-01
 dc-version: 2.0.3-5.el8_2.1-4b1f869f0f
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false

以上で、クラスタの初期セットアップは終了となる。次にクラスタのリソースを作成していく。

Squid用のリソースおよびVIP作成

SquidはActive/Standby構成とする。VIPとともにフェイルオーバーさせるため、リソースグループ「rg-01」を作成して、SquidとVIPのリソースを所属させる。リソースグループに所属させるため--groupオプションを付与する。リソースグループ内のリソースは上位から起動するため、--before--afterオプションを使って、適切な順序でリソースの起動・停止をできるように構成する。

# pcs resource create rs-systemd-squid systemd:squid --group rg-01
# pcs resource create rs-vip-33 ocf:heartbeat:IPaddr2 ip=192.168.33.23 cidr_netmask=24 nic=ens192 --group rg-01 --before rs-systemd-squid

Unbound用のリソース作成 (Cloneリソース)

Unboundは2台のノードでActive/Activeで稼働させて問題ないため、Cloneリソースとして構成する。

# pcs resource create rs-systemd-unbound systemd:unbound --group rg-01
# pcs resource clone rs-systemd-unbound

ネットワーク監視用のPingリソース作成 (Cloneリソース)

Pingによるネットワーク監視は2台のノードでActive/Activeで稼働させ、常に両方のノードにてネットワークの正常性を確認させておく。

# pcs resource create rs-ping-33 ocf:pacemaker:ping dampen=5s multiplier=1000 host_list=192.168.33.31
# pcs resource clone rs-ping-33

Pingによるネットワーク監視を行う場合、ロケーションの制約も設定する。Pingリソースは、「pingd」という名称のパラメータを持っており、Ping成功時は1000、失敗時は0の値を返す。pingdの値が未定義または1より小さい場合は、Squidのリソースグループを起動させないというロケーション制約を定義する。

# pcs constraint location rg-01 rule score=-INFINITY pingd lt 1 or not_defined pingd
# pcs constraint
Location Constraints:
  Resource: rg-01
    Constraint: location-rg-01
      Rule: boolean-op=or score=-INFINITY
        Expression: pingd lt 1
        Expression: not_defined pingd
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:

最終的にクラスタの状態は以下のようになる。

# pcs status
Cluster name: clst-01
Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Sun Jul 19 15:04:46 2020
  * Last change:  Sun Jul 19 15:01:26 2020 by root via cibadmin on t3021cent
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ t3021cent t3022cent ]

Full List of Resources:
  * Resource Group: rg-01:
    * rs-vip-33 (ocf::heartbeat:IPaddr2):       Started t3021cent
    * rs-systemd-squid  (systemd:squid):        Started t3021cent
  * Clone Set: rs-systemd-unbound-clone [rs-systemd-unbound]:
    * Started: [ t3021cent t3022cent ]
  * Clone Set: rs-ping-33-clone [rs-ping-33]:
    * Started: [ t3021cent t3022cent ]

以上でクラスタの設定は完了となる。

動作確認

実際に疑似障害を発生させて、クラスタのリソースが正常にフェイルオーバーすることを確認してみよう。

1. 手動フェイルオーバー

リソースが稼働しているノードをスタンバイにすることで、リソースがもう一方のノードにフェイルオーバーすることを確認する。

ノードをスタンバイにするにはpcs node standbyにて行う。

# pcs node standby t3021cent

クラスタのリソースを確認すると、ノード#1 (t3021cent) からノード#2 (t3022cent) にフェイルオーバーしていることがわかる。

# pcs status
Cluster name: clst-01
Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Sun Jul 19 15:06:23 2020
  * Last change:  Sun Jul 19 15:05:59 2020 by root via cibadmin on t3021cent
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Node t3021cent: standby
  * Online: [ t3022cent ]

Full List of Resources:
  * Resource Group: rg-01:
    * rs-vip-33 (ocf::heartbeat:IPaddr2):       Started t3022cent
    * rs-systemd-squid  (systemd:squid):        Started t3022cent
  * Clone Set: rs-systemd-unbound-clone [rs-systemd-unbound]:
    * Started: [ t3022cent ]
    * Stopped: [ t3021cent ]
  * Clone Set: rs-ping-33-clone [rs-ping-33]:
    * Started: [ t3022cent ]
    * Stopped: [ t3021cent ]

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

リソースをノード#1に戻すには、ノード#2側でpcs node standbyを行う。

# pcs node unstandby t3021cent
# pcs node standby t3022cent
# pcs node unstandby t3022cent

2. NIC障害時のフェイルオーバー

次にネットワーク障害時にフェイルオーバーすることを確認する。

ノード#1 (t3021cent) のNICを切断すると、pingdの値が1000から0に変化し、ロケーション制約によってリソースがフェイルオーバーする

# pcs status --full
Cluster name: clst-01
Cluster Summary:
  * Stack: corosync
  * Current DC: t3021cent (1) (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum
  * Last updated: Sun Jul 19 15:18:18 2020
  * Last change:  Sun Jul 19 15:11:24 2020 by root via cibadmin on t3021cent
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ t3021cent (1) t3022cent (2) ]

Full List of Resources:
  * Resource Group: rg-01:
    * rs-vip-33 (ocf::heartbeat:IPaddr2):       Started t3022cent
    * rs-systemd-squid  (systemd:squid):        Started t3022cent
  * Clone Set: rs-systemd-unbound-clone [rs-systemd-unbound]:
    * rs-systemd-unbound        (systemd:unbound):      Started t3022cent
    * rs-systemd-unbound        (systemd:unbound):      Started t3021cent
    * Started: [ t3021cent t3022cent ]
  * Clone Set: rs-ping-33-clone [rs-ping-33]:
    * rs-ping-33        (ocf::pacemaker:ping):  Started t3022cent
    * rs-ping-33        (ocf::pacemaker:ping):  Started t3021cent
    * Started: [ t3021cent t3022cent ]

Node Attributes:
  * Node: t3021cent (1):
    * pingd                             : 0   ←★pingdの値が0になる
  * Node: t3022cent (2):
    * pingd                             : 1000

Migration Summary:
  * Node: t3021cent (1):
    * rs-vip-33: migration-threshold=1000000 fail-count=1 last-failure=Sun Jul 19 15:17:08 2020:

Failed Resource Actions:
  * rs-vip-33_monitor_10000 on t3021cent 'not running' (7): call=45, status='complete', exitreason='', last-rc-change='2020-07-19 15:17:07 +09:00', queued=0ms, exec=0ms

Tickets:

PCSD Status:
  t3021cent: Offline
  t3022cent: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

リソースをノード#1に戻すには、pcs resource cleanupにてリソースの状態を正常に戻したうえで、先ほどと同様にノード#2側をスタンバイにすることにて行う。

# pcs resource cleanup
Cleaned up all resources on all nodes
Waiting for 1 reply from the controller. OK
# pcs node standby t3022cent
# pcs node unstandby t3022cent

まとめ

以上でシングルポイントとなっていたプロキシサーバをクラスタにて冗長化することができた。前述したが、Pacemakerを利用して2台のクラスタを構成する場合は、STONITHの設定が推奨されるので、次回はESXi環境におけるSTONITHの設定方法を記載することにする。

参照

2020年7月23日木曜日

ESXi上の仮想マシンでNVIDIA GTX1650を直接使えるようにしてみた (GPUパススルー)

先日、無事自作PCも組みあがり、ESXiもインストールして検証サーバとして使える環境となった。

★前回の記事はこちら↓

今まで自作PCではIntel CPU内蔵のGPUしか使ってきておらず、個別にグラフィックボードを購入するということを今までしてこなかったのだが、今回の自作PCはグラフィックボードとして「NVIDIA GTX1650」を搭載している。

今回、せっかくグラフィックボード搭載しているのに使わないのももったいないので、「GPUパススルー」機能を使って、仮想マシンにGPUを直接使えるように設定してみた

環境

  • OS : ESXi 6.7 Update 3
  • グラフィックボード : ASUS NVIDIA GTX1650搭載シングルファンモデル (4G PH-GTX1650-O4G)

GPUパススルー手順

1. ESXiにてPCIデバイスを確認

ESXiのVMware Host Clientにログインし、「管理」→「ハードウェア」→「PCIデバイス」を選択する。この中で「NVIDIA Corporation TU117 [GeForce GTX 1650]」といった表記でGPUのPCIデバイスが表示されているはずなので、左のチェックボックスを選択する。
※同時に「nVidia Corporation Audio device」もチェックされるが問題ない。

2. 「パススルーの切り替え」を実施

GPUのデバイスを選択したのち、「パススルーの切り替え」を選択する。

3. ESXiの再起動

選択後、再起動が必要となるため、仮想マシンを停止したのち、ESXiを再起動する。再起動後、再度VMware Host Clientにログインし、PCIデバイスを確認すると、パススルー欄が「アクティブ」になっているはずだ。

4. パススルーしたGPUを仮想マシンに追加

仮想マシンの「設定の編集」にて、「その他のデバイスの追加」から「PCIデバイス」を選択する。

PCIデバイスは、先ほどパススルーした「TU117 [GeForce GTX 1650]」を選択する。

5. メモリの予約を実施

PCIデバイスを仮想マシンに接続した場合、割り当てたメモリをすべて予約しなければ仮想マシンを起動することができない。「設定の編集」のメモリにて「すべてのゲストメモリを予約 (すべてロック)」にチェックを入れておこう。

グラフィックボードのドライバをインストール

1. ドライバのインストーラをダウンロード

まずは、導入したグラフィックボードメーカーのサイトからドライバのインストーラをダウンロードしよう。今回導入したグラフィックボードはASUSの以下URLにてダウンロードすることができる。

ダウンロードできるドライバは、どうやらNVIDIAのサイトからダウンロードできるものと同一のようだが、バージョンが少し古い。メーカー確認済みのドライバを利用したほうがよいと思われるので、メーカーサイトからダウンロードできるバージョンでドライバをインストールすることにした。なお、「ユーティリティ」からダウンロードできるGPU管理ツールである「ASUS GPU Tweak II」も、必要に応じてお好みでダウンロードしておこう。

2. Windowsにドライバをインストール

インストーラを起動すると、「NVIDIA グラフィック ドライバーおよび GeForce Experience」か「NVIDIA グラフィック ドライバー」のどちらかを選択できる。私の環境では、GeForce Experienceを選択すると、なぜかOSがエラーで落ちるという事象が発生したため、「NVIDIA グラフィック ドライバー」を選択してインストールを行った。

ドライバのインストール後、デバイスマネージャーで問題なくドライバを認識していれば問題ないのだが、残念ながら「問題が発生したのでこのデバイスは停止しました。 (コード43)」でエラーとなってしまった。

これは、NVIDIAのGPUの仕様によって、OSが仮想マシンであることを検知するとGPUが動作を停止することが原因である。そこで、以下サイトに記載があるとおりに仮想マシンの「詳細の設定パラメータ」に「hypervisor.cpuid.v0 = “FALSE”」を追記することで対処する。

上記を実施し、問題なくパススルーしたGPUを仮想マシンで動作させることができた。

GPUの性能確認

GPUの性能確認のため、動画のエンコードを実施してみることにする。「XMedia Recode」にて2分/200MB程度の動画をMPEG-4 AVCにてエンコードしてみた結果が以下の通り。やはり、GPUによるエンコードの方が圧倒的に速い。

コーデック GPU エンコード時間
MPEG-4 AVC / H.264 なし 52秒
MPEG-4 AVC / H.264 (NvidiaNVENC) NVIDIA GTX1650 11秒

ASUS GPU Tweak IIも使える

ASUSのサイトで公開されているGPU管理ツールである「ASUS GPU Tweak II」も使うことができる。GPUの動作周波数や温度もきちんと確認することができる。

まとめ

以上で仮想マシンからNVIDIA GTX1650を直接使えるようになった。これにより、今まで時間を要していた動画圧縮などの作業の効率化を図ることができそうだ。

2020年7月20日月曜日

VyOSでDNAT (送信先NAT)する

自宅ネットワークのブロードバンドルータを変更したのだが、このブロードバンドルータはスタティックルートの設定ができないことが判明した。そのため、検証ネットワークのサーバにルーティングをすることができず、リモート操作ができなくなってしまった。
対策としては以下2パターンとなる。
  • 案①:PCにスタティックルートを追加する
  • 案②:VyOSで接続先サーバに対するDNAT設定を行う
案①の場合、複数のPCやスマートフォンにルーティング設定が必要となることから、今回は「案②」のVyOSによるDNATで対応する。


環境

VyOSの持つ192.168.33.81のIPアドレスに対して、リモートデスクトップ接続のポート3389で受信した通信を192.168.11.81のポート3389に転送する設定となる。

手順

1. DNAT用のIPアドレスを設定

DNATする際に受信するIPアドレスについて、もともとVyOSで設定済みのIPアドレスを使用するのであれば特に追加設定は不要となるが、異なるIPアドレスとしたい場合は、あらかじめインターフェースにDNAT用のIPアドレスを追加しておく。
set interfaces ethernet eth0 address 192.168.33.81/24
なお、VRRPで冗長化する場合は、virtual-addressで設定する。当然だが、VRRPで冗長化している2台のVyOS両方に設定すること。
set interfaces ethernet eth1 vrrp vrrp-group 10 virtual-address 192.168.33.81/24

2. DNATを設定

DNATの設定はset nat destination rule <ルール番号> <設定>で行う。今回は、ルール番号を110として、以下のように設定を行う。
設定値 設定値 説明
description DNAT-RDP わかりやすい説明を記載
destination address 192.168.33.81 受信するIPアドレスを指定
destination port 3389 受信するポート番号を指定
inbound-interface eth0 受信するインターフェースを指定
protocol tcp プロトコルを指定
translation address 192.168.11.81 転送するIPアドレスを指定
translation port 3389 転送するポート番号を指定
上記設定をコマンドに直すと以下の通りとなる。
# set nat destination rule 110 description DNAT-RDP
# set nat destination rule 110 destination address 192.168.33.81
# set nat destination rule 110 destination port 3389
# set nat destination rule 110 inbound-interface eth0
# set nat destination rule 110 protocol tcp
# set nat destination rule 110 translation address 192.168.11.81
# set nat destination rule 110 translation port 3389
# commit
# save
確認コマンドで確認してみよう。
$ show nat destination rules
Disabled rules are not shown
Codes: X - exclude rule

rule    intf              translation                                           
----    ----              -----------                                           
110     eth0              daddr 192.168.33.81 to 192.168.11.81                  
        proto-tcp         dport 3389 to 3389                                    
Desc: DNAT-RDP

3. 接続確認

試しにリモートデスクトップ接続をNAT用のIPに対して実施してみる。問題なく接続できたので、VyOSでも確認する。


$ show nat destination translations detail
Pre-NAT src          Pre-NAT dst        Post-NAT src         Post-NAT dst
192.168.33.201:51456 192.168.33.81:3389 192.168.33.201:51456 192.168.11.81:3389
  tcp: 192.168.33.81 ==> 192.168.11.81  timeout: 299 use: 1
2020年7月18日土曜日

Ryzen 7 3700Xで自作PCを組んでESXiをインストールしてみた!② (組み立て編)

前回、Ryzen 7 3700Xで自作PCを組むにあたり選定した各パーツの紹介を実施した。今回は実際にパーツの組み立てを行いESXiをインストールするところまでの手順や考慮すべき事項などを記載する。

★前回の記事はこちら↓

パーツの組み立て

最終的な構成は以下の通り。これらのパーツを順番に組み立てていく。

1. マザーボードにCPU取り付け

効率的に作業をするため、マザーボードをケースに取り付ける前にCPUとCPUクーラーの取り付けを行う。CPU自体はレバーを立てて、CPUを置いたのち、レバーを下げることで取り付けできる。

2. CPUクーラー「虎徹 MarkⅡ」取り付け

虎徹 MarkⅡは今回の組み立ての中で一番緊張した作業となる。

まず、CPUクーラー設置のためのレールをマザーボードに取り付ける。これは特に問題なく実施できる。

次に熱伝導グリスをCPU側に塗る。なお、熱伝導グリスは虎徹 MarkⅡに同梱されていたが、今回は有名な「クマさんグリス」を使ってみた。

そしてヒートシンクをCPUの上に乗せるのだが、ヒートシンクが大きいこともあり、ここが一番緊張した。ヒートシンクを押さえながら、固定用のネジを左右から均等に締めていく。

最後にヒートシンクに引っ掛ける形でCPUファンを取り付ければ、CPUクーラーの設置は完了となる。

3. ケースに電源を取り付け

電源は固定するためのネジ穴が4か所あり、ケースに付属するネジで止めれば問題ない。フルプラグイン型の電源なので、ケーブル接続は後程行う。

4. ケースにマザーボード取り付け

マザーボードをケースに取り付ける際は、そのまま入れようとするとケースファンや3.5インチベイと干渉するので、少し斜めにして入れることがコツ。ケースとマザーボードのネジ止めは、奥まったところでの作業となるため、マグネット付きのドライバーが必須となる。

5. メモリ取り付け

メモリはデュアルチャンネルで使用するため、マザーボードのマニュアルに従い正しい位置に設置する。

6. M.2 NVMe SSD取り付け

本マザーボードではM.2インタフェースが2つあるが、下側のM.2インタフェースを使用するとグラフィックボードで隠れてしまうので、CPUに近いほうのM.2インタフェースにNVMe SSDの取り付けを行う。

7. 電源・リセットボタン・USBなどのケーブル接続

ケーブル接続の細かい説明は割愛するが、電源・リセットボタンなどはマザーボードの下部にあり、かつ細かいピンの接続が必要となるため、グラフィックボード取り付け前に実施すること。私は一度グラフィックボード取り付け後に実施しようとしたら、手を入れるスペースが確保できず作業ができなかった。結局、一度グラフィックボード取り外してから作業をすることになり、二度手間となってしまった。。

また、マザーボードの24PINのケーブルには、6PIN SENSEというコネクターが付いており、こちらも電源に接続することが推奨とのことなので、忘れずに接続しておこう。

ちなみに、私は最初6PIN SENSEのコネクターが何の用途かわかっておらず、接続しないまま組み立てて起動させてしまったが、接続しなくても起動自体は問題なくされるようだ。ただ、安定した電源供給には必要接続のようなので、後程接続しなおした。

8. グラフィックボード取り付け

最後にグラフィックボードを取り付けして、組み立てが完了となる。

初回電源起動

組み立て後、ドキドキしながら初回の電源投入を行う。起動時に「DEL」キーまたは「F2」キーを押してUEFI BIOSの画面に入り、CPU、メモリ、ディスクを認識しているようであれば、ひとまずは安心となる。

UEFI BIOS設定

UEFI BIOSにていくつか設定変更を行う。なお、私の場合はファームウェアは最新バージョンだったので問題なかったが、もし最新バージョンでなければここで最新バージョンにする作業を実施すべきだろう。

1. Ai Overclock Tunerを「D.O.C.P.」に設定

D.O.C.P. (DRAM OverClock Profiles) に設定する。

2. CPUのSVM Modeを有効化

ESXiではCPUの仮想化支援機能を利用するが、デフォルトでは無効となっているようなので、「SVM Mode」を有効にしておく。

3. 静音化のためファンの制御設定を変更

ファンの回転数制御において、CPUの温度に連動するか、マザーボードの温度に連動するかを選ぶことができる。CPUは専用のファンがついているので、マザーボード連動に変更しておいた。この設定に変更すると、ケースファンの回転数がやや落ちるようだ。

ESXiインストール

1. RealtekのNICドライバを組み込んだカスタムイメージ作成

こちらは以前の記事を参照いただきたい。

2. USBメモリからインストール実施

最近はDVD/CDドライブをわざわざ付けない場合が多く、その場合はUSBメモリにOSイメージの書き込みを行い、起動できるようにする。こちらに関しても以前記事にしているので、参照いただきたい。

まとめ

組み立ては夜の22:00頃から初めて、2時間くらいで終わるかと思っていたら、起動されるようになったのは夜中の2:00となってしまった。2年前も自作PC組み立てしていたので、今回はケースも大きいし余裕だと思っていたら、そんなことは決してなく、マニュアルと睨めっこしながら少しずつ進めていく作業となった。

2020年7月12日日曜日

Ryzen 7 3700Xで自作PCを組んでESXiをインストールしてみた!① (パーツ紹介編)

自宅では、5年ほど前にベアボーンキットを使って構築したCore i3-4170の省スペースPCを使っていたのだが、2コア/4スレッドの性能しかなく、性能不足が目立っていた。

そんな中、Amazonでパーツの価格を調べると、特にメモリの価格が下落しており、2年前に構築した際の半額程度の価格となっていた。また、ちょうどタイミングよくAmazonタイムセール祭りなども重なったので、今まで構築した経験がないAMD Ryzenを使った自作PCを構築を行うことにした

今回は、選定したパーツと簡単なパーツ紹介を記載する。

構成

最終的な構成は以下の通り。

パーツ種別 メーカー 品名 価格
ケース SilverStone PS16 ¥6,582
ケースファン サイズ SU1225FD12M-RHP ¥795
マザーボード ASUS TUF B450M-PRO GAMING ¥9,980
電源 玄人志向 KRPW-GK550W/90+ ¥8,700
CPU AMD Ryzen 7 3700X ¥39,978
CPUクーラー サイズ 虎徹 MarkⅡ SCKTT-2000 ¥3,636
メモリ Kingston HyperX FURY CL16 (HX432C16FB3K2/32) ¥15,260
ディスク1 Sabrent Rocket SSD 1TB NVMe PCIe M.2 2280 (SB-ROCKET-1TB) ¥14,990
ディスク2 SEAGATE Seagate BarraCuda SSD 1TB (ZA1000CM1A002) ¥11,713
グラフィックボード ASUS NVIDIA GTX1650搭載シングルファンモデル (4G PH-GTX1650-O4G) ¥15,980

各パーツの紹介

ケース

SilvetStoneの「PS16」はMicro ATXケースとなる。198mm(W) x 361mm(H) x 398mm(D)とMicro ATXケースの中でもコンパクトな部類になる。それにも関わらず、背面にケーブルを通すスペースが用意されていたり、165mmまでのCPUクーラーを搭載できるなど、十分な内部スペースは確保できる

前面はメッシュ構造になっており、簡単に取り外してクリーニングすることができる。背面のみケースFANが付属するが、前面のケースFANは付属しないため、別途120mmのケースFANを用意したほうがエアフローの面でよいだろう。

マザーボード

マザーボードはRyzen 7に対応するB450チップを搭載したMicro ATXマザーボードであるASUS「TUF B450M-PRO GAMING」とした。マザーボードのコンデンサや電源供給の品質が良く、長寿命となる工夫がされているのが特徴のマザーボードらしい。

M.2スロットが2つあるため、実質使用できるPCIeスロットが1つ減っているが、私の構成では問題なかった。むしろ、将来的にM.2 SSDを追加する可能性を重視した。

ちなみに、オンボードNICはRealtek製となる。

電源

玄人志向の「KRPW-GK550W/90+」は、80PLUS GOLD認証の550W電源となる。フルプラグイン型の電源であり、必要なケーブルだけ接続して配線すればよく、ケース内がスッキリするのでおすすめ

CPU・CPUクーラー

 

CPUは消費電力がTDP 65Wであり、かつコア数が8コア/16スレッドとなるAMDの「Ryzen 7 3700X」を選定した(というよりも、自作PCを組むことを決めた時点で、このCPUにすることは確定していた)。CPUクーラーはCPUに付属するWraith Prism coolerを使うか迷ったものの、冷却や静音面を考え、サイズの「虎徹 MarkⅡ」に変更することにした。

メモリ

メモリはデュアルチャンネルにするため16GB x 2枚で構成することとし、DDR4 3200MHzで動作するものを条件として探した。

メモリは2年前に自作PCを作った時に比べて約半値となっており、非常に安くなっていると感じていた。その中でも、たまたまAmazonアウトレットにてKingstonの「HyperX FURY CL16」が通常よりもさらに安く入手することができた。

値段で決めたものの、コンパクトなヒートスプレッダーが付いており、場所を大きくとらないため満足している。BIOSではデフォルト設定では2400MHzで認識する設定となっているようだが、設定変更により問題なく3200MHzにて問題なく動作した

ディスク

 

ディスクは当初1TBのSATA SSDのみにしようと考えていたのだが、せっかくM.2インタフェースが2つあるので、M.2のNVMe SSDも追加することにした。

NVMe SSDはSabrentの「Rocket SSD 1TB」を選定した。読込最大3400MB/s、書込最大3000MB/sの性能を持つとのことで、実際に計測したところ、シーケンシャルアクセスで記載通りの性能を確認できた。以下は実際にベンチマークした際の結果となる。今までSATA SSDしか使ってこなかったので、この速さは驚異的である。

グラフィックボード

ESXiをインストールして、複数台の仮想マシンを動作させることが目的であり、グラフィック性能は必要最低限で問題ない。当初はNVIDIA GT710のファンレスのグラフィックボードとしようと考えていたが、GT710はグラフィック性能がCPU内蔵グラフィックよりも性能が劣るという情報が多数見つかったことから、念のため1ランク上のNVIDIA GTX1650を搭載する製品を選定した。GTX1650はTDP 75Wであり、補助電源が不要となるのも決め手になった。

メーカーをマザーボードと統一することとし、ASUSの「NVIDIA GTX1650搭載シングルファンモデル」を選定した。

次回

次回は、本パーツを使って実際に自作PCを組み立てる工程の説明と、BIOSの簡単な設定手順を記載する。

★次回の記事はこちら↓
Ryzen 7 3700Xで自作PCを組んでESXiをインストールしてみた!② (組み立て編)

2020年7月7日火曜日

VyOSでSNAT (送信元NAT) を行う

自宅機器はZabbixで監視をしている。Zabbixはインターネットと直接通信をする必要がないため、内部のネットワークセグメントに配置し、VyOSを介してインターネット接続用のネットワークセグメントと通信させている。

しかし、インターネット接続用の一部機器において、スタティックルートを設定することができない機器があり、この機器に対して例えばPingによる死活監視を実施しようとした場合は、戻りルーティングがないため監視をすることができない。

この事象を解決するため、SNAT (Source NAT) をVyOSにて実施し、あたかもZabbixの監視サーバからの通信は同一セグメントのIPアドレスからの通信として見せる対処を行う。

環境

Zabbixとなる送信元サーバは、「192.168.11.24」となる。この送信元サーバから、192.168.33.0/24のネットワークセグメントの機器に対してPingやZabbix Agentによる監視をできるよう、「192.168.11.24」のIPアドレスをVyOSのIPアドレスである「192.168.33.31」のIPアドレスに変換を行う。


手順

1. SNATを設定

SNATの設定はset nat source rule <ルール番号> <設定>で行う。今回は、ルール番号を110として、以下のように設定を行う。

設定値 設定値 説明
description SNAT-t1024cent わかりやすい説明を記載
destination address 192.168.33.0/24 NAT対象とする送信先IPアドレスまたはネットワークアドレスを指定
outbound-interface eth0 送信するインターフェースを指定
source address 192.168.11.24 NAT対象とする送信元IPアドレスまたはネットワークアドレスを指定
translation address 192.168.33.31 変換後の送信元IPアドレスを指定

上記設定をコマンドに直すと以下の通りとなる。

# set nat source rule 110 description SNAT-t1024cent
# set nat source rule 110 destination address 192.168.33.0/24
# set nat source rule 110 outbound-interface eth0
# set nat source rule 110 source address 192.168.11.24
# set nat source rule 110 translation address 192.168.33.31
# commit
# save

確認コマンドで確認してみよう。

$ show nat source rules 
Disabled rules are not shown
Codes: X - exclude rule, M - masquerade rule

rule    intf              translation                                               
----    ----              -----------                                               
110     eth0              saddr 192.168.11.24 to 192.168.33.31                      
        proto-all         sport ANY                                                     
                          when daddr 192.168.33.0/24, dport ANY                     
Desc: SNAT-t1024cent

2. 接続確認

送信元サーバ (192.168.11.24) から送信先サーバ (192.168.33.23) にPingによる疎通確認を行った際の、SNATの状況を確認する。

まず、送信先サーバにてtcpdumpを使いPingのIPアドレスを確認してみるとVyOSのIPアドレスである「192.168.33.31」が送信元アドレスとなっていることがわかる。

# tcpdump -i any -nn host 192.168.33.31
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
21:12:56.077629 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 1, length 64
21:12:56.077661 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 1, length 64
21:12:57.089793 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 2, length 64
21:12:57.089816 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 2, length 64
21:12:58.113772 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 3, length 64
21:12:58.113797 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 3, length 64
21:12:59.137910 IP 192.168.33.31 > 192.168.33.23: ICMP echo request, id 12649, seq 4, length 64
21:12:59.137930 IP 192.168.33.23 > 192.168.33.31: ICMP echo reply, id 12649, seq 4, length 64

VyOSにてshow nat source translations detailコマンドにて確認することで、SNATの状況を確認することができる。

$ show nat source translations detail 
Pre-NAT src          Pre-NAT dst        Post-NAT src         Post-NAT dst      
192.168.11.24        192.168.33.23      192.168.33.31        192.168.33.23     
  icmp: 192.168.11.24 ==> 192.168.33.31  timeout: 26 use: 1 
192.168.33.24        192.168.33.33      192.168.33.24        192.168.33.33     
  icmp: 192.168.33.24 ==> 192.168.33.24  timeout: 8 use: 1 

人気の投稿