LSILogic RAIDのディスク交換をMegaCliを使って行う場合の手順メモ


IBM x3650サーバに入っているLSILogic RAIDカードにて、構成しているディスクが故障したので、ディスクを調達して交換したい。という話があったので、交換手順を確認した。

ついでに一般公開

参考文献
・やっ太郎ブログ:「Megacli64でディスク交換太郎
・チラシの裏的なBlog:「【備忘録】MegaRAIDでのエラーHDD交換手順
・IBM Docs:「2073-720 で障害予知機能 (PFA) イベントを報告する、障害が発生したドライブの取り替え
・Qiita:「HW保守で使いそうなTips 〜ディスク周り〜

(1) コマンドがある場所に移動

標準では /opt/MegaRAID/MegaCli/ にインストールされていて、PATHは通っていないことが多いので、ディレクトリ移動しておくと以降のコマンドが実行しやすい。

# cd /opt/MegaRAID/MegaCli/
#

(2) コマンド名確認

/opt/MegaRAID/MegaCli/に MegaCliもしくはMegaCli64があるかを確認
移行の手順はMegaCliだったものとして記載している

# ls -F

(3) RAID構成の状態を確認

Stateの状態を確認

# ./MegaCli -LDInfo -Lall -aALL

(4) 物理ディスクの状態を確認

# ./MegaCli -PDList -aALL
# ./MegaCli -PD List  -aALL | egrep 'Slot|Firmware state|Inquiry|Enclo'
# ./MegaCli -PD List  -aALL | egrep 'Slot|state|Data|Raw'

「Firmware state」がディスクの状態でFailedとなっているものが壊れている。

そのディスクについての「Enclosure Device ID」と「Slot Number」の値をこの後の手順で使うので記録しておく。

また「Inquiry Data」にあるディスク型番とシリアルが抜いたディスクとあっているかを確認出来るので、それも記録しておく。

(5) 壊れているディスクの場所を確認

壊れているディスクのLEDを点灯させて交換するディスクと、コマンドで指定する「 physdrv 」の指定が一致していることを、スロットのランプを点灯させて確認する。

下記コマンドを実行すると該当ディスクスロットのランプが点灯

# ./MegaCli -Pdlocate start physdrv[Enclosure Device ID:Slot Number] -a0

下記コマンドを実行すると該当ディスクスロットのランプが消灯

# ./MegaCli -Pdlocate stop physdrv[Enclosure Device ID:Slot Number] -a0
たとえば、Enclosure Device IDが252, Slot Numberが2の場合下記の様に実行する。
  # ./MegaCli -Pdlocate start physdrv[252:2] -a0
  # ./MegaCli -Pdlocate stop physdrv[252:2] -a0

(6) 壊れているディスクをオフラインにする

壊れているディスクをオフラインにする。

# ./MegaCli -PDOffline -PhysDrv [Enclosure Device ID:Slot Number] -a0

Enclosure Device IDが252, Slot Numberが2の場合下記の様になる

# ./MegaCli -PDOffline -PhysDrv [252:2] -a0

なお、壊れ方によっては、すでにオフライン扱いになっていて、このコマンドでエラーとなる場合がある。

(7) 欠落マークがついたRAIDがあるか確認する

6でエラーとなっている場合は、下記コマンドを実行した際に 「Array」と「Row」 といった情報が出力される。このArrayとRowの値はあとで使用します。

# ./MegaCli -PDGetMissing -aALL

6がエラーとなっていない場合は、Array/Rowの出力はないと思われます。

また、MegaCliコマンドのバージョンによっては、このオプションが存在せず、エラーとなる場合があるようです。その際はこの手順を飛ばします。

(8) 壊れているディスクに欠落マークを付ける

まだ壊れていることがきちんと認識されていない場合、壊れていることを確定させます。

# ./MegaCli -PDMarkMissing -PhysDrv [Enclosure Device ID:Slot Number] -a0

Enclosure Device IDが252, Slot Numberが2の場合下記の様になる

# ./MegaCli -PDMarkMissing -PhysDrv [252:2] -a0

MegaCliコマンドのバージョンによっては、PDMarkMissingオプションがないようです
その場合はこの手順を飛ばします。

また、6ですでに欠落マークがついたRAIDが認識されている場合もこの手順は不要であるはずです。

(9) 欠落マークがついたRAIDが認識されたことを確認する

欠落マークがついたRAIDが表示されることを確認します。

# ./MegaCli -PDGetMissing -aALL

この出力中の「Array」と「Row」の番号はあとで使用します。
PDMarkMissingオプションが実行できなかった場合、これも実行できない
と思います。その場合は飛ばします。

(10) 壊れているディスクを抜くことをRAIDコントローラに通知します

下記を実行して、指定したディスクを取り外すことをRAIDコントローラに通告します。

# ./MegaCli -PDPrpRmv -PhysDrv [Enclosure Device ID:Slot Number] -a0

下記の様に実行する

# ./MegaCli -PDPrpRmv -PhysDrv [252:2] -a0

なお、たぶん(6)の段階で欠落マークがついているような場合は、このコマンドを実行するまでもなくディスクが完全に壊れている、と認識されて、すでに抜けるような状態になっているようです。

(11) 壊れているディスクを物理的に抜く

(12) 1分ぐらい待つ

ここで待つのは気休めです。

RAIDコントローラの情報更新間隔がよくわからないので入れてますが、たぶん、すぐに実行しても問題ないような気がします・・・

(13) RAID構成/ディスク認識の状態を確認

ディスクの認識を抜いたことにより、RAID構成の状態が変わっているかを確認します。

# ./MegaCli -LDInfo -Lall -aALL

Stateの状態を確認します。(変わるのかどうかは把握していません)

次に、物理ディスクの状態変化を確認します。

# ./MegaCli -PDList -aALL
# ./MegaCli -PD List  -aALL | egrep 'Slot|Firmware state|Inquiry|Enclo'
# ./MegaCli -PD List  -aALL | egrep 'Slot|state|Data|Raw'

先ほど抜いたディスクに関する表示が消えているはずです。

(14) 新しいディスクを入れる

(15) RAID構成/ディスク認識の状態を確認

RAID状態が変わっているかを確認します。

# ./MegaCli -LDInfo -Lall -aALL

Stateの状態を確認します。
また、RAID構成が新しく認識されていたりしないか確認します。(中古ディスクに情報が残っている場合に発生する可能性がある)

交換したディスクが認識されているかを下記のコマンドで確認します。

# ./MegaCli -PDList -aALL
# ./MegaCli -PD List  -aALL | egrep 'Slot|Firmware state|Inquiry|Enclo'
# ./MegaCli -PD List  -aALL | egrep 'Slot|state|Data|Raw'

(16) 再構築が開始されているかを確認する

RAIDコントローラの設定および交換したディスクの状態によっては、ディスクを交換した時点で、自動的に再構築が開始されます。

下記コマンドで状況を確認します。

# ./MegaCli -pdrbld -showprog -physdrv [Enclosure Device ID:Slot Number] -a0

実行例は下記のようになります。

# ./MegaCli -pdrbld -showprog -physdrv [252:2] -a0

再構築が始まっている場合は progressの数値が徐々に増加していくはずです。

(17) RAIDにディスク交換されたことを認識させる

交換したディスクがスペアディスクなどとして認識されなかった場合は、手動で設定します。

# ./MegaCli -PdReplaceMissing -PhysDrv [Enclosure Device ID:Slot Number] -Array0 -row0 -a0

手順7か手順9で確認したArrayとRowの番号を使ってコマンドを実行します。実行例は下記のようになります。

# ./MegaCli -PdReplaceMissing -PhysDrv [252:2] -Array0 -row0 -a0

PDMarkMissingオプションが実行できなかった場合、これも実行できない
と思います。その場合は飛ばします。

(18) 再構築開始

手動で再構築開始を実行する場合は下記コマンドを実行します。

# ./MegaCli -PDRbld -Start -PhysDrv [Enclosure Device ID:Slot Number] -a0


下記の様に実行します。

# ./MegaCli -PDRbld -Start -PhysDrv [252:2] -a0

(19) 再構築状況を確認

再構築の状況を確認します。

# ./MegaCli -pdrbld -showprog -physdrv [Enclosure Device ID:Slot Number] -a0

下記の様に実行します。

# ./MegaCli -pdrbld -showprog -physdrv [252:2] -a0

(20) RAID構成/ディスク認識の状態を確認

RAID状態が変わっているかを確認します。

# ./MegaCli -LDInfo -Lall -aALL

Stateの状態を確認します。おそらくrebuildなどのステータスになっているかと思います。

また、交換したディスクが認識されているかを下記のコマンドで確認します。

# ./MegaCli -PDList -aALL
# ./MegaCli -PD List  -aALL | egrep 'Slot|Firmware state|Inquiry|Enclo'
# ./MegaCli -PD List  -aALL | egrep 'Slot|state|Data|Raw'

Oracle Linux 8でリリースバージョン固定する方法


Oralce Linux 8.2で導入したい、という要請があった。

(AlmaLinux/RockyLinux/CentOSでの設定については「AlmaLinux /Rocky Linuxのリリースバージョン固定方法」を参照)

Oralce Linux 8.2メディアでインストールすればいい、とは言うものの、パッケージが足らない時にうっかり「dnf install xxxx」とかやってしまうと新しいバージョンを入れてしまう可能性が・・・

有限会社ルートリンクス「RHEL 8 リリースバージョンを指定してアップデート」という記事を見つけて試してみたが、なんか無視されて新しいバージョンを引っ張ってる気がする・・・RHEL8なら有効なのかな?

Oracle Linux 8のドキュメントを探してみる・・・

参考ドキュメント:Oracle® Linux 8 Oracle Linuxでのソフトウェアの管理の「Oracle Linux Yumサーバーを使用するためのシステムの構成

固定手法について直接の記述はないが「ISOイメージを使用したローカルYumリポジトリの提供」というものがあり、ISOイメージをメインレポジトリとして設定し、それ以外を無効化する、という手法が書かれている。

この手法をそのまま使えば、配置したISOのバージョンで固定できる。

8.2で提供された更新だけ適用できないかな?というもくろみもあって、ISOイメージを使わないで実現する手法がないか試してみた。

なお、結論としては無償でできる範囲には無いようだった。

使用可能なULNチャネル」の説明を読むとOracleのULNサブスクリプション購読者は「ol8_arch_u?_baseos_patch」というレポジトリでBaseOSに関してはリリースごとのパッチが適用できるようだ。AppStreamについては特に定義されていないようだ。


  1. ISOファイルをローカルディスクに配置
  2. /etc/fstabに「/ISOs/OracleLinux.iso /var/OSimage/OL_x86_64 iso9660 loop,ro 0 0」というようなエントリ追加
  3. /etc/yum.repos.d/ にファイル作成

ここから参考記録

ISOメディアを使わず、ULNサブスクリプションも登録しない状態で何かできるかを試してみたものが、下記の記述となる。

[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo enabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        enabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             enabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  disabled
[root@oraclelinux ~]#

レポジトリリストを見てみたところ「Oracle Linux 8.2 BaseOS (x86_64)」などというそれっぽいものがあるので、ISOイメージの手法にならってまずは「dnf config-manager –disable *」を実行して全レポジトリを無効化

[root@oraclelinux ~]# dnf config-manager --disable \*
[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo disabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        disabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             disabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  disabled
[root@oraclelinux ~]#

続いてOracle Linux 8.2で固定したいので、「ol8_u2_baseos_base」だけを有効化するために「dnf config-manager –enable ol8_u2_baseos_base」を実行

[root@oraclelinux ~]# 
[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo disabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        disabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             disabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  enabled
[root@oraclelinux ~]#

この状態で「dnf check-update」を実行してみる。

[root@oraclelinux ~]# dnf clean all
23 files removed
[root@oraclelinux ~]# dnf check-update
Oracle Linux 8.2 BaseOS (x86_64)                 10 MB/s | 3.3 MB     00:00
Last metadata expiration check: 0:00:01 ago on Wed Oct 20 19:01:10 2021.
[root@oraclelinux ~]#

アップデートは取りに行かない。

が・・・phpをインストールしようとしたら見つからない・・・

[root@oraclelinux ~]# dnf module list
Last metadata expiration check: 0:08:47 ago on Wed Oct 20 19:01:10 2021.
@modulefailsafe
Name                     Stream        Profiles         Summary
satellite-5-client       1.0 [e]       common, gui      ULN client packages

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@oraclelinux ~]# dnf search php
Last metadata expiration check: 0:09:10 ago on Wed Oct 20 19:01:10 2021.
No matches found.
[root@oraclelinux ~]#

phpはAppStreamレポジトリに含まれるものであるため、BaseOSしか登録していない現状では表示されません。

この他、AppStreamに含まれるパッケージで必要なものがいろいろあるため、この手法を取るには無理がある、という形となった。

では、RHEL8みたいにreleaseverという指定ができるか、というところについて /etc/yum.repos.d/oracle-linux-ol8.repo の内容を確認すると、$releasever という定義が使われてない。

[root@oraclelinux ~]# cat /etc/yum.repos.d/oracle-linux-ol8.repo
[ol8_baseos_latest]
name=Oracle Linux 8 BaseOS Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/baseos/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_appstream]
name=Oracle Linux 8 Application Stream ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/appstream/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_codeready_builder]
name=Oracle Linux 8 CodeReady Builder ($basearch) - Unsupported
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/codeready/builder/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u0_baseos_base]
name=Oracle Linux 8 BaseOS GA ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/0/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u1_baseos_base]
name=Oracle Linux 8.1 BaseOS ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/1/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u2_baseos_base]
name=Oracle Linux 8.2 BaseOS ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/2/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
[ol8_addons]
name=Oracle Linux 8 Addons ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[root@oraclelinux ~]#

yum.oracle.com にあるOracle Linux 8 RepositoriesでもAppStreamは1種類しか紹介されていない。Base OSアップデートされたパッケージについてはbaseos latest、AppStreamのアップデートされたパッケージはappstreamに配置されていた。

というわけで、Oracle Linux 8において、バージョン固定にする方法は、おとなしく 「1.8 ISOイメージを使用したローカルYumリポジトリの作成」 をつかっとけ、という話になるようだ。

NetAppでファイルのアクセス監査ログを取る


ファイルサーバで、誰かがエクスプローラーの誤操作で変なところにファイルを移動させてしまうことがある。

その時に、アクセス監査ログから誰が移動(削除)操作を行ったかなどを特定できないか、ということで、NetAppのStorage VMに対するアクセス監査の設定を行った。

CIFSアクセスとNFS v4アクセスで利用できる。

公式ドキュメント:SVMでのNASイベントの監査

まずは監査ログの出力先ディレクトリを作成する。これは設定するStorage VM配下のボリュームのどこかに作成する。

今回はvolume:testvolの中に「audit」というディレクトリを作成した。

Storage VMへの監査有効化は「vserver audit create -vserver SVM名 -destination /出力先ディレクトリ」で行う。

ontap98::> vserver audit show
This table is currently empty.

ontap98::> vserver audit create -vserver share225 -destination /testvol/audit

ontap98::>

設定されたことを確認する。

ontap98::> vserver audit show
Vserver     State  Event Types        Log Format Target Directory
----------- ------ ------------------ ---------- ----------------------------
share225    false  file-ops,          evtx       /testvol/audit
                   cifs-logon-logoff,
                   audit-policy-
                   change

ontap98::> vserver audit show -ins

                           Vserver: share225
                    Auditing State: false
              Log Destination Path: /testvol/audit
     Categories of Events to Audit: file-ops, cifs-logon-logoff,
                                    audit-policy-change
                        Log Format: evtx
               Log File Size Limit: 100MB
      Log Rotation Schedule: Month: -
Log Rotation Schedule: Day of Week: -
        Log Rotation Schedule: Day: -
       Log Rotation Schedule: Hour: -
     Log Rotation Schedule: Minute: -
                Rotation Schedules: -
          Log Files Rotation Limit: 0
            Log Retention Duration: 0s

ontap98::>

次にディレクトリに監査を設定する。

CIFSの場合

volume:testvolの中にある「test1」というディレクトリに設定を行うため、プロパティから「詳細設定」を選択

「監査」タブで設定を行う

今回はファイルやディレクトリの削除について記録したいので、「プリンシパル」を「Everyone」と指定し、「高度なアクセス許可」で「サブフォルダーとファイルの削除」と「削除」で設定します。

下記のような表示になります。

これで設定は完了です。

該当するファイルアクセスを行うと、指定したディレクトリ内に「audit_<vserver名>_last.evtx」というファイルにログが出力されていきます。

上記は毎日2:00にファイルをローテートする設定を追加しているので複数のファイルが存在しています。

ちなみに設定は下記の様に行いました。(-rotate-limit 3で設定しているのでファイルが日時入りのファイルが3つある)

ontap98::> vserver audit modify -vserver share225 -rotate-schedule-month all -rotate-schedule-dayofweek all -rotate-schedule-hour 2 -rotate-schedule-minute 0 -rotate-limit 3 -rotate-size 1M

ontap98::> vserver audit show -ins

                           Vserver: share225
                    Auditing State: true
              Log Destination Path: /testvol/audit
     Categories of Events to Audit: file-ops
                        Log Format: evtx
               Log File Size Limit: 1MB
      Log Rotation Schedule: Month: January-December
Log Rotation Schedule: Day of Week: Sunday-Saturday
        Log Rotation Schedule: Day: -
       Log Rotation Schedule: Hour: 2
     Log Rotation Schedule: Minute: 0
                Rotation Schedules: @2:00
          Log Files Rotation Limit: 3
            Log Retention Duration: 0s

ontap98::>

(1回設定した値を消すには 「-rotate-schedule-dayofweek -」などを行う)

で、どんなログが出るか、というあたりですが、ファイルを削除した場合には、イベントID:4656とイベントID:9999が出力されました。

イベントIDの詳細については「監査できるSMBイベント」を参照のこと…ただ、載ってないのもあるんですよね…

NFSv4の場合

NFS v4の場合はLinux上から nfs4_getfacl, nfs4_setfaclコマンドを使って設定する。

NFS v4でマウントして、「test3」というディレクトリのACLを確認

[root@linux mnt]# nfs4_getfacl test3/

# file: test3/
A::OWNER@:rwaDxtTnNcCy
A:g:GROUP@:rxtncy
A::EVERYONE@:rxtncy
[root@linux mnt]#

上記には「U:」で始まるものがありません。

ファイルとディレクトリに関して成功した操作→「fdS」
対象は全ユーザ→「EVERYONE@」
ACLの変更と削除に関して記録→「Cd」

ということを行いたい場合は「nfs4_setfacl -R -a U:fdS:EVERYONE@:Cd 対象ディレクトリ」と実行します。

[root@linux mnt]# nfs4_setfacl -R -a U:fdS:EVERYONE@:Cd test3
[root@linux mnt]# nfs4_getfacl test3/

# file: test3/
A::OWNER@:rwaDxtTnNcCy
A:g:GROUP@:rxtncy
A::EVERYONE@:rxtncy
U:fdS:EVERYONE@:dC
[root@linux mnt]#

で、ファイルを削除した場合、イベントID:4663 とイベントID:4658 が記録されました。

NFSで監査できるイベントについては「監査できるNFSファイルおよびディレクトリのアクセス イベント」に記載があるのですが、evtx出力した時にどういうイベントIDになるのか、という対応表はないようです。

また、どちらの場合でも、下記の様なエラーっぽいものが表示されています。この説明が見つかりませんは仕様で回避方法は無いようです。

ソース "NetApp-Security-Auditing" からのイベント ID 4658 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。

イベントが別のコンピューターから発生している場合、イベントと共に表示情報を保存する必要があります。

イベントには次の情報が含まれています: 

172.17.44.87
EV_RenderedValue_2.00
false
Not Present
Not Present
Security
File
00000000000406;00;0000064f;046d016e
(nfsshare);/test3/test2.txt

メッセージ リソースは存在しますが、メッセージがメッセージ テーブルに見つかりませんでした。
The description for Event ID 4658 from source NetApp-Security-Auditing cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

172.17.44.87
EV_RenderedValue_2.00
false
Not Present
Not Present
Security
File
00000000000406;00;0000064f;046d016e
(nfsshare);/test3/test2.txt

日本語メッセージリソースがないことが原因なのかと考え、英語UIに替えてみても表示は同じでした。

NetApp KB「The description for Event ID cannot be found in the EVTX logs generated by clustered Data ONTAP」があるので解決できるのかと思ったのですが、無理そうです。

NanoPi R2S+OpenWRT 21.02.0でBIGLOBEのMAP-E接続


5月に「NanoPi R2S+openWRT 21.02.0RCでBIGLOBEのMAP-E接続」にてOpenWRT 21.02.0-RC版での手順を作成した。

しかし、OpenWRT 21.02.0リリース版になってみると、いろいろ設定画面が変更となり、この手順のままでは動作させることができなかった。

ぐぐってみたところ「OpenWrt(21.02)でIPv6インターネットを使う」に手順があったので、参考にしつつ手順を更新した。

前書き

OpenWRTルータを作成するにあたり、いろいろある選択肢からRockchip RK3328のNanoPi R2S と Rockchip RK3399のNanoPi R4S を候補にあげた。

Amazon日本の倉庫に在庫があるというのと、openWRTのページに「FriendlyARM NanoPi R2S」とデバイスに関する個別ページが作成されており、リリース版の提供がされていたので、NanoPi R2Sを買って設定を行った。

ちなみに置き換え対象となったGL-MV1000とのサイズ比較はこんな感じ

OpenWRT 21.02.0-RC版の時代はアップグレードしたら以前の設定を残しておくと起動しなくなるとか問題もありましたが、OpenWRT 21.02.0リリース版を書き込んだあと設定復旧で動作させることができました。

設定手順0: MicroSD作成

friendlyarm_nanopi-r2s-squashfs-sysupgrade.img.gz を展開したものをmicroSDに書き込んでNanoPi R2Sを起動。

設定手順1:パッケージの追加

mapパッケージと日本語UIパッケージ(luci-i18n-base-ja)をインストール

また、後述のニチバン対策を行う場合は iptables-mod-ipopt もインストールする。

GUIの場合、[システム]-[Software]にて、「Update lists」を実行してパッケージ一覧を取得した後に、「Filter」にパッケージ名を入れて、出てきたモジュールを「Install」する。

CLIでインストールする場合は以下を実行

# opkg update
# opkg install luci-i18n-base-ja
# opkg install map
# okpg install iptables-mod-ipopt

インストール後は再起動を行うこと。

再起動しないとluciのネットワーク設定で「プロトコル:MAP / LW4over6」が選択肢に現れません。

設定手順2:WAN6インタフェースの作成

WAN6インタフェースがなければ「プロトコル: DHCPv6クライアント」で作成する

最初はそのまま設定して、有効化し、WAN6インタフェースに割り当てられるIPv6アドレスを確認すること。

↑の画像は使い回しなので、この段階では無いはずの「MAP」インタフェースなどが入ってます

上記のようにWAN6インタフェースに「IPv6」アドレスが確認できたら、そのアドレスをコピーして、notepadにでも貼り付けておきます。

設定手順3:WAN6インタフェースにDHCPv6関連設定

openWRT 21.02.0のリリース版になったらWAN6インタフェースではDHCPv6関連設定がGUIできるようになりました。

[DHCPサーバー]を選択して、下記のようになっている場合は「DHCPサーバーをセットアップ」をクリックします。

クリックしたあと[一般設定]タブは下記のような感じで変更せず

[IPv6設定]タブで下記の設定を行います。

Designated master: チェックを入れる
RA-Service:リレーモード
DHCPv6-サービス: リレーモード
NDP-Proxy: リレーモード
(Learn routesは設定を変更していない)

設定手順4:LANインタフェースにDHCPv6関連設定

LANインタフェースの[DHCPサーバー]-[IPv6設定]で以下の設定を行います。

RA-Service:リレーモード
DHCPv6-サービス: サーバーモード
NDP-Proxy: リレーモード

(マスターにチェックは入れません)

設定手順5: IPv6 PD設定

OpenWRT 21.02.0-RC版だとIPv6 PD設定がWAN6にあったのですが、リリース版だと消えています。

これは別のインタフェースとして作成することで対応するようです。

[インタフェースを新規作成]から下記でインタフェースを作成します。

名前:WAN6PD
プロトコル:静的アドレス
デバイス: WAN6インタフェース(@wan6表記)

詳細設定では手順2で確認したIPv6アドレスを使います。

IPv6アドレスが「IPv6: wwww:xxxx:yyyy:zzzz:aaaa:bbbb:cccc:dddd/64」というようになっているとき、先頭の4カラム「wwww:xxxx:yyyy:zzzz」を使います。

まず、WAN6PDに割り当てる 「wwww:xxxx:yyyy:zzzz::1001」を「IPv6アドレス」に設定します。

「IPv6 ゲートウェイ」には「wwww:xxxx:yyyy:zzzz::1 」を指定します。このアドレスは設定完了後、WAN6PDインタフェースではなく、LANインタフェースに対して割り当てられます。

「IPv6ルートプレフィックス」には「wwww:xxxx:yyyy:zzzz::/56」と指定します。

設定すると上記のような感じです。

設定手順6: MAP-E接続設定

インタフェースの新規作成で「プロトコル:MAP / LW4over6」を作成して、必要な値を入れていきます。今回は「WAN_MAP」で作成しました。

[一般設定]では下記の様にしました。

プロトコル:MAP/LW4over6
タイプ:MAP-E
以後は環境に合わせた値

[詳細設定]では「従来のMAPを使用」にチェックを入れる

設定手順7: 各インタフェースのファイアウォールゾーン設定

wan系のゾーンに「wan_map」と「WAN6PD」を追加します。

設定完了

ひとまずこれで設定完了です。

うまく接続が始まらない場合は、再起動してみてください。

設定:ニチバン対策

通称「ニチバンベンチ」と呼ばれているものがある。

一部のIPv4通信のみが可能なサイトにアクセスした際に、一定数以上の通信が行えなくなりコンテンツが欠けるなどの現象が発生することがある。

これはNATテーブルの利用手法と、一回確保したNATテーブルエントリの有効期限設定の兼ね合いで、MAP-Eで確保できるIPv4通信用のNAT用ポートを使い果たしてしまった場合に発生している。

大量の小さなファイルがWebサーバ側の同時セッション数が非常に多い設定で流れてこなければならないので、この現象が発生しているかどうかを意図的に確認するのがなかなか難しいものがある。

しかし、長らくニチバンサイトではその条件に合致するサイト構造であったため、ニチバンサイトを10窓ぐらいでリロードすれば発生していたため、確認手法としてニチバンにアクセスすることを「ニチバンベンチ」と呼称していた。(なお、2021年9月時点のニチバンサイトはサイト内容が一新され発生しなくなっている)

このNATテーブルとIPv4 ポート割り当ての問題を解消するためにiptablesを利用して割り当て手法の調整を行う https://paste.teknik.io/VeN9r を使用した。

IP4,PSID, TUNDEVは自分の環境に合わせて変更すること
IP4, PSIDがわからない場合は http://ipv4.web.fc2.com/map-e.html で確認すること

TUNDEVは、GUIから設定した名前ではなく、アイコンの下に小さく書かれている方の名前を使う。↑の場合は「map-wan_map」になる。

また、units1とunits2は、BIGLOBEはV6plus相当であるため、数値を変更する。

units1=15 #V6plus:15 OCN:63
units2=4096 #V6plus 4096 OCN:1024
IP4='xxx.xxx.xxx.xxx'
PSID='x'
TUNDEV='map-wan_map'


iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -t nat -F POSTROUTING

rule=1
while [ $rule -le $units1  ] ; do
  mark=`expr $rule + 16`
  pn=`expr $rule - 1`
  portl=`expr $rule \* $units2 + $PSID \* 16`
  portr=`expr $portl + 15`

  iptables -t nat -A PREROUTING -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark
  iptables -t nat -A OUTPUT -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark

  iptables -t nat -A POSTROUTING -p icmp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  iptables -t nat -A POSTROUTING -p tcp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  iptables -t nat -A POSTROUTING -p udp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  rule=`expr $rule + 1`
done

上記をopenwrtの[ネットワーク]-[ファイヤーウォール]-[Custom Rules] (/etc/firewall.user) に記載する。

また、[システム]-[スタートアップ]-[ローカルスタートアップ] (/etc/rc.local)の exit 0よりも前に下記2行を追加する

sleep 30
sh /etc/firewall.user

なお、iptablesのstatisticモジュールはiptables-mod-ipoptに入っているが、標準では導入されていないため、冒頭でインストールしているが、まだの場合は下記のような感じでインストールする。

root@nanopi:~# opkg install iptables-mod-ipopt
Installing iptables-mod-ipopt (1.8.7-1) to root...
Downloading https://downloads.openwrt.org/releases/21.02.0-rc1/targets/rockchip/armv8/packages/iptables-mod-ipopt_1.8.7-1_aarch64_generic.ipk
Installing kmod-ipt-ipopt (5.4.111-1) to root...
Downloading https://downloads.openwrt.org/releases/21.02.0-rc1/targets/rockchip/armv8/packages/kmod-ipt-ipopt_5.4.111-1_aarch64_generic.ipk
Configuring kmod-ipt-ipopt.
Configuring iptables-mod-ipopt.
root@nanopi:~#

これで、とりあえずニチバンもスムースに開けるようになった。


参考資料

/etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdaf:6014:6f21::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth1'

config device
        option name 'eth1'
        option macaddr '1a:e4:a4:73:0d:0c'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.1.1'

config device
        option name 'eth0'
        option macaddr '1a:e4:a4:73:0d:0b'

config interface 'wan'
        option device 'eth0'
        option proto 'dhcp'
        option auto '0'

config interface 'wan6'
        option device 'eth0'
        option proto 'dhcpv6'
        option reqaddress 'try'
        option reqprefix 'auto'

config interface 'wan_map'
        option proto 'map'
        option maptype 'map-e'
        option peeraddr '2404:9200:225:100::64'
        option ipaddr 'xxx.xxx.xxx.xxx'
        option ip4prefixlen '15'
        option ip6prefix 'wwww:xxxx::'
        option ip6prefixlen '31'
        option ealen '25'
        option psidlen '8'
        option offset '4'
        option legacymap '1'

config interface 'WAN6PD'
        option proto 'static'
        list ip6addr 'wwww:xxxx:yyyy:zzzz::1001'
        option ip6gw 'wwww:xxxx:yyyy:zzzz::1'
        option ip6prefix 'wwww:xxxx:yyyy:zzzz::/56'
        option device '@wan6'

/etc/config/dhcp

config dnsmasq
        option domainneeded '1'
        option boguspriv '1'
        option filterwin2k '0'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option nonegcache '0'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'
        option ednspacket_max '1232'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv4 'server'
        option ra 'relay'
        option ndp 'relay'
        list ra_flags 'none'
        option dhcpv6 'server'

config dhcp 'wan6'
        option dhcpv6 'relay'
        option ra 'relay'
        option ndp 'relay'
        option master '1'
        option interface 'wan6'
        option ignore '1'
        list ra_flags 'none'

iptablesの結果

意図した分散が行われているかを「iptables -t nat -L -v」のPOSTROUTING tcp/udpのpkts/bytesカウントが分散して増加していっているかを確認する。

ちなみに、 /etc/rc.local にsleep 30とsh /etc/firewall.user を入れないと、システムが生成した分散ルールも残って表示される。

root@nanopi:~# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 2756 packets, 474K bytes)
 pkts bytes target     prot opt in     out     source               destination
  185 32012 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
  184 28575 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
  184 31952 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
  184 31323 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
  184 33123 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
  184 36047 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
  184 32939 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
  184 33412 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
  184 29916 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
  184 28526 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
  184 29308 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
  183 32364 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
  183 30150 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
  183 29944 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
  183 34100 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain INPUT (policy ACCEPT 598 packets, 40818 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 67 packets, 5056 bytes)
 pkts bytes target     prot opt in     out     source               destination
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
    4   300 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain POSTROUTING (policy ACCEPT 23 packets, 1064 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
   41  2607 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
    8   557 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
    4   336 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
   50  3503 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
   13   868 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
   46  2981 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
   11   771 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
   33  1991 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
   10   709 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
   38  2280 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
   13   950 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
   42  3095 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
   11   831 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
   51  3838 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
   11   823 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
   41  2564 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
    9   656 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
   44  2665 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
    9   629 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
   55  3841 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
   11   762 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
   53  3161 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
   10   699 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
   46  2965 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
    9   632 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
   45  2700 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
   10   671 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
   48  2992 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
   15  1003 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
   38  2280 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
    9   615 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215

Chain postrouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain zone_lan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan postrouting rule chain */

Chain zone_lan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
  389 44358 prerouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan prerouting rule chain */

Chain zone_wan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan postrouting rule chain */
    0     0 MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

Chain zone_wan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    6   786 prerouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan prerouting rule chain */
root@nanopi:~#

2021/09/22追記: 8日間稼働した後の状態

root@nanopi:~# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 1434K packets, 285M bytes)
 pkts bytes target     prot opt in     out     source               destination
95575   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
95574   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
95573   19M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain INPUT (policy ACCEPT 231K packets, 17M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1399 packets, 222K bytes)
 pkts bytes target     prot opt in     out     source               destination
   94 15373 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
   94 16668 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
   94 13812 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
   94 14151 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
   93 14819 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
   93 13431 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
   93 15387 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
   93 14528 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
   93 15124 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
   93 16367 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
   93 14850 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
   93 14763 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
   93 14121 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
   93 13029 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
   93 15394 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain POSTROUTING (policy ACCEPT 1289 packets, 186K bytes)
 pkts bytes target     prot opt in     out     source               destination
  772 64680 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
14703  948K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
 3753  257K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
  837 70140 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
14623  945K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
 3628  254K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
  806 67536 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
14690  930K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
 3705  257K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
  853 71540 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
14620  936K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
 3696  255K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
  802 67088 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
14833  942K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
 3723  256K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
  834 69944 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
14759  930K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
 3689  258K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
  804 67480 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
14874  946K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
 3746  261K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
  868 72800 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
14703  937K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
 3698  254K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
  843 70644 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
14651  931K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
 3720  256K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
  768 64288 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
14731  942K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
 3689  251K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
  839 70084 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
14826  944K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
 3729  257K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
  841 70420 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
14751  939K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
 3697  252K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
  783 65492 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
14802  937K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
 3679  255K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
  850 71288 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
14824  942K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
 3622  246K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
  870 72968 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
14802  941K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
 3684  258K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215

Chain postrouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain zone_lan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan postrouting rule chain */

Chain zone_lan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
  389 44358 prerouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan prerouting rule chain */

Chain zone_wan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan postrouting rule chain */
    0     0 MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

Chain zone_wan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    6   786 prerouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan prerouting rule chain */
root@nanopi:~#

2022/04/14追記

32日起動していた場合の出力なんだけど、以前と違って「conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat」の数が増えてないのはなんなのだ???

root@nanopi:~# uptime
 09:48:41 up 32 days, 12:38,  load average: 0.00, 0.01, 0.00
root@nanopi:~# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 6326K packets, 1296M bytes)
 pkts bytes target     prot opt in     out     source               destination
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
 422K   87M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
 422K   87M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
 422K   87M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
 422K   87M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
 422K   86M MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f
6326K 1296M prerouting_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom prerouting rule chain */
6321K 1295M zone_lan_prerouting  all  --  br-lan any     anywhere             anywhere             /* !fw3 */
    0     0 zone_wan_prerouting  all  --  eth0   any     anywhere             anywhere             /* !fw3 */
 4905  558K zone_wan_prerouting  all  --  map-wan_map any     anywhere             anywhere             /* !fw3 */

Chain INPUT (policy ACCEPT 1037K packets, 79M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 9463 packets, 1532K bytes)
 pkts bytes target     prot opt in     out     source               destination
  632  101K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
  631  103K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
  631  100K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
  631 99184 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
  631  101K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
  631  103K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
  631  105K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
  631  102K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
  631  102K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
  631 97260 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
  631  104K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
  631  102K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
  631  105K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
  630  100K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
  630  104K MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain POSTROUTING (policy ACCEPT 7238 packets, 1363K bytes)
 pkts bytes target     prot opt in     out     source               destination
 2962  257K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xx.xxx.xx:5856-5871
62597 4208K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xx.xxx.xx:5856-5871
14955 4828K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xx.xxx.xx:5856-5871
 2998  256K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xx.xxx.xx:9952-9967
62399 4173K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xx.xxx.xx:9952-9967
14973 4852K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xx.xxx.xx:9952-9967
 2972  263K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xx.xxx.xx:14048-14063
62056 4109K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xx.xxx.xx:14048-14063
14958 4830K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xx.xxx.xx:14048-14063
 3020  270K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xx.xxx.xx:18144-18159
62491 4170K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xx.xxx.xx:18144-18159
15125 4922K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xx.xxx.xx:18144-18159
 2948  255K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xx.xxx.xx:22240-22255
62215 4170K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xx.xxx.xx:22240-22255
15160 4931K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xx.xxx.xx:22240-22255
 2985  259K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xx.xxx.xx:26336-26351
62214 4147K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xx.xxx.xx:26336-26351
15056 4989K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xx.xxx.xx:26336-26351
 3116  271K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xx.xxx.xx:30432-30447
62050 4150K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xx.xxx.xx:30432-30447
15061 4789K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xx.xxx.xx:30432-30447
 2973  256K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xx.xxx.xx:34528-34543
62684 4173K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xx.xxx.xx:34528-34543
15055 4832K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xx.xxx.xx:34528-34543
 3046  272K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xx.xxx.xx:38624-38639
62090 4162K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xx.xxx.xx:38624-38639
14894 4747K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xx.xxx.xx:38624-38639
 3045  263K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xx.xxx.xx:42720-42735
62550 4157K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xx.xxx.xx:42720-42735
15085 4847K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xx.xxx.xx:42720-42735
 2970  255K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xx.xxx.xx:46816-46831
62369 4167K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xx.xxx.xx:46816-46831
14965 4803K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xx.xxx.xx:46816-46831
 2912  257K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xx.xxx.xx:50912-50927
62665 4189K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xx.xxx.xx:50912-50927
15057 4704K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xx.xxx.xx:50912-50927
 3024  263K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xx.xxx.xx:55008-55023
62282 4191K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xx.xxx.xx:55008-55023
15039 4877K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xx.xxx.xx:55008-55023
 3022  262K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xx.xxx.xx:59104-59119
62369 4163K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xx.xxx.xx:59104-59119
15014 4877K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xx.xxx.xx:59104-59119
 3001  261K SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xx.xxx.xx:63200-63215
62511 4145K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xx.xxx.xx:63200-63215
15094 4836K SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xx.xxx.xx:63200-63215
10025 1475K postrouting_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom postrouting rule chain */
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 0 */ to:xxx.xx.xxx.xx:5856-5871
 2787  111K SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 1 */ to:xxx.xx.xxx.xx:5856-5871
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 2 */ to:xxx.xx.xxx.xx:5856-5871
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 3 */ to:xxx.xx.xxx.xx:9952-9967
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 4 */ to:xxx.xx.xxx.xx:9952-9967
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 5 */ to:xxx.xx.xxx.xx:9952-9967
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 6 */ to:xxx.xx.xxx.xx:14048-14063
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 7 */ to:xxx.xx.xxx.xx:14048-14063
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 8 */ to:xxx.xx.xxx.xx:14048-14063
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 9 */ to:xxx.xx.xxx.xx:18144-18159
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 10 */ to:xxx.xx.xxx.xx:18144-18159
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 11 */ to:xxx.xx.xxx.xx:18144-18159
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 12 */ to:xxx.xx.xxx.xx:22240-22255
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 13 */ to:xxx.xx.xxx.xx:22240-22255
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 14 */ to:xxx.xx.xxx.xx:22240-22255
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 15 */ to:xxx.xx.xxx.xx:26336-26351
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 16 */ to:xxx.xx.xxx.xx:26336-26351
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 17 */ to:xxx.xx.xxx.xx:26336-26351
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 18 */ to:xxx.xx.xxx.xx:30432-30447
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 19 */ to:xxx.xx.xxx.xx:30432-30447
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 20 */ to:xxx.xx.xxx.xx:30432-30447
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 21 */ to:xxx.xx.xxx.xx:34528-34543
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 22 */ to:xxx.xx.xxx.xx:34528-34543
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 23 */ to:xxx.xx.xxx.xx:34528-34543
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 24 */ to:xxx.xx.xxx.xx:38624-38639
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 25 */ to:xxx.xx.xxx.xx:38624-38639
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 26 */ to:xxx.xx.xxx.xx:38624-38639
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 27 */ to:xxx.xx.xxx.xx:42720-42735
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 28 */ to:xxx.xx.xxx.xx:42720-42735
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 29 */ to:xxx.xx.xxx.xx:42720-42735
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 30 */ to:xxx.xx.xxx.xx:46816-46831
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 31 */ to:xxx.xx.xxx.xx:46816-46831
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 32 */ to:xxx.xx.xxx.xx:46816-46831
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 33 */ to:xxx.xx.xxx.xx:50912-50927
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 34 */ to:xxx.xx.xxx.xx:50912-50927
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 35 */ to:xxx.xx.xxx.xx:50912-50927
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 36 */ to:xxx.xx.xxx.xx:55008-55023
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 37 */ to:xxx.xx.xxx.xx:55008-55023
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 38 */ to:xxx.xx.xxx.xx:55008-55023
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 39 */ to:xxx.xx.xxx.xx:59104-59119
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 40 */ to:xxx.xx.xxx.xx:59104-59119
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 41 */ to:xxx.xx.xxx.xx:59104-59119
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 42 */ to:xxx.xx.xxx.xx:63200-63215
    0     0 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 43 */ to:xxx.xx.xxx.xx:63200-63215
    0     0 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             #conn dst/32 <= 16 /* !fw3: ubus:wan_map[map] nat 44 */ to:xxx.xx.xxx.xx:63200-63215
 7137 1356K zone_lan_postrouting  all  --  any    br-lan  anywhere             anywhere             /* !fw3 */
    0     0 zone_wan_postrouting  all  --  any    eth0    anywhere             anywhere             /* !fw3 */
    0     0 zone_wan_postrouting  all  --  any    map-wan_map  anywhere             anywhere             /* !fw3 */

Chain postrouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain zone_lan_postrouting (1 references)
 pkts bytes target     prot opt in     out     source               destination
 7137 1356K postrouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan postrouting rule chain */

Chain zone_lan_prerouting (1 references)
 pkts bytes target     prot opt in     out     source               destination
6321K 1295M prerouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan prerouting rule chain */

Chain zone_wan_postrouting (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan postrouting rule chain */
    0     0 MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

Chain zone_wan_prerouting (2 references)
 pkts bytes target     prot opt in     out     source               destination
 4905  558K prerouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan prerouting rule chain */
root@nanopi:~#

これはどうやら、openwrt起動後にSoftwareパッケージの個別更新を実施していたのだが、ネットワークのrestartが行われた際に、iptablesが再設定されたためだったようで、openwrt全体を再起動した正常になった。

現在行っている設定はネットワーク開始後に /etc/rc.local からiptablesの設定を追加しているので、rc.localで行うことが消えた、という感じである

expectでスクリプトを作った時のメモ書き


ssh経由の操作をexpectコマンドで自動化しようとした時に、expectで調べると、入出力関連に関しては出てくるが、文字列操作や制御構文周りがよくわからない。

ここら辺は、tclに関して調べるとわかるようになっている。

参考にしたサイト

LInux JM Home Page「expect (1)
FreeSoftNet 「Tcl>文法とコマンド
アプリコット PukiWiki「expectで自動化

if文の書き方

他の言語と同じように「if (条件){実行内容}」と書くと妙なエラーになる。

expectでは「if {条件} {実行内容}」というように、どちらも「{}」で囲む。
また、「if」と「{」の間、「条件の}」と「実行内容の{」の間のそれぞれにスペースを挟む必要がある。

文字列を比較して、異なる場合は「diff」、同じであれば「same」と出力するexpectは下記の様になる。

#!/usr/bin/expect -f
set hostnamenew "testhostnew"
set hostnamenow "testhost"

puts "hostnamenew: $hostnamenew"
puts "hostnamenow: $hostnamenow"

if { "$hostnamenew" != "$hostnamenow" } {
        puts "diff"
} else {
        puts "same"
}

誤って「if (条件) {実行内容}」とした場合、下記の様な「unbalanced open paren in expression」というエラーとなる。

unbalanced open paren
in expression "("
    (parsing expression "(")
    invoked from within
"if ( "$hostnamenew" != "$hostnamenow" ) {
        puts "diff"
} else {
        puts "same"
}"

「if(条件) {実行内容}」と「if{条件} {実行内容}」とifと{の間にスペースを入れない場合は下記のような「invalid command name」となる

invalid command name "if("
    while executing
"if( "$hostnamenew" != "$hostnamenow" ){"
invalid command name "if{"
    while executing
"if{ "$hostnamenew" != "$hostnamenow" }{"

面倒くさいことに「if {条件}{実行内容}」と、ifと条件の間にはスペース入れたけど、条件と実行内容の間にスペースがない場合は下記の「extra characters after close-brace while executing」というエラーになる。

extra characters after close-brace
    while executing
"if { "$hostnamenew" != "$hostnamenow" }{"

コマンド出力から文字列を取り出しと文字列の切り出し

expectを使う場合は、sshで他のホストに接続してコマンドを実行する、という用途で使うことが多い。

コマンドの実行結果によって、処理を変えたい場合、どうすればいいのか?

「expect -indices -re “条件式”」で条件式に該当した行を$expect_out(数字,string)で拾うみたいなんだけど、いまいち動作がよくわからない。

「ip a s ens160」を実行して、そのIPアドレスを取得したい場合の例として以下を作った

expect "\[#$] "
send -- "ip a s ens160\r"
expect -indices -re "inet (.*)\r"
puts "===buffer==="
puts "$expect_out(buffer)"
puts "===str0==="
puts "$expect_out(0,string)"
puts "===str1==="
puts "$expect_out(1,string)"
puts "===="

これの実行結果は下記となった。

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:27:f8 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
===buffer===
ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:27:f8 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
===str0===
inet 172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
===str1===
172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
====
       valid_lft forever preferred_lft forever
    inet6 fe80::cca7:388a:36e7:d688/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

条件を「inet (.*)\r」から「inet6 (.*)\r」に変更

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:27:f8 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cca7:388a:36e7:d688/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
===buffer===
ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:27:f8 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.17.44.48/16 brd 172.17.255.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cca7:388a:36e7:d688/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
===str0===
inet6 fe80::cca7:388a:36e7:d688/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
===str1===
fe80::cca7:388a:36e7:d688/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
====

ここからさらにIPアドレスの部分を取り出すには「string first ~」「string last ~」と「string range ~」を使って文字列を切り出す。

set str $expect_out(1,string)
set stred [string first "/" $str]
puts "[string range $str 0 $stred]"
set stred [expr $stred - 1]
puts "[string range $str 0 $stred]"

上記の実行結果としては下記のようになる。

172.17.44.48/
172.17.44.48

他の言語のsubstring系だと開始アドレスと、そこを起点に取り出す文字列の長さを指定するが、tclのstring range では、開始アドレスと終了アドレスの2つを指定する形になるので注意が必要になる。

リストファイルを順に処理する

サーバ名 IPアドレス ユーザ名 パスワードがかかれている一覧ファイルを読み込ませて順に処理させる例

まず、一覧ファイルの例

server1       172.17.44.51    admin   password123#
server2       172.17.44.52    admin   password123#

スクリプト

#!/usr/bin/expect -f

if { $argc < 1 } {
        puts "Usage: $argv0 <serverlist>"
        exit 1
}

set filename [lindex $argv 0]

set contents [read [open $filename]]
set contentline [split $contents "\n"]
foreach line $contentline {
        #puts "$line"
        set linesplit [split $line "\t"]
        set hostname [lindex $linesplit 0]
        set ipaddr [lindex $linesplit 1]
        set username [lindex $linesplit 2]
        set password [lindex $linesplit 3]
        if { $hostname != "" } {
                puts "hostname:$hostname, ipaddr:$ipaddr, username:$username, password:$password"
        }
}

実行例

$ ./sample3 serverlist
hostname:server1, ipaddr:172.17.44.51, username:admin, password:password123#
hostname:server2, ipaddr:172.17.44.52, username:admin, password:password123#
$

なお、処理スクリプトに「if { $hostname != “” } {」を入れているのは改行のみやEOFのみの行を処理してしまわないようにするため

とはいえ、これを応用してssh接続させるスクリプトにしたところ、間にアクセスできないホストがあると、そこでエラー終了してしまうので、取り扱いが面倒であることが判明。
(エラー時の処理を実装すればいいんだけど、面倒)

よって、bashスクリプト側でリストは処理し、そこからexpectスクリプトを呼び出すこととなった。

そうやって作成したのが「Cisco UCSのCIMCにssh接続して設定を行う」になる