FAQ概要

Linux

Go to category

tail -f コマンドでメッセージが追記された場合に音を鳴らしたい (リモートログイン))

[シチュエーション]
Windows端末で、Teratermでリモートログイン(SSH)している際に、ログをtail -f で追っている。
ログは断続的に出てくるので、画面に張り付いた状態は面倒

[一時対策]
Teratermは、BEL文字が表示された際に、BEEP音が鳴るのを活用。
何気なく、bashのTAB補完している時などに、Windowsから「ぽーん」と音が鳴る奴

$ tail -f ログファイル名 | perl -spi -e "s/$/^G/"
   → キャレット(^)G の入力は、Ctrl + v , Ctrl + g

 

2021-12-11 18:29
netstaff

Unix時間(エポック秒)のログを見やすく

squidのaccess.log , rrdtool fecth の出力時の時間列がエポック秒
とりあえず、(時間を)見やすくしたい。

squidのログは、事前にログフォーマットを定義し、アクセスログに適用しておけば良いのだが、
やってなかった時や、管理者が設定変更を(何らかの理由により)やってくれない時など。。。。

[squid]
 $ cat access.log | perl -pe 's/^(\d+\.\d+|\d+)/localtime $&/e'

[rrdtool fetch]
 $ rrdtool fetch foo.rrd AVERAGE -s 20220101 | perl -pe 's/^(\d+\.\d+|\d+)/localtime $&/e'

2022-01-03 18:13
netstaff

systemctl で UNIT一覧画面 ACTIVE列のfaild行 を消したい (更新したい)

通常、ステータスがエラー状態(Faild)なら、エラー状態を調査して復旧させるのだが、
もう、そのサービス(プロセス)は使わないとなった場合がある。レアケースだと思うが。

このような事象頻度は、そうそう無いのでOS再起動とかでやり過ごしていたが、
安易にOS再起動出来ないサーバーで起こってしまったので、調べてみた。

このサービス(プロセス)は使わないので、
#  systemctl stop sav-update.service
#  systemctl disable sav-update.service
を実行するも、


UNIT LOAD ACTIVE SUB DESCRIPTION
● sav-update.service loaded failed failed "Sophos Anti-Virus update"


と、エラー表示が残り続けたので、

# systemctl reset-failed sav-update.service
とする事で、除外された。

2022-01-13 08:20
netstaff

openssl SSL証明書作成

〇 秘密鍵作成

【パスフレーズなし】
$ openssl genrsa 2048 > server.key

【パスフレーズあり】
$ openssl genrsa -des3 2048 > server.key

〇 CSR作成

【対話型/秘密鍵作成済み】
$ openssl req -new -key server.key -out server.csr -sha256

【対話型/秘密鍵作成(パスフレーズなし) + CSR 同時作成】
$ openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr -sha256

【ワンライナー/秘密鍵作成(パスフレーズなし) + CSR 同時作成】
$ openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out server.csr -subj "/C=JP/ST=Tokyo/L=Shinjuku-ku/O=ExampleCompany/CN=www.example.jp/"

〇 CSR確認

$ openssl req -in server.csr -text

〇 証明書発行

【openssl.cnf 諸設定済】

   -> 括弧[xxx]は、openssl.cnfに記述していれば不要。引数で渡した値が優先)
$ openssl ca -config openssl.cnf -in server.csr -out server.pem [-md sha256] [-days 365] [-extensions usr_cert]

〇 証明書確認

$ openssl x509 -in server.crt -text

〇 証明書失効

    -> xx(シリアル値)は、index.txtを確認
$ openssl ca -config openssl.cnf -revoke newcerts/xx.pem

〇 自己署名

$ openssl req -new -x509 -newkey rsa:2048 -nodes -keyout server.key -out server.pem -sha256

2022-01-24 15:30
netstaff

vmwareでオンライン(起動)状態でSCSI HDDを追加後にHDDを認識させる

1.現状態を確認する
      VMwareでオンラインでHDDを追加した際に自動認識するかどうかは、VMwareのディストリビューションや、OS、自動認識させるアプリが起動しているかで変わる。
      まずは、認識しているかどうか確認する

      # cat /proc/scsi/scsi

2,追加したHDDが認識していなければ、以下のコマンドを実行する

# echo "- - -" > /sys/class/scsi_host/host2/scan

3, 再度、確認コマンドを実行して確認する

     # cat /proc/scsi/scsi

2022-02-01 19:01
netstaff

VMware(VM)利用時に、mountすると「wrong fs type, bad option, bad superblock on…」が表示される

HDDイメージが壊れている可能性も否めないが、VMware(を含む仮想基盤)では、DIskイメージをコピーして検証/調査したり、Masterイメージを作成してOSを構築を容易にする事も多い。

他のHDDイメージをmountすると「wrong fs type, bad option, bad superblock on…」と出て、ヒヤッとするが、まずは、/var/log/messages を見て欲しい。

Filesystem has duplicate UUID 12345678-1234-1234-1234-123456789012 - can't mount

と表示されていないだろうか

HDDイメージを流用すると、一意であるべきUUIDが重複してしまい、mount失敗を起こす。
仮想基盤ならではの、「あるある」だと思う。
対象方法は2つ

1.一時的にマウント
     マウント時にUUIDの重複を無視するオプション(-o nouuid)を渡します。

     # mount -t xfs -o nouuid /dev/sdb1 /mnt

2.永続的に使う場合は、UUIDを変更する
      Formatが xfsなら
     # xfs_admin -U generate /dev/sdb1
     → ext4とかは未調査

2022-02-01 19:18
netstaff

LinuxでUUIDやLABEL情報の確認方法は

よく忘れるのでメモ

  1. lsでも分かる
        $ ls -l /dev/disk/by-xxxxx/
           xxxx は、id, label, uuid などいつかあるので、
    $ cd /dev/disk
    $ ls 
    ​

    順に下層に降りていくのもあり。

  2. マウントしているなら、

    $ blkid​

2022-02-01 19:26
netstaff

Rocky Linux8.5 にSAS2008を認識させる

【現環境】
Linux ****.chovits.net 4.18.0-348.20.1.el8_5.x86_64 #1 SMP Thu Mar 10 20:59:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
RAID Card: MegaRAID SAS 9240-8i (SAS2008)

【更新前の状況】
CentOS8.4より古いRAIDカードドライバーが削除(非対応)となり、マザーボード交換の際にOSを入れなおしたタイミング(OSをCentOS7系→8系)でRAIDカードがOSで認識されなくなった。
CentOS7系にすれば動作するはずだが、当時調べた際の対応として、RepositoryのCentOSPlusでリリースされたKernelであれば、SAS2008が使えるとの情報があり、CentOSPlusのkernelを使っていた。

その後CentOS8系のサポート終了となり、Kernelが標準ではない、CentOSPlusのkernelを使っているのも忘れ、RockyLinux8へそのままマイグレーション。再起動後、見事にOSが起動しなくなった。
※ OS起動中にcoreダンプして止まる

結局、RockyLinux8.5をクリーンインストールするも、RockyLinux8でもRAIDカード認識せず。
色々と情報をgoogleったが、RockyLinux8はまだまだ情報も薄く有益な情報がない。
本来のマシン用途(ファイルサーバー)が使えず、色々と支障が出てきたので、
RockyLinux8 で、kernelはCentOSPlusのkernel 4.18.0-305.25.1.el8_4.centos.plus.x86_64
を使う。
yum でインストールするが、OS起動時にkernelの署名のmismatchでエラーが出て起動できず。
マザーボードBIOSのUEFIセキュアモードをOFFにした。レガシーBIOSで起動しているはず。

【再挑戦】
前置きが長くなったが、
・ Rocky8.5 + kernel 4.18.0-305.25.1.el8_4.centos.plus.x86_64
の状態からスタートです。

この記事を参考にリベンジ
https://www.networkshinobi.com/centos-8-with-lsi-sas2008/
ダウンロードしたファイルは、dd-mptsas-3.04.20-6.el8_5.elrepo.iso
このisoファイルから、kmod-mptsas-3.04.20-6.el8_5.elrepo.x86_64.rpm を取り出して、
インストール後、再起動 -> RAIDカード認識しない。。。。

さらに、「kmod-mpt3sas」でgoogleと、CentOSコミュニティの記事を発見。
https://cbs.centos.org/koji/buildinfo?buildID=37234

This package provides the LSI MPT Fusion SAS 3.0 Device (mpt3sas) driver. Compared to the in-kernel driver this driver re-enables support for deprecated mpt2sas adapters: - 0x1000:0x0064: LSI SAS2116_1 - 0x1000:0x0065: LSI SAS2116_2 - 0x1000:0x0070: LSI SAS2004 - 0x1000:0x0072: LSI SAS2008 - 0x1000:0x0074: LSI SAS2108_1 - 0x1000:0x0076: LSI SAS2108_2 - 0x1000:0x0077: LSI SAS2108_3 - 0x1000:0x007E: LSI SSS6200

有志が一度削除されたRAIDドライバーをリビルドしてくれている模様
このページの mod-mpt3sas-4.18.0.348-3.el8.x86_64 をダウンロードしてインストール。
/boot配下の、initramfs-4.18.0-348.xx.x.el8_5.x86_64.img が再作成されている事を確認。
再起動して、grubから、最新の 4.18.0-348.20.1.el8_5.x86_64のkernelを選択し起動して、
RAIDカードが認識した事を確認できた

後は、デフォルトkernelを
4.18.0-305.25.1.el8_4.centos.plus.x86_64 → 4.18.0-348.20.1.el8_5.x86_64 変更。
# grub2-set-default 0
OS再起動して、grubメニューを触らずタイムアウトを待って起動しても、
kernel 4.18.0-348.20.1.el8_5.x86_64 で立ち上がってくることを確認。

【未確認】
yum update をかけると、elrepoのkmod-mpt3sas(37.101.00.00-1.el8_5.elrepo)のUpdateを促された・・・。
これは、SAS2008を認識するのか???
Changelogには、Version 35.101.00.00-1のコメントに、
- Use patch to revert removed devices
と書かれているが・・・
しばし現状の状態で使ってみて、kernelUpdateなどで認識しなくなったりしたら試してみるか・・・
とりあえず、
/etc/yum.confに
exclude=kmod-mpt3sas
を入れておこう。

【やり残し】
UEFIセキュアモードはOFFのまま。
この設定を変える(というか、マザーボード設定)と、碌なことがない。
おそらく、レガシーBIOSからUEFIからの起動に変わるはずなので、
・パテーションの切り方 (/boot/efi)
・ ディスクラベルがgptになっているか。
などなど確認して、最悪バックアップから戻すことまで視野に入れないと怖くて触れない。

2022-03-20 20:46
netstaff

rsync 転送元のパス(絶対パス)を転送先ディレクトリで維持したい(階層構造を維持したい)

結論からいうと、R(大文字)オプションを使えば良い。
# rsync -avR /var/log /backup/

実行完了イメージ
- /backup
       |- var
       |    |- log
       |    |    |- boot.log
       |    |    |- auth.log
       |    |    |-     :
       |    |    |-     :
       |    |    |-  ntpstats
       |    |    |       |- xxxxx
       |    |    |       |-    :
       |    |    |       |-    :

手間を省きたい時に便利。大文字Rオプションを使わないと、
事前(初回)に、
# mkdir -p /backup/var/log
 しておいて
# rsync -av /var/log/ /backup/var/log/
と、ひと手間増えるだけ。

ただ、バック対象ディレクトリが増えていけば、このひと手間が面倒くさい

(物理サーバーで)障害等の復旧の場合、
 ・同じ機種に)全戻しであれば、rsync を使う場合もあるが、ディスクイメージを取得しておくか、dump/restoreコマンドになるだろう。
 ・違う機種の全戻しであれば、rsyncで、クリーンインストール後に /dev や /sys 等以外のディレクトリを戻す。

しかし、バックアップ領域を十分に確保出来ない場合、
一つの選択として、クリーンインストールから設定ファイルや作り込んだスクリプトを戻せたら良い! とした場合、
rsync で 必要なファイル/ディレクトリを保存しておく。
往々にして、バックアップしておくのを忘れた~という事にもなるのだが。

著者のrsyncでのバックアップ対象は、
・ /etc 配下
・ /root 配下
・ /home 配下 (makeした際のディレクトリは、excludeオプションで除外。しかし、config.log/config.statusはバックアップ対象)
・ /opt
・ /var/log 配下 (後追いでログ確認用。ただ、バックアップ周期に兼ね合いで、障害直前のログは取得出来ていないので気休め)
・ /var/spool 配下
などである。

2022-05-31 12:17
netstaff

サーバーでパケットルーティングを行いたい (openvpn)

【設定】
 -通常-
# sysctl net.ipv4.ip_forward=1

 -特殊- (柔軟な設定は出来ない? 未検証)
# sysctl net.ipv4.conf.interface_name.forwarding=1

サーバーでルーティングと言えば、Destination Routing を、真っ先に想像します。
routeコマンドや、ip route add コマンドです。
このコマンドは、自身のサーバーがDefaultGWではなく、他のルーターを介して別セグメント(NW)へ通信したい場合に設定するものであり、
・自身のサーバーが、別セグメントにあるサーバーと通信させたい
・別セグメントにあるサーバーが自身のサーバーと通信させたい(帰りのパケット)
の際に使用します。つまり、起点は自身のサーバーです。

ところが起点とならない場合、つまり中継サーバー的な位置づけの場合です。
クライアントA[192.168.0.100/24] -> [192.168.0.1/24] 中継サーバーX [10.0.0.1/24] -> 目的のサーバー[10.0.0.50/24]
※ 所謂、ルーターと同様なふるまいを中継サーバーXにする必要があります。

単純にパケットルーティングやACLを行いたいのであれば、FWやルーターに置き換えれば良いのですが、
中継サーバーX上で行いたい場合が発生する場合があります。
私の場合は、OpenVPNを実装する際に必要となりました。

冒頭で記述したコマンドは、端的に言うと、ネットワークI/F間のパケットをフォワードするかどうかの設定です。
OpenVPN(tunデバイス)でいえば、tun0とeth0間をフォワードします。
※ OpenVPN(tapデバイス)の場合で、物理NICにブリッジすれば、ルーターやFWでルーティングも可能だと思いますが、
    OpenVPNの機能を使って、証明書でのACLやユーザー毎のVPN-IPを変更するなどやりたかったのでtunデバイスとした。
    tapデバイスでも出来るかもしれないが、ネットの情報ではtunデバイスを使った手法の情報が多かった。
    と、いうかtapデバイスでは調べたい情報は探し出せなかっただけだが。

ただ「net.ipv4.ip_forward=1」の利用には、個人的に少々使いたくない感がある。
真面目にACLしないとセキュリティ的に穴になる場合があるから。

Linuxディストリビューションの中には、デフォルトで「net.ipv4.ip_forward=1(有効)」となっている場合があるらしいが、
私がメインで利用していたRedhat(CentOS)系は、デフォルトは「net.ipv4.ip_forward=0 (無効)」です。
特に最近のサーバー向けOSは、デフォルト状態で最低限のセキュリティは確保されています。

昔のOSはセキュリティ概念が低かったのか、(使わないのに)最初から色々なソフトが起動していたり、管理用デフォルトパスワードも甘々だったりとしていたので「サーバーの要塞化」が必須でした。

OpenVpnを導入するにあたり、最初は既存サーバーにインストールしようと思いましたが、
「net.ipv4.ip_forward=1」を設定しないといけないと分かり、lo, eth0, eth1 が既に存在しているので、
eth0 - tun0 のパケットフォワードは行いたいが、eth1 - tun0は行いたくない。
新規サーバーにしても、iptables/nftablesは設定するが、既存サーバーでiptables/nftablesで実は通信止まってました~。
なんて事は、なりたくないな!と。
すぐに影響が出て気づけば、即修正すれば良いんだけど、かなり後になって「気づきました。止まってました!」は避けたい。
いや、単にすべての通信テストをやるのが面倒なだけです。はい。

2022-07-03 12:32
netstaff

bindでDynamicDNS設定した際、jnl(ジャーナルファイル)をzoneファイルに手動反映

【結論】

[Zoneファイル毎に実行]
# rndc sync -clean example.com
    (-clean と付けると、反映後に、example.com.zone.jnl は削除されます)

[全てのZoneファイルに対して実行]
# rndc sync -clean
    (-clean と付けると、反映後に、example.com.zone.jnl は削除されます)

手動反映させるには、上記の方法が一番、手っ取り早いと思う。
急がなければ、jnlファイルは定期的にzoneファイルへ反映しているので、
zoneファイルとjnlファイルのタイムスタンプを比較して、zoneファイルのほうが新しければ反映済み

単純にjnlファイルの情報を見たい場合は、
# rndc dumpdb -zones
# cat /var/named/data/cache_dump.db | grep ddns.example.com

その他の方法として、以下の方法もあるらしい (動作未確認)

# rndc freeze example.com
# cat /var/named/zone/example.com.zone
# rndc thaw example.com

しかし、この方法は、確実に「thaw」を実行しないと、
反映されなくなる点に注意が必要との事だった。

2022-07-15 20:46
netstaff

Apacheで、一部のコンテンツにホスト名(ダイナミックDNS)でアクセス制限したい

【結論】
・条件 Apacheバージョンが2.4.19以上の場合
Require forward-dns
が使えます。
設定例 ) Require forward-dns test.example.jp
test.example.jp のIPアドレスで制限をかける事が可能です。

WEBコンテンツで、一部の人にしか見せたくない、自分(管理者)だけしか見せたくない、アクセスさせたくないコンテンツが
あります。
特定の人だと、ユーザー/パスワード 認証とか、クライアント証明書による認証とかになると思うのですが、
IPアドレスレベルで良いと言った場合に、

Apacheの場合は、
<Directory "/var/www/html/secret">
    Options hogehoge
    AllowOverride foo
    Require ip 192.168.1.1
    Require host test.example.jp
</Diredctory>
Require ipRequire host 制限を書いてきました。

でも、アクセス元IPアドレスが動的IP(プロバイダからのグローバルIP配布)の場合は、
Require host は使えないのですよね。
例えば、上記のように、DDNSを利用し test.example.jp を指定すると、Apacheは
test.example.jp のIPアドレスをチェック。
そのIPアドレスの逆引きが、test.example.jpになるかチェックして、逆引きまでOKなら許可とします。

つまり、アクセス元IPアドレスは、DDNSを使ってAレコード test.example.jp を登録していても、
プロバイダが所持しているグローバルIPの逆引きまでは設定出来ないので、事実上、Require host は使えない。
※ 静的グローバルIPアドレスを所持/貸与されており、DNS逆引き設定まで可能な場合は問題ありません。

ですので、ブロードバンドルータはほとんど電源OFFしないので、動的IPアドレスがあまり変わらないから、
Require ip xxx.xxx.xxx.xxx
で書いていたのですが、たまにルーターがフリーズして再起動を余儀なくされたりします。
その度にapacheの設定変更してました。
たまに、なんとかならんか・・・と思って、googleんだけど、

(方法1)
/etc/hosts に逆引きホストを書けば良い。動的IPが変わったら、/etc/hosts を自動updateされるよう、スクリプトを組む

(方法2)
CGIなら、(Apacheではなく)CGI側でアクセスコントールを行うように改修する

とかで、これらの手間を考えたら、棚上げ状態だったのですが。

運よく、Require forward-dns を使えばDDNSの人でも、アクセス制限可能との事。
バージョン 2.4.19で実装 って、かなり前からあったんだ。。。。
https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html

今まで調べても、「これだ!」という解決法に辿りつけなかったのだが、「Require forward-dns」で検索したら、
一発だもん。
いや~。情報社会でこのような解決法に辿り着くには、つくづくgoogleの検索キーワード次第ですね。

早速、うちのコンテンツに実装しったた。

2022-07-28 12:46
netstaff

Linux debianの日本ミラーサイト設定

日本ミラーサイト https://www.debian.or.jp/using/mirror.html
# vi /etc/apt/sources.list

deb http://ftp.jp.debian.org/debian bullseye main contrib non-free
deb http://ftp.jp.debian.org/debian bullseye-updates main contrib
deb http://ftp.riken.jp/Linux/debian/debian-security bullseye-security main contrib
deb http://security.debian.org/debian-security bullseye-security main contrib


【余談】
日本ミラーでCDNを使わずに、直URL(WIDEやKDDI、理研など)を設定していたが、
本家からの同期が間に合っていないのか、サイトの有効期限切れに出くわしてしまう。

E: http://ftp.riken.jp/pub/Linux/debian/debian/dists/bullseye-updates/InRelease の Release ファイルは期限切れ (11日 22時間 39分 35秒 以来無効) です。このリポジトリからの更新物は適用されません。

著者は、直URLを諦め、「Debian 公式プライマリミラーサイト」から取得するように変更した。
しかしながら、「debian-security」のURLは見つからずに、
http://security.debian.org/ を使っていたが、理研にて公開されていたのを見つけたので、「debian-security」は
直URLを追記している

2022-09-13 22:04
netstaff

VMware ESXi へのカスタム証明書(プライベートCA)更新方法

【やりたい事】
VMware ESXi 管理画面にアクセス(https)する際に、証明書エラーが発生するので、
プライベートCAの証明書に変更する事で、証明書エラーを出ないようにする。

【前提条件】
・プライベートCAの構築/運用を行っていること。
   → 自己署名証明書を使う手法もあるが、プライベートCAから発行した証明書を利用
   → プライベートCAは、opensslコマンドで発行している
   → 証明書チェーンは、ROOTCA証明書->中間CA証明書->サーバー証明書(ESXi)
   → サーバー証明書(ESXi)のCNは、192.168.100.1 のIPアドレス用証明書とする
   → 内部DNSサーバーで名前解決する方法もあるが、今回はIPアドレス用証明書を利用

・ROOTCA証明書は、利用するブラウザにインポート済であること

【環境】
・VMware ESXi 6.7.0 Update 3
   → 個人利用の為、vCenterはありません。
・FireFox 104.0.2 (64 ビット)
・OpenSSL 1.1.1k


【手順】

(1) サーバー証明書を発行し、プライベートCAの署名を行う。

(1-1) ESXiにSSHログインを行い、/etc/vmware/ssl/rui.key を取得。

[ESXi] # cat /etc/vmware/ssl/rui.key
         ※ 今回、秘密鍵ファイルは変更(再作成)しないので、そのまま利用

(1-2) CSR作成とCA署名の実施

[PCA] # vi /tmp/esxi.example.jp.key
        (1-1)のデータをコピペ&保存

[PCA] # cd /root
        # openssl req -new -key /tmp/esxi.example.jp.key -out /tmp/esxi.example.jp.csr
           (DN情報を入れる)

         CSRが出来上がったら、プライベートCAで署名する。
         => 署名後のファイルを取得しておく。(esxi.example.jp.pem)

        ※CA署名時のポイント※
        X509v3拡張情報として、SAN (SubjectAltName)をCA側(openssl.cnf)で追加する。
        SubjectAltName = DNS.1: esxi.example.jp,IP.1: 192.168.100.1

        FireFoxでは、「DNS: 192.168.100.1」とDNS属性しても証明書エラーが発生するので、
      「IP: 192.168.100.1」IP属性にする必要があった。

(1-3) 中間CA証明書の取得

[PCA] # cat /opt/privateca/ICA/cacert.pem

(2) ESXiにて証明書ファイルを変更する

(2-1) 念のため、改修するファイルのバックアップを取得する

ESXi上では、
サーバー証明書ファイル : rui.crt
サーバー証明書鍵ファイル: rui.key

# cd /etc/vmware/ssl
# mv rui.crt rui.crt.bak

# vi rui.crt
   (1-2)で取得したサーバー証明書ファイル(esxi.example.jp.pem)を貼り付け
   (1-3)で取得した中間CA証明書を貼り付け
   貼り付け順番は、サーバー証明書、中間CA証明書の順


ex) ESXi上にファイルとして保存した場合、

   サーバー証明書:/tmp/esxi.example.jp.pem
   中間CA証明書 :/tmp/cacert.pem

   [ESXi] # cat /tmp/esxi.example.jp.pem /tmp/cacert.pem > /etc/vmware/ssl/rui.crt


(2-2) プロセス再起動と変更内容をシステム ディスクに保存操作を行う。

# /etc/init.d/hostd restart
# /etc/init.d/vpxa restart
# /sbin/auto-backup.sh

※ 当環境では、OS再起動を行わずにプロセス再起動で対応しているが、
    正規手順は、ESXiの再起動を行う事になっているので、あくまで参考程度とすること。

ESXi Shell からのデフォルトの証明書とキーの置き換え
https://docs.vmware.com/jp/VMware-vSphere/6.7/com.vmware.vsphere.security.doc/GUID-A261E6D8-03E4-48ED-ADB6-473C2DAAB7AD.html

(3) 掃除

[PCA] # rm /tmp/esxi.example.jp.key
        # rm /tmp/esxi.example.jp.csr
        # rm /tmp/esxi.example.jp.pem

        ※ 証明書データをコピペせずに、ESXi上にファイル転送(保存)した場合は、一時保存した(不要な)ファイルを削除すること

2022-09-16 10:24
netstaff

ntp (ntp.conf) でListen Interfaceを設定する

複数NICを使用してアクセルコントールを行っていた場合に、
利用するI/Fのみlistenするように設定したい場合がある。

【/etc/ntp.conf】

interface ignore wildcard
interface listen lo
interface listen eth0

Raspberry Pi OS (Legacy) 5.10.103 では、
「interface listen lo」を外しても、loopback I/Fで123/UDPがlistenされます。
ただ、以前に、「eth0」のみListenさせて「lo」はlistenさせない設定をした場合に、
  # ntp -q
で同期状況をチェックしていたが、いつまで経っても同期しなかった経験あり

IPv4のみListenさせたい場合などは、起動オプションで "-4" を指定する。
RasPI OS だと、/etc/default/ntp で設定する

 

2022-09-20 16:30
netstaff

debian10 IPv4/IPv6 Dual-Stack環境でDNSレスポンスが待たされる現象について

*** この記事は、検証中の結果に対するものです。
*** 必ずしも、この記事の通りに設定しても解決しないかもしれません

【NW環境】
・ NTTフレッツ 光ネクスト 回線
・ ONU/ホームゲートウェイ -> 家庭向けBBルーター -> プロキシサーバー(debian10)
・ 家庭向けBBルーターは、HGWよりIPv6が割当され、DS-Lite接続されている。

【クライアント/サーバー環境】
・ debian10 + squid インストール
・ プロキシサーバー(debian10)にて、BBルーターLAN側のIPv4とIPv6がeth0に割り当てられている。

enx0123456789ab: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 01:23:45:67:89:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global enx0123456789ab
        valid_lft forever preferred_lft forever
    inet6 2409:10:****:0:0323:45ff:fe67:89ab/64 scope global dynamic mngtmpaddr
        valid_lft 86399sec preferred_lft 14399sec
    inet6 fe80::0323:45ff:fe67:89ab/64 scope link
        valid_lft forever preferred_lft forever

IPv4 GW: default via 192.168.0.1 dev enx0123456789ab onlink
ipv6 GW: default via fe80::cfef:01ff:fe23:4567 dev enx0123456789ab proto ra metric 1024 expires 104sec hoplimit 64 pref medium

・ resolv.confは、
nameserver 8.8.8.8
nameserver 8.8.4.4

【最初におかしいと気づいたこと】
別クライアントPCから当該プロキシサーバー経由で、amazon.co.jp ページを閲覧。ページ表示完了まで、30秒以上かかっている。
あまりにも表示完了するまで時間がかかりすぎ。

【調査開始】

(現象1)

プロキシサーバーへSSH。
$ wget "https://www.google.co.jp"
   www.google.co.jp (www.google.co.jp) をDNSに問いあわせています...
で、5秒程度DNS解決に時間がかかっている。

速攻で再度実行しても5秒程度待たされる。

(現象2)

Nagiosで監視項目に入れる予定だったので、以下の監視サーバー(別の端末)コマンドを実行。
$ cd /usr/lib/nagios/plugins
$ ./check_http -I 192.168.0.100 -t 20 -p 3128 -u https://www.google.co.jp/ -H www.google.co.jp -S -j CONNECT
   HTTP OK: HTTP/1.1 200 OK - 15102 bytes in 10.255 second response time |time=10.254999s;;;0.000000 size=15102B;;;0
と、チェックに10秒かかっている。

速攻で再度実行すると、
$ ./check_http -I 192.168.0.100 -t 20 -p 3128 -u https://www.google.co.jp/ -H www.google.co.jp -S -j CONNECT
   HTTP OK: HTTP/1.1 200 OK - 15129 bytes in 0.223 second response time |time=0.222529s;;;0.000000 size=15129B;;;0
0.2秒でレスポンスがある。

10数秒後に再実行すると、またもや10秒ほど時間がかかる。

(現象3)

プロキシサーバーへSSH。
$ dig a /www.google.co.jp

$ dig a /www.google.co.jp @8.8.8.8
としても、即解決する。

Windowsでも一昔前から起きているIPv6絡みのDNSレスポンス問題のようだ。
IPv6のNWは無いのに、WindowsのIPv6がデフォ有効になっていて、DNS IPv6解決(タイムアウト)→IPv4解決の動きになるので、
タイムアウト時間待たされるというもの。
でも、今回はIPv6/IPv4のDual-Stack状態なので、DNS IPv6でも即解決するはずだから、問題無いはず・・・と思っていたのだが。
  → この時の /etc/resolv/confは、
      nameserver 2001:4860:4860::8888
      nameserver 2001:4860:4860::8844
      nameserver 8.8.8.8

【よくある解決方法】

Windowsでこの問題が起きた時には、IPv6を無効化する方法が広まった。
また、LinuxでもOS上からIPv6を無効化する動きが多かった。

現在は、 /etc/sysctl.confに
net.ipv6.conf.all.disable_ipv6 = 1
を追加して再起動が有名。

当時IPv6の環境そのもの整っていないので、(IPv6が)使えないから、IPv6=OFF にするという判断だった。
今回の事象も試しに、IPv6を無効化すると、wgetテストは即反応を示した。(実際のプロキシ経由のhttpGetはしていない)

【IPv6有効状態で解決する方法は?】

結論からすると、まだ解決に至っていない。
他の方はこのような問題に直面していないのだろうか・・・。
まだ、「これだ!」という情報源にたどり着いていない状況である。

とある記事では、
squid.confで、
「dns_v4_first on」
を使って解決に至った記事もあるが、当該環境では解決に至っていない。

【現在エージング中】

この方法が解決方法なのか分からないし、環境に依存しそうなので「テスト中」というステータスである事に留意してほしい。

著者の環境で行っている設定は
squid.confで、
「dns_nameservers 2001:4860:4860::8888 8.8.8.8」
googleの代替DNSは、現段階では入れていない。
googleのPublicDNSは、かなり有名なのでDownしないだろう(クラスタ組んでるのでは?)と・・・勝手に思っている。

この設定を入れてから1時間経過したが、監視サーバー(Nagios)、タイムアウト10秒設定でも異常検知していない。

2022-09-25 14:10
netstaff

Azure RockyLinuxを初期構築直後、sshログインできない

Azureの仮想マシン構築時に、RockyLinux8を入れたつもりが、RockyLinux9でした。
※ 色々試した訳ではないので、Microsoft側のOSイメージのリンクミスなのか、画像の表示ミスなのかは不明です

※ 2022/10/13 21:40(JST)現在、イメージは正しく差し変わりました。
※ やはり、RockyLinux8で動かしたいと思ったので、再度イメージ確認していたところ、イメージ選択表示文言が変わっていたので、
    再インストールしてみたところ、RockyLinux8になりました!

RockyLinux9のイメージが変更されているか(RSA鍵でログインできるのか)未確認の為、
一応、以下の情報は残しておきます。


出来る限り安価にする為に、こちらを選択しました。

インストール完了すると、


RockyLinux8を選択したのに、Linux (Rocky 9.0) と表示されている。
しかも、TeratermでSSHログイン(鍵認証)を行ってもログイン出来ない!!

【状況】

Teratermから鍵認証(仮想マシン構築時に作成)を使ってSSHログイン操作を行った。
IDとパスフレーズ(なし)と鍵ファイルを指定してログインしようとしても、ログインが拒否される。
再度、鍵ファイルを指定しなおしたり、TeraTermを終了して立ち上がなおし、再度ログイン操作を行うも、
ログインが拒否される。
初期構築後に1回もリモートログイン出来ない事態となった。

【ログイン出来ないと調べようがないので・・・】

このような状況に陥った方、結果的に方法はいくつかあります。

(方法1) 仮想まシンを再構築する
鍵認証で入れないのなら、「認証の種類」で「パスワード」を選択して再構築する。


(方法2) RSAアルゴリズム以外の鍵を作成して、Azureの管理画面で、「SSH 公開キーのリセット」で置換する


(方法3) Azureの管理画面で、パスワードでSSHログイン出来るように変更する。
-「構成のみのリセット」を行い、「パスワードのリセット」を行う

(方法4) Teratermではなく、別のSSHクライアントソフトを利用する。
- 現段階(2022/10/09時点)での私の認識では、TeraTerm(4.106)は rsa-sha2-256/512に対応していないからではないかと想定
- Linux(Rocky8)から、Azureの仮想マシンにログインしたらログインできました。

Azureの管理画面で「パスワードのリセット」でパスワードを設定し、Azure管理画面のシリアルコンソールからログインして設定変更する方法もあります。

【ログインしてみたら・・・】

中身は、RockyLinux9になってました。

SSHログイン出来ない理由として、/var/log/secureには、
  userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
と出てて、ググりました。

ssh-rsaが無効になるから、鍵ファイルの変更など行わないといけないよ~みたいな記事がHit。
ただ、OpenSSHのバージョンは、openssh-server-8.7p1-8.el9
鍵アルゴリズム ssh-rsaが使用出来なくなるのは、openssh 8.8かららしい。

OpenSSH Release Notes
https://www.openssh.com/releasenotes.html 
OpenSSH 8.8/8.8p1 (2021-09-26) の箇所

一応、openssh-server-8.7p1-8.el9 の Changeログを見るも、ssh-rsaには触れていない。
※ 最新は、openssh-server-8.7p1-10。 Changeログは8.7p1-8までを確認
https://rockylinux.pkgs.org/9/rockylinux-baseos-x86_64/openssh-8.7p1-10.el9_0.x86_64.rpm.html

【結論 - TeraTermでRSA鍵を使ってログインしたい】

色々な記事を参考に試行錯誤してみたが、以下の設定を行う事でTeraTerm(4.106)から接続できるようになった。

# update-crypto-policies --show
DEFAULT
→ DEFAULTを確認

# update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

# update-crypto-policies --show
LEGACY
→ LEGACYになった事を確認

# shutdown -r now
→ 再起動する

これでOS起動すると、TeraTerm(4.106)から、仮想マシン構築時に作成した鍵ファイルでログイン出来るようになった。

【セキュリティ的には・・・】

あくまで暫定対応で、セキュリティが低下している状態だと思う。
update-crypto-policies コマンド 「DEFAULT」-> 「LEGACY」に変更する前後で、
# sshd -T | grep -i "pubkeyacceptedalgorithms"
を見たら、「LEGACY」では、
ssh-rsa
ssh-rsa-cert-v01@openssh.com
が増えている。だから、TeraTermでRSA鍵(sha1?)でログイン出来るようになったと思う。

TeraTermがrsa-sha2-256/512に対応すれば、update-crypto-policiesの設定を元に戻してログイン可否を確認しようと思う。

【最後に】

RPM openssh-server-8.7p1-8.el9.x86_64 だったが、(デフォルトでは)既にssh-rsaが無効になっているように思われます。
本家では、8.8からとなっていますが、RPMでは往々にして既に対策済みだったりするので、一苦労しました。
ちなみにubuntuとかだと、sshd_configに「PubkeyAcceptedAlgorithms=+ssh-rsa」を入れるようです。
(最初は)RockyLinux9で、「PubkeyAcceptedAlgorithms=+ssh-rsa」を入れたのですが反映されません(SSHログイン出来ません)でした。
その後、update-crypto-policiesコマンドで解決

【参考サイト】
RedHat Customer Potal
https://access.redhat.com/discussions/5251241

OpenSSH
https://www.openssh.com/txt/release-8.8

WebARENA お客さまサポート
https://help.arena.ne.jp/hc/ja/articles/7134065589271-Tera-Term%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%B8SSH%E6%8E%A5%E7%B6%9A-%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93-

TeraTerm
https://ja.osdn.net/projects/ttssh2/ticket/36109

その他、個人のブログサイト等

 

2022-10-13 22:07
netstaff

Rocky Linux8.6 にSAS2008を認識させる

【環境】

Linux ******.chovits.net 4.18.0-348.23.1.el8_5.x86_64
RAID Card: MegaRAID SAS 9240-8i (SAS2008)

OS部分のHDD(SSD)は、マザーボードSATA接続
その他データ領域として、マザーボード(PCI-E) => RAIDカード(SAS2008) => HDD 接続。

RAIDカードが認識しなくても、OSは立ち上がる構成
※ RAID未認識状態では、/etc/fstab でmountしているので、Diskが読み取れずEmergencyモードで立ち上がる

【更新時の状況】

(現在)   Kernel 4.18.0-348.23.1.el8_5
(1つ前) Kernel 4.18.0-348.20.1.el8_5
Kernel 4.18.0-348.20.1.el8_5 -> 4.18.0-348.23.1.el8_5 のUpdateでは、問題なくRAIDカード(SAS2008)を認識していた。

(最新) Kernelが、4.18.0-372.26.1.el8_6
リビルドバージョンが、 348系から372系と変わるので、RAIDカード認識しなくなるだろうなぁと思いながらもUpdate実施。
まあ期待通りではあるのだがRAIDカードが認識しなくなり、Emergencyモードで立ち上がった。やっぱりか!

Boot時に、1つ前のKernel 4.18.0-348.23.1.el8_5 を指定して立ち上げれば、(kmod-mpt3sasは更新していないので)SAS2008は認識される。

【前回のSAS2008認識作業で】

前回の記事、「Rocky Linux8.5 にSAS2008を認識させる」 https://www.chovits.jp/phpmyfaq/index.php?action=faq&cat=1&id=8
にて、elrepoのkmod-mpt3sasでも認識するのでは? とのコメントを書いたので、
今回、kmod-mpt3sas-39.100.00.00-1.el8_6.elrepo.x86_64 (現時点最新)にUpdateし、再起動を行うが、
Kernel 4.18.0-372.26.1.el8_6.x86_64 では、SAS2008は認識しなかった。

【復旧作業 - SAS2008を再認識させる】

さて。
見事にSAS2008が認識されなくなりました。
現時点のKernelは、4.18.0-372.26.1.el8_6
ドライバーは、kmod-mpt3sas-39.100.00.00-1.el8_6.elrepo.x86_64

前回の記事を参考に、kmod-mpt3sasのSAS2008組み込み版を探す。
kmod-mpt3sas-4.18.0~372.9.1-2.el8 https://cbs.centos.org/koji/buildinfo?buildID=40841

Description This package provides the LSI MPT Fusion SAS 3.0 Device (mpt3sas) driver. Compared to the in-kernel driver this driver re-enables support for deprecated mpt2sas adapters: - 0x1000:0x0064: LSI SAS2116_1 - 0x1000:0x0065: LSI SAS2116_2 - 0x1000:0x0070: LSI SAS2004 - 0x1000:0x0072: LSI SAS2008 - 0x1000:0x0074: LSI SAS2108_1 - 0x1000:0x0076: LSI SAS2108_2 - 0x1000:0x0077: LSI SAS2108_3 - 0x1000:0x007E: LSI SSS6200

こちらから、x86_64 RPM https://cbs.centos.org/kojifiles/packages/kmod-mpt3sas/4.18.0~372.9.1/2.el8/x86_64/kmod-mpt3sas-4.18.0~372.9.1-2.el8.x86_64.rpmをダウンロード。
有志の方、ありがとうございます。

Emergencyモードで立ち上がっており、ネットワークが認識されていない状態なので、PCでダウンロード後にUSBメモリーに保存。
USBメモリーを実筐体に挿す。/dev/sde1 で認識された。

# mount /dev/sde1 /mnt
# cp /mnt/kmod-mpt3sas-4.18.0~372.9.1-2.el8.x86_64.rpm /tmp
# umount /mnt

# dnf install /tmp/kmod-mpt3sas-4.18.0~372.9.1-2.el8.x86_64.rpm
# rm /tmp/kmod-mpt3sas-4.18.0~372.9.1-2.el8.x86_64.rpm

ダメ元で入れた、kmod-mpt3sas-39.100.00.00-1.el8_6.elrepo.x86_64がRemoveされ、
kmod-mpt3sas-4.18.0~372.9.1-2.el8.x86_64がインストールされる

後は、OS再起動して、無事 SAS2008を再認識させる事が出来た。

2022-10-11 19:05
netstaff

Redhat系Linuxで、レポジトリーに無いプログラムやperlモジュールのRPMを作成する

【環境】

RockyLinux 9.0

【開発機を準備】

最近は、仮想OSがPCでも使える(VirtualBoxとか)ので便利。
RPMをリビルドする際は、かなり多くのRPMを入れる。RPM化が済むとRPM化する為にインストールしたRPMは、通常稼働中は使われないので、
リビルドマシンを準備したほうが、色々とメリットが大きい。

【リビルド時に必要なRPMをインストール】

準備として
・ リビルドする為のディレクトリツリーの作成 (rpmdev-setuptreeコマンドを利用)
・ ソースやソースRPMからRPMを作成するコマンド (rpmbuild)
・ perlモジュールからRPMを作成するコマンド (cpanflute2)

# dnf install rpmdevtools yum-utils gcc perl-CPAN

cpanflute2 (RPM-Specfile)は、RPMが無いのでCPANからインストール

# cpan
cpan[1]> make RPM::Specfile
/usr/bin/make -- OK OKが表示されたので、
cpan[2]> install RPM::Specfile
cpan[3]> exit

【リビルドする】

同じディストリビューションのLinux。今回で言えば、Redhat系のソースRPMであれば、SPECファイルをいじる必要は、ほとんどありません。
※ パッケージ情報(rpm -qip xxxxx.rpm で出てくる情報)を書き換える必要がある場合などは、SPECファイルからRPMを作成します。
※  この記事では一撃Buildを行っていますが、"Release" 番号とか、"Source RPM" の情報は変更したほうが良いかも・・・とは思いますが。

今回の例では、CentOS7の「logcheck-1.3.15-2.el7.src.rpm」ソースRPMを持ってきてリビルドします。
※ 著者が利用しているサイト
RPMfind https://www.rpmfind.net/
RockyLinux pkgs.org https://rockylinux.pkgs.org/
meta::cpan https://metacpan.org/
を利用しています。

(1) ビルドツリーを作成する

一般ユーザで、
[開発機] $ cd ~
[開発機] $ rpmdev-setuptree
これで、rebuildディレクトリ (ビルドツリー)が出来上がる
→ 以前は、このmkdirでディレクリーを作ったり、変数を設定したり面倒だったが、rpmdev-setuptreeで完結

(2) リビルド

[ソースRPMから]
[開発機] $ cd ~/rpmbuild/SRPMS
[開発機] $ wget "https://download.fedoraproject.org/pub/epel/7/SRPMS/Packages/l/logcheck-1.3.15-2.el7.src.rpm"
[開発機] $ cd ~
[開発機] $ rpmbuild --rebuild --clean rpmbuild/SRPMS/logcheck-1.3.15-2.el7.src.rpm
             error: Failed build dependencies:
             docbook-utils is needed by logcheck-1.3.15-2.el9.noarch

はい。後はひたすら依存関係に必要なパッケージを追い求める。レポジトリーにあれば、ラッキーである。
一般ユーザとrootユーザーにスイッチするので、コマンド行の # と $ の違いでユーザーが違う事を留意頂きたい。

[開発機] # dnf --enablerepo=crb install docbook-utils
[開発機] $ rpmbuild --rebuild --clean rpmbuild/SRPMS/logcheck-1.3.15-2.el7.src.rpm

画面に実行ログが出てきて、リビルド成功すれば、rpmbuild/RPMS配下にRPMが出来上がっている。

検証機に作成したRPMをファイル転送して、
[検証機] # dnf install logcheck-1.3.15-2.el9.noarch.rpm
           エラー:
             問題: 競合するリクエスト
             - lockfile-progs が提供されません logcheck-1.3.15-2.el9.noarch に必要です
             - perl-mime-construct が提供されません logcheck-1.3.15-2.el9.noarch に必要です
               (インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

リビルド中には依存関係のエラーが出なくても、実際にRPMインストール時にエラーが出た。
やはり、レポジトリーに見つからないので、lockfile-progs と perl-mime-construct も作ることになる。

[開発機] $ cd ~/rpmbuild/SRPMS
[開発機] $ wget "https://download-ib01.fedoraproject.org/pub/epel/8/Everything/SRPMS/Packages/l/lockfile-progs-0.1.17-13.el8.src.rpm"
[開発機] $ cd ~
[開発機] $ rpmbuild --rebuild --clean rpmbuild/SRPMS/logcheck-1.3.15-2.el7.src.rpm
             error: Failed build dependencies:
                     liblockfile-devel is needed by lockfile-progs-0.1.17-13.el9.x86_64
[開発機] # dnf install --enablerepo=crb liblockfile-devel.x86_64
[開発機] $ rpmbuild --rebuild --clean rpmbuild/SRPMS/lockfile-progs-0.1.17-13.el8.src.rpm

[perlモジュールのRPM化]

[開発機] $ cd ~/rpmbuild/SOURCES
[開発機] $ wget "https://cpan.metacpan.org/authors/id/R/RO/ROSCH/mime-construct-1.11.tar.gz"
[開発機] $ cpanflute2 --buildall rpmbuild/SOURCES/mime-construct-1.11.tar.gz
             Can't locate YAML.pm in @INC (you may need to install the YAML module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /usr/local/bin/cpanflute2 line 17.
             BEGIN failed--compilation aborted at /usr/local/bin/cpanflute2 line 17.
[開発機] # dnf install perl-YAML
[開発機] $ cpanflute2 --buildall rpmbuild/SOURCES/mime-construct-1.11.tar.gz

検証機に作成したRPMをファイル転送して、
[検証機] # dnf install logcheck-1.3.15-2.el9.noarch.rpm perl-mime-construct-1.11-8.noarch.rpm lockfile-progs-0.1.17-13.el9.x86_64.rpm

ようやく検証機で、作成した logcheck RPMがインストールできた。

【本番機へインストール】

検証機でインストール出来たので、本番機へもインストール。
※ コマンドは検証機にインストールした手順と同じなので割愛

【最後に】

PerlモジュールもソースRPMからRPMを作成する方法もあるが、私が試した際には依存関係の問題で上手くRPM化出来なかった。
※ SPECファイルを見ても、依存するPerlモジュールはインストールされているのに、rpmbuildを実行すると、依存するPerlモジュールが無いと表示され解決出来なかった。

logcheckをソースファイルからRPM化すれば、こんなに手間では無かったかもしれない。
ただ、CentOS7の際に使っていた logcheck RPM内にはフィルター設定のレシピファイルが多数収録されているので、今回 logcheckをソースRPMからリビルドしたかった。
(ソースからビルドすると、レシピファイルは入っていなかった)

2022-10-13 16:51
netstaff

SSHのポートフォワード機能を使って、インターネット(クラウド)上にあるDBとレプリケーションする

インターネット(クラウド)上のサーバー間でセキュリティを考慮して通信させたい

【シチュエーション】

インターネット(クラウド)上のサーバー間で(バックエンドNW:裏LAN を使わずに)
・ DBのレプリケーションしたい
・ バックアップサーバーへ日々、バックアップを行いたい
などなど、インターネット上に(素で)3306/TCPや873/TCPを使わない為には・・・

【方法】

Tunnelを張る。ぱっと思いつくアプリは
・ OpenVPN
・ stunnel
・ OpenSSH

【(比較的簡単な)OpenSSHを使ってトンネルを張る】

最近はSSHがデフォでインストールされているし、追加インストール無で済む。
しかし、root権限レベルの設定変更は必要だが、googleと設定方法はたくさんHitするし、
比較的、簡単に設定できると思う。
googleなら、「SSH」「ポートフォワーディング」

【設定を行うにあたり】

OpenSSHの本来の使われ方は、対象機器に(Secureに)ログインする為に利用。
ログイン後は、対象機器で色々なコマンドを(権限の範囲で)実行可能。

〇 対象機器の管理者=SSHログイン利用者
普通に対象機器のアカウント/パスワードを作成すれば良い。

リモート端末上では、MySQL TCP/IP Socket 127.0.0.1:3306 がListen状態の場合、
トンネル ローカル端末(127.0.0.1:33306)→リモート端末(127.0.0.1:3306) フォワード設定

ちょっと難しいですが、
SSH接続(通信方向: ローカル端末 -> リモート端末
トンネル通信方向: ローカル端末 -> リモート端末
トンネル通信方向で、設定が微妙に異なりますので注意が必要です。

[Windows機でTeratermなら]

① 事前設定
    Teratermのメニューバー [設定] -> [SSH転送] -> [追加]
     (1) ローカルのポートをチェック。「33306」を入力
     (2) リッスンは未入力 (未入力だと127.0.0.1)
     (3) リモート側ホスト 「127.0.0.1」を入力
     (4) ポート 「3306」を入力
     [OK] -> [OK] で、設定完了

② 対象機器にログインする
    Teratermのメニューバー [ファイル] -> [新しい接続]
    ホスト 「203.0.113.1 ポート 「22」
    でSSHログインする

③ ローカル端末のTCP/IPソケット確認
    コマンドプロンプトを開いて、「netstat -ant」とかで見ると、
    ローカル端末で、33306/TCP ポートがListenされているはず。

④ ポートフォワード(トンネル)で接続
    C:\>mysql -h 127.0.0.1 -P 33306 -u foo -p'takoika'
    すると、リモート端末(172.16.20.1)で動作しているMySQLへ接続できる。

[Linux端末なら]
$ ssh -L 33306:127.0.0.1:3306 operator001@203.0.113.1
        ~~~~~~~~~~~~~~~
        LocalPort:リモートIP:リモートポート

※ ポートフォワードするローカル端末側のIP(リッスンIP)は、127.0.0.1 としてください。
もしプライベートIPアドレス 192.168.1.1 を設定しまうと、
Bさんが、Aさんの端末を踏み台にして、172.16.20.1:3306 (MySQL)へ接続できてしまうかもしれません。
→ Windows端末だとWindowsファイアーウォール設定や、MySQLの接続許可ホスト設定など通信拒否されるかもしれませんが。

teratermのSSH転送設定 「リモートサーバーのポート(ラジオボタン)」とか、ssh の -R オプションがあるが、
トンネルの通信を逆方向(リモート端末->ローカル端末)にするものだが、滅多に使わないので忘れて良い。
=> 逆方向も出来たよな~ぐらい覚えておいて、使う必要が出来たら、改めて調べたら良いレベル。
=> 著者は、業務上で-R は使った事がない。

〇 対象機器の管理者ではない、SSHログイン利用者
   結局の話、どこまで信用できる?という話になってしまいます。

① SSHのポートフォワードだけやりたい。(コマンド実行しない)

    sshd_configを編集しないといけないので、設定はサーバー管理者が行う事になるだろう。
    ログイン不要(/bin/bashは必要ない)なので、sshd_config に

Match User user001
AllowTCPForwarding yes
ChrootDirectory /root/dummylogin/user001

    とか書いておいて、公開鍵認証するなら、
    /root/dummylogin/user001/.ssh/authorized_keys
    設定しておく。

    利用者には、ポートフォワード利用時に、sshの "-N" オプションを付けて接続を行ってもらう。

    ※ ずっと張りっぱなしなら、'autossh' が便利。
        万一セッションが切断されたら、autosshが再接続してくれる。

② SSHログインしたい場合

[方法1] rbashを使う。
[方法2] CHROOT環境を構築する。(sshd_config ChrootDirectoryを使う)

どちらの方法も、一長一短です。
結局のところ、どこまで「SSHログイン者を信用できるか」というレベルになります。
rbashの設定は比較的設定が簡単ですが、正しく設定しないと期待した効果が得られないかもしれません。
chroot環境を構築するのは、手間がかかります。

著者の場合は、設定に手間はかかるけど、chroot環境を作って設定しています。
手間がかかる部分(chroot環境の構築)は、自作スクリプトで簡易化しています。
自作スクリプトは、別の記事で公開予定です。

2022-10-24 07:44
netstaff

chroot環境を構築したい

【きっかけ】

データ同期の際、rsync+SSHを利用。自動化を行う為に公開鍵認証方式(パスフレーズなし)で行っているが、
セキュリティ的に心配。万一の場合でも実行可能コマンドが制限されている、chroot環境を構築してみよう。

【手順】

chroot環境を作るのは、意外と手間な作業の為、ネット上で紹介されていたスクリプトを改修して、簡易化を行った。

(0) chroot環境構築スクリプトの入手

 https://www.chovits.jp/git/?p=chroot_mk.git;a=summary

「shortlog」 一番上(最新)の[snapshot]をクリックするか、
 https://www.chovits.jp/git/?p=chroot_mk.git;a=tree
から、chroot.sh、useradd.sh を入手。

[スクリプト作成環境]
RockyLinux8 X86_84
おそらく、同系統のOS(RHEL8やCentOS8)でも動作すると思う。

(1) SSHログイン(chroot環境で利用する)アカウントを作成。(例:user001)

# useradd -u xxxx -g xxxx user001

(2) 公開鍵を配置

※ 公開鍵/秘密鍵はログイン元の端末で作成済
# su - user001
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi authorized_keys
  (公開鍵をコピペ)

(3) chroot構築スクリプト実行

# cd ~
# /root/chroot.sh
(デフォは、/chrootに出来る)

(4) /chroot配下(chroot環境)にアカウント情報を反映するスクリプト実行

# cd ~
# /root/useradd.sh user001

(5) sshd_configを修正する

cd /etc/ssh
# cp -pi sshd_config ~/sshd_config.bkup.YYYYMMDD
# vi sshd_config

Match User user001
ChrootDirectory /chroot/home/user001

(6) sshdをプロセス再起動

# systemctl restart sshd

(7) SSHログイン可能か確認

chroot環境にログインしているか確認
※ chroot環境内で必要なコマンドは、chroot.shを修正。
    既にchroot環境を構築済みでも、必要コマンド追記後に再実行OK。
    必要コマンドを除外した場合は、chroot環境から削除されないので手動で削除すること。

【最後に】

chroot環境が必要となる機会はあまり無いと思う。

sftpだけであれば、sshd_config 「ChrootDirectory /home/user001」を設定すれば、
/bin/bash などのshellが/home/user001配下に存在しなくても、ファイル転送できるらしい。

(参考サイト)

ChrootDirectoryを使ってsshでchroot環境の作成
https://lab.sonicmoov.com/development/server/chrootdirectory-ssh-chroot/

2022-10-24 08:58
netstaff

OpenSSH(sshd_config)のコンフィグチェック

sshd_configを編集後の、コンフィグチェック(構文チェック)

# sshd -t

テストモード。

パラメータのスペルミス等がある場合は、エラー出力される。

# sshd -T

拡張テストモード。

sshd_config編集前であれば、有効化されているパラーメータ一覧が表示される。
sshd_config編集後(プロセス再起動前)に、”sshd -T” にて設定したパラメータをチェックして、
問題なければ、プロセス再起動を行う手順を取ると良い。

また、sshd_configの未設定パラメータも表示されるので、明示的に設定していないパラメータの
デフォルト値を確認したりする場合に有用である

 

 

2022-10-25 09:46
netstaff

Rocky8日本語環境でfail2ban利用時の通知メールで文字化けを解消する

著者はRocky8にて、OSロケールを日本語に設定(LANG=ja_JP.utf8)しており、
fail2banを動作させている。

[状況]

以下の設定/条件において、通知メールのメール本文が文字化けを起こす
・fail2banの設定で、ban確定IPアドレスのwhois結果をメール通知設定
(action = %(action_mw)s)
・banIPが日本(JPNIC)管理のIPアドレスの場合

fail2banの通知メール(テンプレート)は、英語表記だが、
日本(JPRS database)のwhoisサーバーで検索すると、whois結果は日本語で表示される
結果、メール本文(whois結果の部分)が文字化けを起こす

[対処方法]

日本(JPRS database)のwhoisサーバーで検索時は、/e 引数を追加すれば結果は英語表記となるが、
/e 引数が世界標準かは未調査。
日本人としては、せっかく日本語表記となっているので、通知メール(テンプレート)側で対応した。

・「Content-Type: text/plain; charset="UTF-8"」を追記

action.d/sendmail-whois.conf

actionban = printf %%b "Subject: [Fail2Ban] : banned from
Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
From: <>
To:
Content-Type: text/plain; charset=\"UTF-8\"
\n
Hi,\n
The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here is more information about :\n
`%(_whois_command)s`\n
Regards,\n
Fail2Ban" |

 

2023-02-02 21:08
netstaff

OrangePI5(Armbian)でOS再起動後に、OSが立ち上がらない

【環境】

OrangePI5 (MicroSDへインストール)
OS:Armbian 23.02.0-trunk.0112 Bullseye
ベース: Armbian_23.02.0-trunk.0112_Orangepi5_bullseye_legacy_5.10.110_minimal.img.xz
OS連続稼働(約12日間程度)中であった。

【状況】

apt update/upgradeにて、パッケージをUpdate。
OS再起動後に、OSが起動しなくなった。

  • ディスプレイ接続。OrangePi5電源ONしても、HDMI信号無状態で画面は真っ黒
  • OrangePI上のLEDは赤点灯のみ。
     → 正常起動時は、赤LED点灯。赤LED横の緑LEDが点滅状態となる 

    →つまり、MicroSDカードに読込にいっていない模様。

  • 別端末のLinux(RockyLinux)に、当該のMicroSDカードをUSBカードリーダー挿して、USBソケットに挿す。
    → MicroSDカード上のファイルシステムは、mount出来て、lsでファイル一覧が出る事を確認。

おそらく、何らかの理由でMicroSDのMBR領域が破損しており、再起動タイミングで発症。
boot出来なくなっていたものと思われる。

MicroSDカードは年末に購入。年明けに開封して使用しており、構築数日+連続稼働(12日)で総使用時間は、24HX12日+α = 300時間程度。
故障するには早すぎる印象。

【復旧手順】

データ領域は読み込めるようなので、MicroSDカードをバックアップして、
新MicroSDカードへリストアする方針で進める。
作業端末として、WindowsPCとLinuxPCで作業する。

最初は、MicroSDをdump後に、新品メディアにrestore予定だったが、dumpコマンドの進捗速度で、
進捗表示に 残り10時間と出た時点で強制終了。こんなに待ってられない。

(1) 情報取得

故障MicroSDカード(USBカードリーダー)をLinux機へ挿し込む

# fdisk -l /dev/sdj

ディスク /dev/sdj: 14.9 GiB, 15938355200 バイト, 31129600 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 7B1D8540-A4BF-FA4B-AEE5-9CE0FF2DDF0C

デバイス 開始位置 終了位置 セクタ サイズ タイプ
/dev/sdj1 32768 557055 524288 256M Linux 拡張起動
/dev/sdj2 557056 30801920 30244865 14.4G Linux ファイルシステム

# blkid -o list /dev/sdj1

device fs_type label          mount point              UUID
---------------------------------------------------------------------------------------------
/dev/sdj1 ext4 armbi_boot (マウントされていません) 4df504c6-1128-4e4d-aae9-012e346055d7

 # blkid -o list /dev/sdj2

device fs_type label          mount point              UUID
---------------------------------------------------------------------------------------------
/dev/sdj2 ext4 armbi_root (マウントされていません) 9c0b2228-0de6-4207-b1d5-6b655d76f817

(2) バックアップ

# dd if=/dev/sdj of=/root/orangepi.img status=progress
完了したら、MicroSDカードを抜いておく。

(3) 新MicroSDカードへイメージデータを書込み

[Windows機で操作]
当初OrangePI5インストール時に使用したイメージデータ
Armbian_23.02.0-trunk.0112_Orangepi5_bullseye_legacy_5.10.110_minimal.img.xz
を解凍し、「Win32DiskImager」で新MicroSDカードへ書込み。

(4) OrangePI5へ新MicroSDカードを挿し込み起動

一度起動して、初期設定(パスワードとロケール設定等)のみ終わらせる。
プロンプトが出たら、shutdownコマンドで終了
→ ファイルシステムの自動拡張を終わらせるのが目的

(5) 新MicroSDカード(USBカードリーダー)をLinux機へ挿し込む

新MicroSDカードのファイルシステムをフォーマット
# mkfs.ext4 -L armbi_boot /dev/sdj1
# mkfs.ext4 -L armbi_root /dev/sdj2

→ (3)の操作は、MBR領域とパテーション作成が目的で、ファイルシステム内のデータは不要。
データは、全てバックアップデータから戻す。

(6) 新MicroSDカード 情報取得

# fdisk -l /dev/sdj

ディスク /dev/sdj: 29.18 GiB, 31331450880 bytes, 61194240 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 118f5c48-eacf-317b-cfd8-c7fd542c51b3

デバイス 開始位置 終了位置 セクタ サイズ タイプ
/dev/sdj1 32768 557055 524288 256M Linux 拡張起動
/dev/sdj2 557056 60555264 59998209 28.6G Linux ファイルシステム

# blkid -o list /dev/sdj1

device fs_type label          mount point              UUID
---------------------------------------------------------------------------------------------
/dev/sdj1 ext4 armbi_boot (マウントされていません) 24d9d921-5af7-33b8-a353-2b53fb3be0da

# blkid -o list /dev/sdj2

device fs_type label          mount point              UUID
---------------------------------------------------------------------------------------------
/dev/sdj2 ext4 armbi_root (マウントされていません) 02c288bb-34d8-86bc-3def-ea8f075b676a

(7) バックアップデータ 情報取得

(8)にて、マウント時にoffset値を算出する為に、下記値を利用する。
利用する値は、開始位置の値
1番目パテーション 32768
2番目パテーション 557056

# fdisk -l /root/orangepi.img

ディスク /root/orangepi.img: 14.9 GiB, 15938355200 バイト, 31129600 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 7B1D8540-A4BF-FA4B-AEE5-9CE0FF2DDF0C

デバイス 開始位置 終了位置 セクタ サイズ タイプ
/root/orangepi.img1 32768 557055 524288 256M Linux 拡張起動
/root/orangepi.img2 557056 30801920 30244865 14.4G Linux ファイルシステム

(8) リストア

# mkdir /mnt/{old,new}

〇 1番目のパテーションのリストア
# mount -t ext4 -o loop,offset=$((32768*512)) /root/orangepi.img /mnt/old
   → 32768 は、(7)で取得した値 [/root/orangepi.img1]
# mount /dev/sdj1 /mnt/new
# cd /mnt/old
# rsync -av . /mnt/new/
# cd /mnt/new
# vi armbianEnv.txt
「rootdev=UUID=」行のUUID値を変更。値は、(6)で取得した /dev/sdj2のUUID

verbosity=1
bootlogo=false
overlay_prefix=rockchip-rk3588
fdtfile=rockchip/rk3588s-orangepi-5.dtb
rootdev=UUID=02c288bb-34d8-86bc-3def-ea8f075b676a
rootfstype=ext4

# umount /mnt/new
# umount /mnt/old

〇 2番目のパテーションのリストア
# mount -t ext4 -o loop,offset=$((557056*512)) /root/orangepi.img /mnt/old
   → 557056は、(7)で取得した値 [/root/orangepi.img2]
# mount /dev/sdj2 /mnt/new
# cd /mnt/old
# rsync -av . /mnt/new/
# cd /mnt/new
# vi etc/fstab
mountポイント「/」を (6)で取得した /dev/sdj2のUUID
mountポイント「/boot」を (6)で取得した /dev/sdj1のUUID へ変更

UUID=02c288bb-34d8-86bc-3def-ea8f075b676a / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
UUID=24d9d921-5af7-33b8-a353-2b53fb3be0da /boot ext4 defaults,commit=600,errors=remount-ro 0 2
tmpfs /tmp tmpfs defaults,nosuid 0 0

# umount /mnt/new
# umount /mnt/old

(8) 新MicroSDカードをOrangePiへ挿して起動

【原因は?】

確証はありませんが、思い当たる節があるとすれば「MicroSDカード」

言い訳になるが・・・・
SBC(シングルボードコンピュータ)は、Xwindowを入れなければ、8GBで十分すぎる。
しかし、MicroSDカードも大容量化が進み、(店舗で)売られている最低容量は32GBから。
ネット通販で探せば、8GB/16GBもまだ販売されているが、8GB/16GBの値段と32GBの値段は、
(ノーブランドで)数十円程度だったりする。

だったら・・・と思って、(思いっきり)中華製の安いSDカード(16GB)に手を出したのが敗因かも。

以前は、上海問屋のノーブランドを長年使ってきたが、上海問屋がドスパラに吸収されて
最近は、ノーブランドのMicroSDカードは販売されていない模様。(SANディスクOnly)

中華製の大容量メディア(MicroSDやSSD)は、容量偽装のパチモンが出回っているが、
16GBや32GB程度の容量では大丈夫だろうと、タカをくくっていた。
今回をきっかけに、同メディア(新品)を「h2testw」でチェックしたが容量偽装はない。
「h2testw」の最終結果で表示された値では、Write 約11MB/s Read 約17MBと表示。
一応 Class10なので転送速度は及第点だと思う。

故障したMicroSDのバックアップ中の転送速度が怪しかった(遅い)
ddコマンドで、最初、転送速度2MB/s、1GB程度完了で 1MB/s 5GB程度完了では4MB/s
ddコマンドで転送速度ってこんなに変わるもの? いや、10MB/s出ない時点で怪しいか。
故障メディアは廃棄して、未開封の同製品は完全にテスト用にしないといけない。

 

2023-02-03 08:59
netstaff

RockyLinux (おそらくRH系OSなら・・・)で、dnf レポジトリを日本に限定

dnf update 等を行うと、ダウンロード速度が遅い時がある。
IPアドレスを確認すると、海外のレポジトリサーバーへ接続している場合がある。
ロケーションは日本なので、日本のレポジトリサーバーへ接続して、ダウンロード速度を早くしたい

【RockyLinux】

/etc/yum.repos.d/xxxxx.repo の
mirrorlist=URL の末尾に、&country=JP を追記する

/etc/yum.repos.d/Rocky-BaseOS.repo の場合、

mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever



mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever&country=JP
と追記する

【Fedora】

/etc/yum.repos.d/xxxxx.repo の
mirrorlist=URL の末尾に、&country=JP を追記する

/etc/yum.repos.d/fedora.repo の場合、

metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch




metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch&country=JP

と追記する

著者は、Rocky8 と fedora36 にて確認した。
おそらくCentOSも同じように設定可能だと思われる。

他のRH系ディストリビューションは触った事が無いので未確認。
yum時代は、fastestmirror.conf に「include_only=.jp」を指定していたが、
dnfになってから設定方法が不明だった。

2023-02-16 10:49
netstaff

MySQL テーブルにデータが格納されている状態で、テーブル再作成を余儀なくされた時

【事象】

データが格納されている MySQLのテーブルで、カラムを追加して複合プライマリキーを付与しようとした際、
「ERROR 1068 (42000): Multiple primary key defined」と表示され、付与できない。
(最終的には、付与する必要は無くなったが)
対象のテーブルは、カラムの1つに「auto_increment」を設定している状態。

【やったこと】

いくつか試してみたが、データをバックアップしてからテーブル再作成を行った。
※ カラム追加なので、既存のカラム名変更や型変更等は行っていない

対象のテーブル名は「address_list」

1. テーブル構造の出力

「show create table address_list」で出力。結果をテキストエディタへコピペ。
このcreate table文に、新カラムや型情報を追加。
PRIMARY KEY 行の部分に、新カラム名を追加

2. mysqldump に 「-c」オプションと付けて実行

当初は、
「mysqldump -u dbuser -p -t SampleDB address_list > address_list.sql」 を実行。
-t オプション -> テーブル構造は出力しない
これは、「4. データのリストア」で失敗する。
address_list.sqlを見れば分かるが、
INSERT INTO `address_list` VALUES ・・・
と、カラム名が書き出されていないので、カラムの総数が違うとエラーが吐かれる。

よって、
「mysqldump -u dbuser -p -t -c SampleDB address_list > address_list.sql」 を実行。
-c オプション -> カラム名を出力する
address_list.sqlでは、
INSERT INTO `address_list` (`id`, `ganre_id`, `company_id`, `username`, `address`) VALUES ・・・
と、カラム名が追加された

念のため、
「mysqldump -u dbuser -p SampleDB address_list > address_list.org.sql」
を実行して、元に戻す用データも取得しておく

3. 思い切ってdrop table

「drop table address_list」でテーブル削除
1. で作成した create table文を実行して、テーブル作成。
「desc address_list」でテーブル構造を確認

4. データのリストア

「mysql -u dbuser -p SampleDB < address_list.sql」でデータ復元

【最後に】

そもそも、テーブル作成後にカラム追加するなどという事は、本番環境では稀だと思う。
HDD故障や有事の際のDBバックアップとして、定期的にmysqldumpで取得しているケースが多いと思うが、
今回はテーブル構造を変更してからのデータの戻し作業だったので、カラム名も出力する
mysqldumpの「-c」オプションが役に立った。

2023-03-07 01:12
netstaff

Nagios Plugin check_snmp で、OIDの値が0か1かで異常判定する

Nagiosにてsnmpによる値監視をするにあたり、nagios-plugins 「check_snmp」が用意されている。
ググると、トラフィックの監視事例が上位にHitする。
値が+方向に上昇していくパターンを監視しようというものだ。

今回やりたかった事は、値が1=正常、0=異常という事をやりたい。
例えば、NW機器の物理ポート(SWHUBのPort1)I/FがLinkUpしているかどうかという場合だ。

OID:
・ifAdminStatus(.1.3.6.1.2.1.2.2.1.7)
1 - Up
2 - Down
3 - Testing

・ifOperStatus(.1.3.6.1.2.1.2.2.1.8)
1 - Up
2 - Down
3 - Testing
5 - Dormant(休止)
6 - notPresent

上記の場合は、ifAdminStatus=1, ifOperStatus =1 が正常なので、1以外の値は異常(Critical)とした場合、
(Warningはなし)

check_snmp -H 192.168.1.1 -P 2c -C public -o .1.3.6.1.2.1.2.2.1.7.1 -c 1:1
「1:1」と下限値:上限値 を指定する。この値なら正常。この値以外は異常となる。

詳しくは、
check_snmp -h
にて、

Notes:
- Multiple OIDs (and labels) may be indicated by a comma or space-delimited
list (lists with internal spaces must be quoted).
- See:
https://www.nagios-plugins.org/doc/guidelines.html#THRESHOLDFORMAT
for THRESHOLD format and examples.
- When checking multiple OIDs, separate ranges by commas like '-w 1:10,1:,:20'
- Note that only one string and one regex may be checked at present
- All evaluation methods other than PR, STR, and SUBSTR expect that the value
returned from the SNMP query is an unsigned integer.

と書かれており、上記URLの [Threshold and Ranges] を参照して欲しい。

一部抜粋
Table 4. Command line examples

Command line Meaning
check_stuff -w10 -c20 Critical if "stuff" is over 20, else warn if over 10 (will be critical if "stuff" is less than 0)
check_stuff -w~:10 -c~:20 Same as above. Negative "stuff" is OK
check_stuff -w10: -c20 Critical if "stuff" is over 20, else warn if "stuff" is below 10 (will be critical if "stuff" is less than 0)
check_stuff -c1: Critical if "stuff" is less than 1
check_stuff -w~:0 -c10 Critical if "stuff" is above 10; Warn if "stuff" is above zero (will be critical if "stuff" is less than 0)
check_stuff -c5:6 Critical if "stuff" is less than 5 or more than 6
check_stuff -c@10:20 OK if stuff is less than 10 or higher than 20, otherwise critical

 

今回、例にしたOIDは正の整数しか値として格納されない想定だが、
check_snmp 以外にも同様に、-w , -c の値を範囲指定する事が可能なプラグインが存在する。
状況に応じて、範囲の書き方を確認しないと、予想値以外の値が格納された場合、本来は異常となって欲しいのに、”正常”とみなされる場合があるので注意が必要だ。

2023-03-24 03:16
netstaff

リソース管理ツール muninで、IPv6アドレスで接続する場合の設定方法

通常は、ローカル内のサーバーを管理すると思うので、IPv4アドレスで接続を行うと思う。
しかしながら、IPv6アドレスで接続したい場合に、IPv4と同じ感覚で、
munin.conf に、

[mail.example.com]
address 192.168.1.1
use_node_name yes

[www.example.com]
address 1111:2222:3333:4444::1
use_node_name yes

と設定すると、

Failed to connect to node 1111:2222:3333:4444::1:4949/tcp : Invalid argument
[ERROR] Munin::Master::UpdateWorker<www.example.com> failed to connect to node

と怒られます。

address の引数には、IPアドレスやFQDN(DNS解決可能な場合)でも設定可能ですが、
IPv6アドレスを指定する場合は、かっこ [] で囲む必要があります

正しくは、

[www.example.com]
address [1111:2222:3333:4444::1]
use_node_name yes

と設定しましょう。

 

2023-04-01 08:15
netstaff

shellと設定ファイル(ini形式)でスクリプトを書く時は、crudini が便利

表題に書いてしまったが、shellスクリプト + 設定ファイル(ini形式)でスクリプトを書くには、
crudini を使うと便利だ。

RedHat系であれば、
dnf install crudini

RasPiOSやarmbianでは、
apt install crudini

など、crudiniはパッケージとして用意されている。
※ 他のディストリビューションは未確認

例えば、pingを実行するスクリプトを書くとすると、

【/home/user/test.sh】

※ 7行目の部分(TARGET=)で、バッククォートを入れていますが、何故か表示上消えてしまいます
    PHPMYFAQの仕様だと思うのですが・・・・

#!/bin/bash

CRUDINI=/usr/bin/crudini
INIFILE=/home/user/test.ini

source <($CRUDINI --get --format=sh $INIFILE common)
TARGET=(`echo $TARGET|xargs`)

for tgt in ${TARGET[@]}
do
  source <($CRUDINI --get --format=sh $INIFILE $tgt)
  echo "*** Ping $HostName ($IP) ***"
  ping -c $PingCount $IP | tee /tmp/${HostName}.pingout
  echo ""
done

【/home/user/test.ini】

[common]
TARGET="hostA hostB hostC"

[hostA]
HostName=hostA
IP=192.168.0.1
PingCount=5

[hostB]
HostName=hostB
IP=192.168.0.2
PingCount=3

[hostC]
HostName=hostC
IP=192.168.0.3
PingCount=1

実行例
$ /home/user/test.sh

2023-04-09 04:00
netstaff

livemedia-creatorでエラー「The RHSM DBus API is not available.」が表示される

おそらく一部の構築エンジニアを除いて、カスタムISOイメージを作成するシチュエーションは
あまり無いと思うが、備忘録として残しておきます。

【対応策】

Rocky Linuxの場合、
livemedia-creator の引数に、--anaconda-arg="--product Rocky Linux" を付け加える

【環境/手順】

参考サイト https://github.com/lunatilia/el8-livemedia-japanese

※ 手順はほぼサイト通りですが、イメージを作成するOSのバージョンでエラー発生。
Rocky Linux 8.4 では、ソフトウェアの選択で「Server(GUI)」では成功。「最小限インストール」や「Server」はエラー発生。
Rocky Linux 8.6, 8.7では、「最小限インストール」や「Server」「Server(GUI)」エラー発生。

エラー内容(抜粋)
-----
エラーメッセージは次のとおりです:
The RHSM DBus API is not available.

インストーラーを終了します。
-----

最初は、イメージ作成専用のサーバーを、Rocky Linux 8.4 ソフトウェアの選択で「Server(GUI)」で構築し、
dnf -y update で、一気に8.7最新まで上げて作っていたが、以下の記事を見つけて試したらエラー回避できた。

https://bugzilla.redhat.com/show_bug.cgi?id=2034601

バグとして報告されているようだが、記事内に以下の発言があった。

「try running livemedia-creator with --anaconda-arg="--product CentOS Linux"」

この発言通りに実行したら、ISOイメージが作成出来て、そのISOイメージを使って、VMware上では起動出来た。
この方法が正しいのかどうかまでは不明。

(1) イメージ作成専用のサーバーを準備する。

・ VMware WorkStatioinで構築
・ Rocky-8.7-x86_64-minimal.iso を利用
キーボード : 日本語
言語サポート: 日本語
時刻と日付 : アジア/東京 タイムゾーン
ソフトウェアの選択: 最小限のインストール
インストール先: 適当に
ただ、イメージ作成で中間ファイル・完成ファイル等で空き容量不足にならない程度。
著者の場合は、仮想ディスク 20GB (SWAP 2GB / で18GB)
※ ホスト名とIPアドレスの設定は、インストール完了後に実施

(2) イメージ作成専用サーバーの諸設定

(2-1) コンソール画面より、
・ IPアドレス設定
・ ホスト名設定

(2-2) OSを最新にしておく。
# dnf -y update

(2-3) selinuxをdisabledに
# vi /etc/sysconfig/selinux

OS再起動する

(3) イメージ作成の為のインストール

# dnf -y install git lorax-lmc-novirt

OS再起動

(4) ISOイメージ作成

# git clone https://github.com/lunatilia/el8-livemedia-japanese
# cd el8-livemedia-japanese
# mv samples/rocky8live-builder .
# vi rocky8live-builder

・ --anaconda-arg="--product Rocky Linux" を付け加える
・ 8.3 -> 8.7 に変更

--- 抜粋 ---
livemedia-creator \
--ks ${kickstart} \
--no-virt \
--iso-only \
--make-iso \
--nomacboot \
--volid RockyLinux-8 \
--iso-name "Rocky-8.7-x86_64-LiveGNOME.iso" \
--title "Rocky Linux Live 8.7 (JP)" \
--project "Rocky Linux Live" \
--releasever "8\.7\ \(JP\)" \
--fs-label "Rocky-8-7-x86_64" \
--extra-boot-args noswap \
--tmp ${temp} \
--resultdir ./${resultdir} \
--logfile ${logdir}/${logfile} \
--anaconda-arg="--product Rocky Linux"

(5) 実行する

# ./rocky8live-builder kickstarts/rocky-8-live-gnome.cfg

今回は、
el8-livemedia-japanese の kickstartファイルを利用しましたが、
kickstartファイルを自分好みに作成すれば良いと思います。

 

2023-04-19 22:57
netstaff

AntiVirusソフト(Dr.WEB Linux版)のライセンス(新規)登録について

RockyLinux8にて、Dr.WEBのトライアルライセンスを入手し利用してみたが、
ソフト自体がリソースを圧迫するなどの事もなかったし、Linux対応のAntiVirusソフトが
他に見つからなかった事もあり、Dr.WEBの正規ライセンスを購入した。

(1) オンラインストアからの購入

https://estore.drweb.co.jp/home/
購入の仕方は、他社のオンラインストアでの操作方法と変わらない。
オンラインストアにてクレジットカード等にて購入/決済が完了すると、
購入時に登録したメールアドレスへ「シリアルコード」が記載されたメールが到着する。

※ ここで登録するメールアドレスは、Dr.WEBの個人向けポータルサイトにログインしたり、
    Dr.Webキーファイル入手の際にも使われるので、捨てアド(捨て垢)等は注意してください。

※ 購入時に、ライセンス期間とPC台数を入力するが、例えば、1年、PC2台で購入すると、
    シリアルコードが1つ発行される。
    有効期限はシリアルコード毎となり、PC毎の有効期限では無い事に注意が必要。

    → 1台目 : 2023/01/01 使用開始
        2台目 : 2023/02/01 使用開始
        と、時期をずらしても有効期限は、2台とも 2024/12/31 となる。

(2) 使用開始日にDr.Webキーファイルの取得を行う。

ソフト上にライセンスを付与する方法は、Dr.Webキーファイルを取り込む事で登録する。
この、Dr.Webキーファイルを入手する
https://products.drweb.co.jp/register/v4/

上記URLより、メールで到着した「シリアルコード」を登録すると、
Dr.Webキーファイルが発行される。
Dr.Webキーファイルは、上記URLから登録直後に表示されるリンクからもダウンロード可能だが、
登録したメールアドレスにも到着する。

※「シリアルコード」を登録( Dr.Webキーファイルを発行した)時点で、ライセンス使用開始となる。
   よって、「シリアルコード」は先行して購入していても問題ないが、
   ソフト使用開始直前に、「シリアルコード」を登録したほうが良い。
   → ライセンス使用開始は、ソフトにDr.Webキーファイルをインポートした時点ではない!

(3) Dr.Webキーファイルをソフトに取り込む

GUI操作にて、Dr.Webキーファイルをインポートする事でライセンス登録が可能らしいが、
著者の場合は、Xwindow未導入の為、コマンドラインにて操作する。

(3-1) Dr.Webキーファイルを指定の場所に保存する。
       保存先: /etc/opt/drweb.com/drweb32.key

(3-2) プロセスを再起動する。
        # systemctl restart drweb-configd

(3-3) ライセンス期間の確認する
        # drweb-ctl license

 

2023-09-02 05:17
netstaff

AntiVirusソフト(Dr.WEB Linux版)のライセンス(更新)登録について

(1) オンラインストアからの購入

https://estore.drweb.co.jp/renew/

更新を行う為のライセンスは、2通りの方法が存在する。

・ 新規ライセンスを購入して、更新用ライセンスとして使用する

→ (新規登録操作ではなく) 特定の操作を行う事で、ライセンス期限が+150日追加される
    → 既存ライセンス有効期限が切れていないこと
    → 既存シリアルコートを入力する必要がある
    → 価格は新規ライセンス価格だが、150日追加されることで更新割引価格と同等の値段設定

・ 更新用ライセンスを購入する

→ 既存ライセンス有効期限が切れていないこと
→ 既存シリアルコートを入力する必要がある
→ 購入価格は、更新割引価格(1年の場合、40%割引)が適用される。

→ 更新用ライセンスは、既存シリアルコードをベースにする為、PC台数は変更出来ず、ライセンス期間のみ変更可能(1年/2年/3年)

著者は、後者を選択。
上記URLより、既存のシリアルコード、新規登録時に入力したメアドを入れて購入。
メールに、新しいシリアルコードが到着した。

(2) 新しいシリアルコードの登録

結果から先に言うと、この操作を行えばライセンス更新作業は終了する。
Dr.Webキーファイルのダウンロード、メールでもDr.Webキーファイルが添付ファイルで受信したが、
このファイルを使うことなく、ライセンス期間が延長された。

[状態]
対象サーバーは、
  ・ ライセンス有効期限は切れていない状態
     ・ インターネットへ公開(外部へのアクセスが可能状態)

https://products.drweb.co.jp/register/v4/

にて、新しいシリアルコードを登録。
次の画面にて、既存のシリアルコードがあるかどうか聞かれる。
この画面にて、既存のシリアルコードを入れると、
既存ライセンスの有効期限から、契約年数分が付与されたライセンス状態となる。
・ Dr.Webキーファイルのダウンロード
・ メールでも、Dr.Webキーファイルが到着している事を確認

著者の場合、有効期限が2023-09-07 で、2023-08-30に1年2台のライセンス購入。
この作業を実施したところ、Dr.Webキーファイル内の有効期限は、
2024-09-07 となっていた。
既存のライセンス有効期間が反映されていた。

(3) Dr.Webキーファイルを差し替えしようと思ったら・・・

念のため、作業前に
# drweb-ctl license
を実施したところ、既に有効期間が延長されていた。

反映タイミングは不明。
内部的にライセンスが有効かどうかのチェックを行っているらしいので、
タイミングよく反映されたのか、
「drweb-ctl license」コマンドを実行した際に、反映されたのか・・・

/etc/opt/drweb.com には、
drweb32.key (新) と、リネームされたであろう drweb32.key.xxxxx (旧キーファイル)が
保存されていた。

という訳で、
今回は、 Dr.Webキーファイルを差し替え、ソフトの再起動等は行う必要は無かった。

2024-09-06 追記

再更新タイミングとなったので上記手順を行ったが、上記(2) にて「このシリアル番号は既に登録されています。」
と表示された。

15分待っても、ライセンスコード(シリアルコード)のメールは来たが、キーファイル(drweb32.zip)がメールで来ていないので、
[登録情報を再送する] ボタンをクリックする事で、メールにてキーファイルが到着
これで最悪、キーファイル差し替え&デーモン再起動でいけるはず。
今回は、キーファイル差し替え前に、以下の手順を実施

# ./drweb-ctl license
License number YYYYYYYYYYYYY, expires 2024-Sep-07 17:44:08 (1 days left)
# ./drweb-ctl license --GetRegistered XXXX-XXXX-XXXX-XXX
Error: execvp: No such file or directory: lsb_release
Warning: Couldn't recognize Linux distribution. Assuming it is Red Hat Enterprise Linux
License installed
License number YYYYYYYYYYYYY, expires 2025-Sep-09 04:27:05 (367 days left)

以上の操作で、ライセンス期限が更新された。
ライセンス更新する端末がもう1台あるので、そちらも上記コマンドを実行しようと思い
ライセンス期限を確認したが、そちらは既にライセンス期限が延長されていた。

2024-09-06 05:48
netstaff

apache2でHTTP PUTすると、405 Method Not Allowed

どのバージョンから規制されたのか不明ですが、以下の記事によると
default_handler()は、GET/POST/OPTIONS以外は、受け付けないようになっているらしい。
https://www.softel.co.jp/blogs/tech/archives/5685

セキュリティの観点から、Limitディレクティブを使って、GET/POTのみ受け付けるように制限を
かける事が言われていて、Googleと、それらの記事も多くHitする。
ただ、どの記事も日付が古い。Apache(httpd)側で対策したから、わざわざ制限を加えなくても
良いとの観点だろう。

今回、ファイルをサーバー側に置いて処理させる要件が出て、HTTPかSCP/SFTPのどちらかで
実装だろうな・・・と思っており、HTTP PUTのほうが単純で(実装が)楽じゃね?と思った次第。
当初は、httpd.confでPUTメソッドを許可する設定を書けば良いと思っていた。
だが、難航極まりない。結局、行き着いたのが上記URLで、設定では許可出来無さそうだった。
その記事で「Scriptディレクティブで設定するのが簡単」とあったので、やってみた。

 

*** 注意 ***
以下にサンプルスクリプトを掲載するが、あくまでサンプル。
そのままコピペして公開サーバーで実装しないで欲しい。
公開サーバーへ実装を予定されている場合は、実装予定のサーバーの環境に応じて、
有識者がスクリプトのセキュリティ診断を行うなど対応が必要である。

〇 試した環境

・ WEBサーバー (192.168.100.100)
    Debian GNU/Linux 11 Debian 5.10.197-1 (2023-09-29) x86_64
    apache2 2.4.56-1~deb11u2
    perl v5.32.1
・ クライアント (192.168.100.1)
    Rocky Linux 8.9 4.18.0-513.5.1.el8_9.x86_64
    perl v5.26.3

〇 インストール

[WEBサーバー]

# apt-get install apache2
# a2enmod actions
# a2enmod cgid
# mkdir /var/www/html/test
# chown www-data. /var/www/html/test
# apt-get install libcgi-pm-perl

# vi /etc/apache2/sites-enabled/000-default.conf
   変更箇所は以下の通り

*** 000-default.conf.bak
--- 000-default.conf
***************
*** 27,32 ****
--- 27,39 ----
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
+ <Directory /var/www/html/test>
+ AllowOverride AuthConfig
+ Require method PUT
+ Require ip 192.168.1
+ Script PUT /cgi-bin/put.cgi
+ </Directory>
+
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

# vi /usr/lib/cgi-bin/put.cgi

#!/usr/bin/perl -T

use strict;
use warnings;
use CGI;
use File::Basename;
use CGI::Carp qw(fatalsToBrowser);

$CGI::POST_MAX = 1024 * 100;

my $q       = CGI->new;
my $method  = $q->request_method();
my $redirect= $ENV{'REDIRECT_URL'};
my $data    = '';
my $msg     = '';
my $ref_base= '';
my $ref_dir = '';
my $save_nm = '';

unless ( $redirect eq '' ) {
    ($ref_base, $ref_dir) = fileparse $redirect;
    if ( $method eq 'PUT' and $ref_dir =~ m!^/test/! ){
        $data  = $q->param('PUTDATA');
        if ($ref_base =~ /^([\w\.-]+)$/) { $ref_base = $1; }
        else { die 'Unable to extract file name';  }

        $save_nm = "/var/www/html/test/${ref_base}";
        open(OUT, ">$save_nm") or die "File ($save_nm) open Error\n";
        print OUT $data;
        close OUT;
        $msg = "$save_nm write";
    }
    else {
        $msg = 'Method Error';
    }
}
else {
    $msg = 'Direct execution prohibited';
}

# HTML
print $q->header,
  $q->start_html('hello world'),
  $q->p("$msg") . "\n";
print $q->end_html;

# systemctl restart apache2

[クライアント]

$ vi test.pl

#!/usr/bin/perl

use strict;
use warnings;
use HTTP::Request;
use LWP::UserAgent;

my $method = 'PUT';
my $uri    = 'http://192.168.100.100/test/test.txt';
my $header = ['Content-Type' => 'text/plain; charset=UTF-8'];
my $data   = 'Hello Wolrd';

my $req = HTTP::Request->new( $method, $uri, $header, $data );
my $ua  = LWP::UserAgent->new(timeout => 10);
my $res = $ua->request($req);
print $res->content();

$ chmod 744 test.pl

〇 実行してみる

(1) クライアントよりコマンド実行
$ ./test.pl

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
<title>hello world</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>/var/www/html/test/test.txt write</p>
</body></html>

(2) サーバー側にログインしてファイルが出来ている事を確認

(3) クライアントよりブラウザで、http://192.168.100.100/test/test.txt にアクセスしてみる

〇 感想

結局、CGI(put.cgi)を動かしているので、CGI.pm 使っている時点で、POSTでも良かったかも・・・・と気づいた。
今回のWEBサーバーはphp入れていないけど、mod_phpなんて入って入たら、test.phpを置くと実行できるのでは?
/var/www/html/test ディレクトリは、PUTメソッドのみ許可にしてブラウジング出来ないようにするとか、
そもそもドキュメントルート以外に保存して閲覧用のCGIを別途用意するとか、対策施さないと危険すぎる。
text.txtファイルのパーミッションは[0644]なので、シェルインジェクションは出来ないと思うけど。

2023-11-30 08:15
netstaff

RockyLinux8 で、php7.4とphp8.2を共存させる (Apache + php-fpm構成)

〇 要件

これまで、php7.4にてWEBサーバーを運用していたが、とあるアプリケーションのバージョンアップをする為には、
php8.2 or php8.3に上げる必要があった。
しかしながら、単純にphpを7.4 -> 8系に上げると稼働しているCMSが動作しない事が判明。
まあ、諸事情によりCMSのphp8系対応は見通しが立たない。

という訳で、とあるアプリケーションだけphp8系に上げる事にした。

[環境] ※導入前

・Rocky Linux 8.9 (Green Obsidian)
・httpd-2.4.37-62.module+el8.9.0+1436+2b7d5021.x86_64
・php-7.4.33-1.module+el8.8.0+1150+ac720675.x86_64
  → コンテンツは、php7.4にて稼働中

※ この記事は検証環境で試して成功した段階で忘れないように執筆しています。
    本番環境を弄った際に手順が異なったら、後ほど記事を修正します。

〇 Googleと・・・・

世の中には同様に考えている人が多いもので、さくっと見た限りでは2通りの方法がある。
・バーチャルホスト毎にphpバージョンを分ける
・ドキュメントルート ディレクトリでphpバージョンを分ける。
今回は後者のディレクトリでphpバージョンを分ける方法を選択した。

〇 php8系のインストール

RockyLinux8のAppStreamは8.0までのようなので、Remiレポジトリを追加
※ EPELリポジトリは既に設定済。未導入の場合は、依存関係で必要なRPMがあるので導入必須
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf update

今回は、php8.2をインストールする。
# dnf install php82 php82-php-gd php82-php-xml php82-php-mbstring php82-php-mysqlnd php82-php-embedded

インストール完了後
# systemctl restart httpd
# ps -ef | grep -e "httpd" -e "php-fpm"
php-fpmのインスタンスが、/etc/php-fpm.confに加え、/etc/opt/remi/php82/php-fpm.confの2つが立ち上がる。

root 2231 1 0 16:48 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
root 2233 1 0 16:48 ? 00:00:00 php-fpm: master process (/etc/opt/remi/php82/php-fpm.conf)
root 2238 1 0 16:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2240 2233 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2241 2233 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2242 2233 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2243 2233 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2244 2233 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2245 2238 0 16:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2246 2238 0 16:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2247 2238 0 16:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2248 2238 0 16:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2460 2231 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2461 2231 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2462 2231 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2463 2231 0 16:48 ? 00:00:00 php-fpm: pool www
apache 2464 2231 0 16:48 ? 00:00:00 php-fpm: pool www

*** 問題発生 ***
サイトを確認すると、php画面が真っ白。もしかして・・・と思って、速攻でphpinfoファイルを作って、
ブラウザで読み込ませてみると、「PHP Version 8.2.13」orz

httpdの設定ファイルを確認すると、
/etc/httpd/conf.dに、既存 php.conf に加え、php82-php.confが出来上がっている。
内容を確認したが重複する設定内容となっており、php.conf -> php82-php.confの順で読み込まれている推測。
結果的に、php82-php.confの設定内容が、有効化されたものと思われる。

[php82-php.confを無効化]
# cd /etc/httpd/conf.d
# mv php82-php.conf php82-php.conf.off
→ httpd.conf で、「IncludeOptional conf.d/*.conf」となっているので、拡張子が変われば読み込まれない。
# systemctl restart httpd

再度、ブラウザでphpinfo確認「PHP Version 7.4.33」に戻った。
とりあえず、これでphp8系の使える事前準備が完了した。
(現状の設定では、全てのコンテンツ(バーチャルホスト含め)でphp7.4が使われるはず)

〇 とあるアプリだけphp8系を使う設定を行う

アプリ名(仮)が、php-ABCsoft
/var/www/html/php-ABCsoft-1.2.3 が本体のディレクトリ名
シンボリックリンクを張っている。php-ABCsoft -> php-ABCsoft-1.2.3

設定は、「.htaccess」でも良いのだが、私はどちらかというとconfファイルに書く性分だ。
どうせ時間が経つと忘れるので、confで設定したほうが手を加えている事に早く気付ける。

という訳で、
httpd.confの追加設定で、

<Directory "/var/www/html/php-ABCsoft">
  Options +FollowSymLinks
  <FilesMatch \.php$>
    SetHandler "proxy:unix:/var/opt/remi/php82/run/php-fpm/www.sock|fcgi://localhost"
  </FilesMatch>
</Directory>

念のため、
・/var/www/html/php-ABCsoft/phpinfo.php
・/var/www/html/phpinfo.php
ファイルを置いておく。
phpinfo.php の中身は、言わずもがな <?php phpinfo(); ?> である。

# systemctl restart httpd

後は、ブラウザにて、
https://hogehoge.chovits.jp/phpinfo.php
  -> PHP Version 7.4.33
https://hogehoge.chovits.jp/php-ABCsoft/phpinfo.php
  -> PHP Version 8.2.13
を確認。

phpのバージョン確認が終わったら、phpinfo.phpを削除するのを忘れずに・・・

〇 感想

php-fpmを使う以外に、php-cgi を /cgi-bin配下に置いて、Actionディレクティブに引き渡す方法もGoogleったら出てきた。

最初は、

# cp -p /opt/remi/php82/root/usr/bin/php-cgi /var/www/cgi-bin/php-cgi

<Directory "/var/www/html/php-ABCsoft">
  Options +FollowSymLinks
  <FilesMatch \.php$>
    Action php82 /cgi-bin/php-cgi
    AddHandler php82 .php
  </FilesMatch>
</Directory>

しかしながら、この設定方法ではうまくphp82のphp-cgiを使ってくれなかった。
phpinfoでは、7.4.33 のままでphp8系にならない。

/etc/httpd/conf.d/php.conf で、デフォルトはphp7系を使うように、SetHandler で php-fpmに渡す設定がされている。
あくまで予想だが、Actionディレクティブよりも、SetHandlerが優先されたのだろう。
ここでハマって時間を要してしまった。

2023-12-02 11:26
netstaff

RockyLinux8 と Windows10間でiscsi接続設定

PCのHDD容量が不足してきたため、ファイルサーバーのHDDの一部領域を、PCに割り当てたく
iscsiで設定してみた

個人で利用している環境では、PCにドメイン名を設定せずに利用している事が多い。
今回の設定では、ドメイン名が必要となるので、マイドメインを取得していない場合は、
テスト用のドメインを利用して欲しい。
今回は、example.jp を利用して情報を残しておく

2つの記事に分けて執筆しているので、必要に応じて参考にして頂きたい
・ RockyLinux8 と Windows10間でiscsi接続設定 (iscsi ターゲットサーバー設定)  *** この記事 ***
RockyLinux8 と Windows10間でiscsi接続設定 (iscsiイニシエーター設定) 

(1) iscsi設定を行う為の事前情報

iscsiの設定を行うに辺り、iSCSI ターゲット名/イニシエーター名を事前に決めておく。
命名規則があるので、フォーマットに倣って決定する
フォーマットは [ iqn.年-月.ドメイン名の逆:任意の名前 ]

【環境】
 ・サーバー (iscsiターゲットサーバー)
     RockyLinux8.9
     Hostname : server.example.jp
     IPAddress: 192.168.1.84
     iscsiで利用する名前: iqn.2023-12.jp.example:server

・ クライアント (iscsiイニシエーター)
    Windwos10Pro
    Hostname : client.example.jp
    IPAddress: 192.168.1.85
    iscsiで利用する名前: iqn.2023-12.jp.example:client   

(2) サーバー設定

(2-1) サーバー側にiscsi管理ソフトを導入

 # dnf -y install targetcli
 # systemctl enable target
 

(2-2) ディスクイメージ場所の選定

Windows10で利用する(割り当てる) Disk領域の場所
# mkdir /iscsi_disks 

(2-3) iscsi管理ソフトで設定

# targetcli 

Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/>

対話モードなるので、コマンドを実行していく。
設定中はプロンプトが "> になっている事に留意して欲しい。
コマンドはシェルに似ている

(2-3-1)  Windows10で利用するDiskイメージの作成

disk01と名前で、作成場所、ファイル名は、/iscsi_disks/client_disk01.img
とりあえず容量を10GBとした。
以下、絶対パスで項目を移動(感覚的に分かりやすいかも)
> cd backstores/fileio
/backstores/fileio> create disk01 /iscsi_disks/client_disk01.img 10G

Created fileio disk01 with size 10737418240

(2-3-2) iscsiターゲットの作成

/backstores/fileio> cd /iscsi
        
(1)で命名した名前で作成する
/iscsi> create iqn.2023-12.jp.example:server

Created target iqn.2023-12.jp.example:server.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

(2-3-3) LUNを割り当て

/iscsi>  cd /iscsi/iqn.2023-12.jp.example:server/tpg1/luns

(2-3-1)で作成したディスクイメージ "disk01" にLUNを割り当てる
明示的にLUN番号を指定できるが、省略すると空き番号を自動割り当てされる。
        
/iscsi/iqn.20...ver/tpg1/luns> create /backstores/fileio/disk01

Created LUN 0.

→ 0番が割り当てられた

(2-3-4) AccessControL (ACL) の設定

disk01に接続可能なクライアント(Windows10)を登録する
※ この設定(接続クライアントの制限)や、(2-3-5)で設定するID/PASSも不要な場合は、
    別設定(制限しない=全て接続する)を行えば、「来るもの拒まず」状態になる

/iscsi/iqn.20...xample:server> cd /iscsi/iqn.2023-12.jp.example:server/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> create iqn.2023-12.jp.example:client

Created Node ACL for iqn.2023-12.jp.example:client
Created mapped LUN 0.

(2-3-5) クライアントがサーバーに接続する際のID/Passを設定

/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2023-12.jp.example:server/tpg1/acls/iiqn.2023-12.jp.example:client
/iscsi/iqn.20...xample:client> set auth userid=iscsiuser001 password=123456789012

Parameter userid is now 'iscsiuser001'.
Parameter password is now '123456789012'.

※ PASS(シークレット)の文字数は12~16文字で設定する必要がある(CHAPの仕様)

(2-3-6) ID/PASS認証を行うように設定

(2-3-5)にて、ID/PASSを登録したが、ID/PASSを使っての認証をするかしないかの設定が必要となる。
また、この設定はターゲットポータルグループ (TPG) 毎の設定となる。
現在、グループ名"tpg1" が作成されているので、「tpg1グループはID/PASS認証を行う」設定となる。

/iscsi/iqn.20...xample:client> cd /iscsi/iqn.2023-12.jp.example:server/tpg1
/iscsi/iqn.20...e:server/tpg1> set attribute authentication=1

Parameter authentication is now '1'.

 ※ ここで、"get attribute"と打てば、その他の設定項目も表示される。

(2-3-7) 設定の完了と確認

"ls /" にて設定の簡単な設定確認が出来る。
しかし、ID/PASSなどはこの画面には出て来ないので、確認コマンドはあるが、生ファイルを見たほうが早い
設定ファイル  /etc/target/saveconfig.json

 /iscsi/iqn.20...xample:client> ls /

o- / ............................................................................................................................................. [...]
  o- backstores ............................................................................................................................. [...]
  | o- block ........................................................................................................... [Storage Objects: 0]
  | o- fileio ............................................................................................................ [Storage Objects: 1]
  | | o- disk01 ............................................ [/iscsi_disks/client_disk01.img (10.0GiB) write-back activated]
  | |   o- alua ............................................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ...................................................................... [ALUA state: Active/optimized]
  | o- pscsi ............................................................................................................ [Storage Objects: 0]
  | o- ramdisk ........................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................................ [Targets: 1]
  | o- iqn.2023-12.jp.example:server ....................................................................................... [TPGs: 1]
  |   o- tpg1 ................................................................................................... [no-gen-acls,auth per-acl]
  |     o- acls .......................................................................................................................... [ACLs: 1]
  |     | o- iqn.2023-12.jp.example:client ....................................................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 .................................................................................... [lun0 fileio/disk01 (rw)]
  |     o- luns .......................................................................................................................... [LUNs: 1]
  |     | o- lun0 ......................................... [fileio/disk01 (/iscsi_disks/client_disk01.img) (default_tg_pt_gp)]
  |     o- portals .................................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ................................................................................................................... [OK]
  o- loopback ....................................................................................................................... [Targets: 0]

/iscsi/iqn.20...xample:client> exit

Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

(2-4) iscsiサーバーサービスを起動する

# systemctl start target

 TCP 3260でListen状態となっている事が確認できる
 # ss -ant | grep 3260

LISTEN 0      256          0.0.0.0:3260       0.0.0.0:*

以上で、ターゲットサーバー側の設定は完了

(3) クライアントの設定

(3-1) iscsiイニシエータ プログラムの起動

説明を簡略化する為、ショートカットキーで執筆している。
     
・iSCSI イニシエーター
   [Windows]キー + R で、「ファイル名を指定して実行」を開く。
  「iscsicpl」と入力し、OKをクリック

(3-2)  (初めて起動すると)以下の画面が表示されるので「はい」を選択

以下の画面が出なかった場合は、サービスが起動しているか確認すること。
 
・サービス
   {Windows}キー + R で、[ファイル名を指定して実行]を開く。
  「SERVICES.MSC」と入力し、OKをクリック
    サービス名:Microsoft iSCSI Initiator Service が[実行中] で[自動]となっている事

(3-3) イニシエーター名の設定

① iSCSI イニシエーター画面が表示。構成タブを選択
② [変更]ボタン押下


③ 予め決めておいたクライアントのイニシエータ名 「iqn.2023-12.jp.example:client」入力後、[OK]ボタン押下


④ イニシエータ名が変更された事を確認し、[探索]タブを選択

(3-4) ターゲットポータルの設定

① [ポータルの探索]をクリックする


② ターゲットサーバーのIPアドレスを入力後、[OK]をクリック
    ※ ここでは、詳細設定は行わない


③ ターゲットを検索するポータルにエントリされた事を確認し、[ターゲット]タブを選択

(3-5) ターゲットへの接続設定

① (3-4)の設定が完了すれば、[検出されたターゲット]の欄にターゲット名が表示されている
    状態は[非アクティブ]
    ターゲット名を選択された状態にし、[接続]をクリックする


② [詳細設定]をクリックする


③ [CHAP ログインを有効にする]にレ点を入れ、
    (2-3-5) で設定したID/PASS情報を入力する
    名前: iscsiuser001
    ターゲット シークレット: 123456789012
    入力後、[OK]をクリック


④ 1つ前の画面に戻るので、[OK]をクリックする


⑤ 状態が"接続完了"となれば設定完了
    ※ 設定に誤りがあると、エラーウインドウが表示される。
        設定ミスの箇所により、エラーウインドウが出るまでの時間はマチマチである。
        早い時は1秒未満、遅い時は3分ほど待たされ、エラーウインドウが表示された。

(3-6) ディスクの管理より領域を割り当て

ここまでくれば、HDD増設時と同じ手順となる
・ディスクの管理
   {Windows}キー + R で、[ファイル名を指定して実行]を開く。
  「diskmgmt.msc」と入力し、OKをクリック

「新しいシンプル ボリューム」にて容量を割り当てれば完了

以上で設定は完了。Eドライブとして使用できるようになる。

2023-12-08 00:20
netstaff

samba 隠しファイル(.から始まるファイル)が隠れない

【結論】

Windows側のエクスプローラの表示設定「隠しファイルを表示する」に設定していると、
表示されます。
「隠しファイルを表示しない」にすると非表示になりますので、samba側は正しく機能しています。

Windowsのデフォルト状態では、「隠しファイルは表示しない」となっているので、一般の人は
非表示状態となっていますが、IT系よりの人は、「隠しファイルは表示する」ように設定変更していたりするので、
sambaが正しく機能していないと勘違いしてしまいます。

【詳細】

smb.confのデフォルト設定では、
hide dot files = yes (既定値)
となっているので、.(ドットから始まる)ファイルに対しては、隠しファイル属性となっています。
.(ドットから始まらない)ファイルに対しては、
hide files =
の設定で追加します。
しかしながら、双方、隠しファイル属性となるだけで、Windows側の表示設定を変更すると表示されるようです。

【「隠しファイルは表示する」に設定していてもsmb.conf設定で隠れないか?】

似たような設定に、
veto files =
があります。こちらは、一覧することもアクセスすることもできないファイルとディレクトリのリストを指定します。
こちらで設定すれば、表示されません。
しかしながら、"veto files =" で設定すると「知っている人はアクセス出来る」ような事は出来ません。

2024-01-02 20:35
netstaff

systemctl edit (drop-in snippet) を使う時は、"systemctl show" で確認すべし

サーバーに複数のIPアドレスを割り当てている場合に、明示的にListenIPアドレスを指定したい場合がある。
例えば、postfixで、

inet_interfaces = 127.0.0.1, 192.168.1.1

等を設定した場合、OS再起動するとpostfixが起動に失敗するケースに遭遇する。
ネットワークインターフェースがLinkUpする前に、postfixが起動してしまい、指定したIPアドレスの25/TCPポートを割当出来ない状態だ。

対応方法としては、systemdのユニットファイルを編集するのが一般的であろう。
今回はpostfix.service を例として、"systemctl edit postfix.service"でユニットファイルを編集する場合について。

"systemctl edit postfix.service"で

[Unit]
After=network-online.target

として保存すれば、今回の要件は完了する。

だがデフォルトでは、
After=syslog.target network.target
となっていて、syslog使ってないし、network-online.target があれば、
(他のサービスで立ち上がるはずなので)"network.target" 不要じゃないか!と
思った時、つまりは、デフォルトで記述されている場合を削除したい場合だ。

結論から言えば、著者は、"systemctl --full edit postfix.service"でしか対応しきれなかった。
--full オプションは、すべての設定項目を記述する。保存先は、/etc/systemd/system/postfix.service となる。

[Service] セクションであれば、例えば、
ExecStartPre=
ExecStartPre=hogehoge
と書けば、1行目のExecStartPre行でクリアされ、2行目の1行のみとなる。

同様の事を[Unit] セクションで行ったが、
[Unit]
After=
After=network-online.target
としても"network-online.target"が追記されるだけで、"syslog.target"も"network.target"も存在する。

だいぶん話が脱線してしまったが、これらの調査を行った際に利用したコマンドが、

〇 編集する場合

・ systemctl edit postfix.service

〇デフォルト設定部分を含んだユニットの設定内容を確認する場合

・ systemctl cat postfix.service

〇反映された設定内容を確認したい場合

・systemctl show postfix.service -p After

ちなみに、"systemctl show postfix.service"とすると、ユニットファイルに記述していない項目も出てくるので、
-p オプションで After とか、ExecStartPre とか書けば、その行が表示される。
ま、grep しても良いが・・・

man を見ると、"systemctl edit" で編集保存すると、"systemctl daemon-reload"を(自動)実行してくれるようだ。

確認環境
Rocky Linux release 8.9 (Green Obsidian)

2024-02-29 03:07
netstaff

rsyslog にてロギングされる時刻フォーマットを変更したい

著者が使用しているメインのLinuxディストリビューションはRockyLinux
シングルボードコンピューター(RaspberryPiやOrangePIなど)は、「Raspberry Pi OS」「Armbian」を使用している。
Armbianの最新OSを使用しだしたら、rsyslogの時刻フォーマットが変更されていた。
まあ、検証や調査等で他のディストリビューションを使用したりしていた時に、チラホラ見かけていたのだが。

(A) Armbian 24.2.1 bookworm で使用されているrsyslogの時刻フォーマット

2024-02-13T03:22:26.022354+00:00 orangepi5 kernel: [    4.767558] Linux version 5.10.160-legacy-rk35xx (armbian@next) (aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #1 SMP Fri Feb 2 07:51:33 UTC 2024
2024-02-13T03:22:26.022358+00:00 orangepi5 kernel: [    4.778703] Machine model: Orange Pi 5
2024-02-13T03:22:26.022360+00:00 orangepi5 kernel: [    4.778870] efi: UEFI not found.

(B) よく見る時刻フォーマット

May 12 06:00:48 rocky8 kernel: Linux version 4.18.0-513.18.1.el8_9.x86_64 (mockbuild@iad1-prod-build001.bld.equ.rockylinux.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-20) (GCC)) #1 SMP Wed Feb 21 21:34:36 UTC 2024
May 12 06:00:48 rocky8 kernel: Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-513.18.1.el8_9.x86_64 root=UUID=bad16281-a882-42c0-aec0-d7e2d5e712d6 ro crashkernel=auto resume=UUID=4912a5e2-2ddd-4121-8164-a44ebf092b2b
May 12 06:00:48 rocky8 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'

今回は(諸事情により)、時刻フォーマットを(A) から (B)に変更します

〇 rsyslogでロギングされる全てのファイルの時刻フォーマットを変更する場合

rsyslog.conf に、

$ActionFileDefaultTemplate RSYSLOG_SysklogdFileFormat

を追加してrsyslogを再起動する

〇 任意のログファイルのみ変更する

(例) /var/log/syslog に定義部分を変更
rsyslog.confにて、

*.*;auth,authpriv.none          -/var/log/syslog

*.*;auth,authpriv.none          -/var/log/syslog;RSYSLOG_SysklogdFileFormat

に変更(赤文字を追記)して、rsyslogを再起動する

【補足】

rsyslogでは、出力フォーマットをカスタマイズできる機能がある。
自分で定義しても良いが、rsyslog本体に予め定義されている形式を使用した。
「RSYSLOG_」で始まるテンプレート名である。
定義済みテンプレートの種類については、本家ドキュメントを参照して欲しい。
https://www.rsyslog.com/doc/configuration/templates.html

著者が参考にしたサイト
・ rsyslog のログフォーマットを変更する
https://tech-lab.sios.jp/archives/37409

【本番運用では】

後々の事を考えて、rsyslogで定義されているルールは変更せずに、ルールを追加する事になるだろう。
*.*;auth,authpriv.none          -/var/log/syslog
*.*;auth,authpriv.none          /var/log/syslog_kanshi;RSYSLOG_SysklogdFileFormat # この行を追加

logrotateの設定も忘れずに!
# /etc/logrotate.d/kanshi

/var/log/syslog_kanshi
{
    missingok
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}

 

2024-05-14 03:45
netstaff

監視サーバーからメールサーバー(postfix)へのポート監視で定期的にwarningメッセージが表示される

【環境】

  • Rocky Linux 8.9
  • postfix-3.5.8-7.el8
  • NagiosCore 4.5.2 (check_smtpを利用)
  • 監視サーバー ホスト名のDNS登録において、正引き/逆引き名が不一致である

【事象】

監視サーバーよりメールサーバーへポート監視(25/TCP)のタイミングで、
/var/log/maillog に

warning: hostname hogehoge.foo.bar does not resolve to address 203.0.113.1: Name or service not known

が定期的(ポーリング間隔)で表示される。
監視サーバーからのアクセスによるWarningメッセージは既知である為、Warningメッセージを抑制したい

【解決方法】

check_smtpは、通常のメール送信と同様のアクセスを行っている。
監視サーバー ホスト名のDNS登録において、正引き/逆引き名を同一にするのが望ましいが、不可能な場合は、

(方法1) check_tcpに変更する。但し、3ハンドシェークまでのチェックとなってしまうのが欠点
(方法2) メールサーバーの/etc/hosts に監視サーバー名のIPアドレス/ホスト名を登録する
           → postfix-3.5.8-7.el8 では、DNS解決に /etc/hosts も参照している
           ※ postfixの他のバージョンについては動作未確認

 

2024-05-17 17:01
netstaff

tigervncserver(standalone)に接続し、ログアウトするとtigervncserverサービスが終了する

〇 確認環境

A95XF3-AIR
Armbian 24.11.0-trunk.346 bookworm
Base: Debian GNU/Linux 12 (bookworm)

〇 状況

tigervnc-standalone-server (1.12.0+dfsg-8) をインストールし設定を行っていたが、
systemdにて起動する為の「tigervncserver@.service」がパッケージに同梱されていた。
しかしながら、1度接続しログアウトを行うと、tigervncserverサービスも終了し、
再接続する場合は、再度起動しなければならない。

〇 対応方法

・systemdの.serviceファイルをコピーしてカスタマイズする
・tigervncserver@.service を直接変更する
・systemctrl edit コマンドを使う
等々、手法はあるが。

無難にsystemctrl editを使う。パッケージアップデートでtigervncserver@.serviceが
上書きされても困るし。。。

# systemctl edit tigervncserver@.service

[Service]
Restart=on-success

上記2行を追記し保存。

〇 弊害

tigervncserverが起動している状態では、XWindowでのローカルログインは出来ない現象が発生している。
おそらく仮想Xセッションが保持されている為と思われる。
ローカルディスプレイを使用する場合は、tigervncserverサービスは停止させる必要がある。
(参考)  https://github.com/TigerVNC/tigervnc/issues/684#issuecomment-494385395

2024-11-05 05:06
netstaff

パーティションのUUIDを一意に指定(変更)したい場合は

以下コマンドは、LinuxOS上で操作する事を想定しています。

〇 パーティションが ext2/ext/ext4 の場合
  tune2fs -U UUID device名

   UUID指定の場合
   例) # tune2fs -U 01234567-0123-0123-0123-0123456789ab /dev/sda1

   UUID任意の場合
   例) # tune2fs -U `uuidgen` /dev/sda1

〇 パーティションが xfs の場合

   xfs_admin -U UUID device名

   UUID指定の場合
   例) # xfs_admin -U 01234567-0123-0123-0123-0123456789ab /dev/sda1

   UUID任意の場合
   例) # xfs_admin -U `uuidgen` /dev/sda1 

〇 パーティションが fat/vfat の場合

   mkdosfs -i UUID /dev/sda1 

  例) # mkdosfs -i 01234567 /dev/sda1
 

  ※1 確認コマンドでは「0123-4567」と表示されるが、指定する場合はハイフンを除く事
  
  ※2 Linuxのディストリビューションにより、fatlabel (dosfslabel) でもUUIDの変更が可能
      debian12  fatlabel 4.2 (2021-01-31)  -i オプションあり
      Rcoky8.10 fatlabel 4.1 (2017-01-24)  -i オプションなし

2024-11-15 11:01
netstaff

ログに systemstats_linux: unexpected header length in /proc/net/snmp. 237 != 224 が表示される

【環境】

OS     : Debian12 (bookworm) / Armbian
ARCH : arm64
Kernel: 6.6.61
net-snmp: 5.9.3+dfsg-2 (arm64) 

【状況】

syslogに1分おきに以下のログが書き込まれる。
snmpd[1899]: systemstats_linux: unexpected header length in /proc/net/snmp. 237 != 224

googleと結構Hitする。
https://github.com/net-snmp/net-snmp/issues/786
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1069087

debianのログレポートでは、6.6.Xから表示されていたとの書込みされていた。
既に新しいVersionでfixされているようだが、パッケージを使用しているので、
パッケージ側で対応されるまで静観する事としたが、あまりにもログが出すぎるので、
rsyslogのフィルター機能を使ってログ出力を抑制した。

【対応手法】

# cd /etc/rsyslog.d
# vi snmpd_ignorelog.conf

:msg, contains, "systemstats_linux: unexpected header length in /proc/net/snmp" ~

 # systemctl restart rsyslog

再度ログを確認し、数分待っても新たに 「systemstats_linux: unexpected header length in /proc/net/snmp. 237 != 224」
が追記されていない事を確認

2024-11-18 12:56
netstaff

シングルボードコンピュータ(SBC)のマスターディスクの作り方

【趣旨】

RaspberryPi, OrangePi, BanaPi などで、複数台を構築する際に利用。

〇 利点

  •  HDD保管領域の容量節約
  •  イメージをSDカードへ展開する時間の短縮

〇 欠点

  • 面倒くさい
  • HDD保管領域や作業時間が十分にに取れる場合は、
    マスターとなるSDカードを空のSDカードへディスクコピーしたほうが簡単

    ※ 滅多に行わないので備忘として残す

【作業環境】

手頃なLinuxOS端末 -- 母艦OSと呼称。
※ SDカードで使用されているファイルシステムは、サポート可能である事。
※ FAT, ext4など

【情報収集】

  • SDカードのOSはArmbian
  • SDカードの総容量は32GB
  • Loaderはu-bootが使用されている。
    母艦OSにSDカード(USB変換アダプタなどで)を認識。認識デバイス /dev/sdiと仮定。

# fdisk -l /dev/sdi

ディスク /dev/sdi: 29.2 GiB, 31331450880 バイト, 61194240 セクタ
単位: セクタ (1 * 512 = 512 バイト)  ・・・
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xb765619f
デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdi1           8192  1056767  1048576   512M ea Rufus alignment   ・・・
/dev/sdi2        1056768 60555263 59498496  28.4G 83 Linux

# lsblk -f /dev/sdi

NAME   FSTYPE LABEL      UUID                                 MOUNTPOINT
sdi
 |-sdi1 vfat   armbi_boot A63B-8E78
 |-sdi2 ext4   armbi_root 1364b180-84ba-4ee5-b238-8aff727daf80

# mkdir /mnt/{sdi1,sdi2}
# mount /dev/sdi1 /mnt/sdi1
# mount /dev/sdi2 /mnt/sdi2
# df -h /mnt/sdi1 /mnt/sdi2

ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sdi1        511M   70M  442M   14% /mnt/sdi1    ・・・
/dev/sdi2         28G  1.8G   26G    7% /mnt/ddi2       ・・・

# umount /mnt/sdi1
# umount /mnt/sdi2
# rmdir /mnt/sdi1 /mnt/sdi2

【バックアップ】

母艦OSの作業場所は、
・バックアップ /home/user01/backup

(1) MBR領域の取得

第1パーティションの開始セクターは8192。(【情報収集】 )
0~8191 までが、Loaderが起動されるまでの情報が保存されている。

  • fdiskの結果(【情報収集】 ) から、1セクタは512Byte よって、bs=512
  • セクターの0-8191まで取得したいので、count=8192

# dd if=/dev/sdi of=/home/user01/backup/dd-mbr-8192.img bs=512 count=8192

(2) 第1パーティションの取得

vfat領域の為、tarで取得

# mkdir /mnt/SDCARD
# mount /dev/sdi1 /mnt/SDCARD
# cd /mnt/SDCARD
# tar zcf /home/user01/backup/sdi1.tar.gz ./
# cd /
# umount /mnt/SDCARD
# rndir /mnt/SDCARD

(2) 第2パーティションの取得

ext4領域の為、dumpコマンドで取得。(この辺りは好みで)

# /sbin/dump -0u -z9 -b 20 -f /home/user01/backup/sdi2.dump /dev/sdi2 && sync

【イメージ作成】

母艦OSの作業場所は、
・作成場所 /home/user01/work

(1) ディスク容量の確保

今回2つのパーティションを作成するが、作成後に拡張出来るのは第2パーティション以降の空き容量を第2パーティションとする事が出来る。
よって第1パーティションは後で拡張出来な事を考慮する。(【情報収集】 , )

  • 第1パーティションは、そんまま512MB
  • 第2パーティションは、2GB
    計、2.5GBの領域を準備する。

# dd if=/dev/zero of=/home/user01/work/master.img bs=1M count=2500 && sync
 → fallocate コマンドでも良いが、最終的にxzで圧縮するので/dev/zero のほうが圧縮率が良さそう?

2500+0 レコード入力
2500+0 レコード出力
2621440000 bytes (2.6 GB, 2.4 GiB) copied, 1.4998 s, 1.7 GB/s

# losetup -f /home/user01/work/master.img
# losetup -l

NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                DIO LOG-SEC
/dev/loop0         0      0         0  0 /home/user01/work/master.img   0     512

(2) MBR領域の展開

バックアップしたMBRのイメージ dd-mbr-8192.img を展開する。

# dd if=/home/user01/backup/dd-mbr-8192.img of=/dev/loop0

8192+0 レコード入力
8192+0 レコード出力
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.086115 s, 48.7 MB/s

(3) fdiskで領域の修正

# fdisk -l /dev/loop0

ディスク /dev/loop0: 2.5 GiB, 2621440000 バイト, 5120000 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xb765619f
デバイス     起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/loop0p1          8192  1056767  1048576   512M ea Rufus alignment
/dev/loop0p2       1056768 60555263 59498496  28.4G 83 Linux

/dev/loop0 の総容量は2.5GBに対して、強制的に32GBのSDカードのMBR領域を上書きしたので、
第2パーティション /dev/loop0p2 の終了位置 60555263が、最大5120000 セクタを超えている。
第2パーティションを削除/新規作成して正しい状態に戻す。

# fdisk /dev/loop0
  p (確認)
  d -> 2 (第2パーティション削除)
  n -> p -> 2 -> 1056768(開始位置) -> 5119999(終了位置) ※値は既定値最大
  p (確認)
  w (書込み)

パーティション情報の再読み込みに失敗しました。: Invalid argument
カーネルは古い情報を使用しています。新しい情報を利用するには、システムを再起動するか、もしくは partprobe(8) または kpartx(8) を実行してください。

(4) 第1/第2パーティションのファイルシステム作成

使用している母艦OSでは、/dev/loop0p1, /dev/loop0p2 が作成出来ずに、partprobe or kpartx で認識させる事になる。

# kpartx -a /dev/loop0
# ls -l /dev/mapper/loop0p*

lrwxrwxrwx 1 root root 7 11月 24 07:43 /dev/mapper/loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 11月 24 07:43 /dev/mapper/loop0p2 -> ../dm-1

パーティションラベルとUUIDを指定して、ファイルシステムを作成
# mkfs.vfat -n armbi_boot -i A63B8E78 /dev/mapper/loop0p1
# mkfs.ext4 -L armbi_root -U 1364b180-84ba-4ee5-b238-8aff727daf80 /dev/mapper/loop0p2

パーティションラベルとUUIDが指定した通りとなっているか確認
# lsblk -i -f /dev/loop0

NAME      FSTYPE LABEL      UUID                                 MOUNTPOINT
loop0
|-loop0p1 vfat   armbi_boot A63B-8E78
`-loop0p2 ext4   armbi_root 1364b180-84ba-4ee5-b238-8aff727daf80

(5) 第1/第2パーティションのデータリストア

# mkdir /mnt/{sdi1,sdi2}
# mount /dev/sdi1 /mnt/sdi1
# mount /dev/sdi2 /mnt/sdi2

# cd /mnt/sdi1
# tar zxfv /home/user01/backup/sdi1.tar.gz
# cd /mnt/sdi2
# restore -r -f /home/user01/backup/sdi2.dump && sync
# rm restoresymtable

# cd /
# umount /mnt/sdi1
# umount /mnt/sdi2
# rmdir /mnt/sdi1 /mnt/sdi2

(6) loop0デバイスの解除

# kpartx -d /dev/loop0
# ls -l /dev/mapper/

合計 0
crw------- 1 root root 10, 236 11月 24 07:43 control

# losetup -l

NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                      DIO LOG-SEC
/dev/loop0         0      0         0  0 /home/user01/work/master.img   0     512

# losetup -d /dev/loop0
# losetup -l
(loop0デバイスが未割当状態を確認)

# ls -lh /home/user01/work

-rw-r--r-- 1 root root 2.5G 11月 24 08:17 master.img

(7) 中間ファイル削除

# rm -fr /home/user01/backup

# xz /home/user01/work/master.img
# ls -lh /home/user01/work

-rw-r--r-- 1 root root 535M 11月 24 08:17 master.img.xz

以上で完成である。
SDカードのディスクイメージ 32GBが、圧縮させると535MBとなるので保管や配布等には向いている。

2024-11-24 10:49
netstaff

RockyLinux8 nftablesをDDNS対応(自宅のグローバルIPが動的の場合など)にしたい

nftablesでは、IPアドレスやポート等の指定でアクセスコントロールを行う。
FQDNでは登録が出来ない。しかしながら、githubを巡回している際に、まさに欲しかった機能を
開発されているソースを見かけたので実装した。

〇 プログラム  azlux / nft-dns

https://github.com/azlux/nft-dns

〇 動作

動作は至ってシンプルで、通常通りnftablesを動作させておき、
nft-dnsが起動時に設定ファイルから、ホスト名(FQDN)を名前解決。
nftコマンドで、予め定義されているテープルへIPアドレスで登録。

nft-dns 初回動作後はデーモンとして常駐。デフォルト300秒 スリープして再度名前解決。
IPアドレスが変更されていれば、nftコマンドで再登録される。

〇 注意

アクセスコントロール(ACL)において、ホスト名(FQDN)で名前解決での登録は脆弱であるという考えもあると思う。
代表されるものに、「DNSキャッシュポイズニング(キャッシュ汚染)」があるが、nft-dnsの設定ファイルで、
名前解決するDNSサーバを指定出来る。信頼のおけるDNSサーバーを指定すれば、精神的に楽になるだろう。

〇 インストール

debianではパッケージが用意されているようだが、RockyLinux用は無いので手動インストールを行う。

# dnf install python3.11.x86_64 python3.11-pip.noarch python3.11-pip-wheel.noarch
    → デフォルトの3.6, 試しにインストした3.9では動作せず。
        3.11 で動作確認

# dnf install python3.11-dns.noarch
# pip3.11 install pydantic

# git clone https://github.com/azlux/nft-dns.git
# cd nft-dns
# install -d /opt/nft-dns/{bin,etc,systemd}
# install -m 0755 nft-dns.py /opt/nft-dns/bin
# install -m 0644 entry.py /opt/nft-dns/bin
# install -m 0644 nft-dns.conf /opt/nft-dns/etc
# install -m 0644 nft-dns.service /opt/nft-dns/systemd
# ln -s /opt/nft-dns/systemd/nft-dns.service /lib/systemd/system

# vi /opt/nft-dns/systemd/nft-dns.service
   ExecStart行を変更

*** nft-dns.service.org 2024-04-30 20:05:42.087115770 +0900
--- nft-dns.service     2024-04-30 20:41:19.788540171 +0900
***************
*** 6,12 ****
  [Service]
  Type=simple
! ExecStart=/opt/nft-dns/nft-dns.py
  Restart=on-failure
  [Install]
--- 6,12 ----
  [Service]
  Type=simple
! ExecStart=/opt/nft-dns/bin/nft-dns.py -c /opt/nft-dns/etc/nft-dns.conf
  Restart=on-failure
  [Install]

# vi /opt/nft-dns/bin/nft-dns.py

*** nft-dns.py.org      2024-04-30 15:51:26.107111494 +0900
--- nft-dns.py  2024-04-30 20:42:30.588258802 +0900
***************
*** 1,4 ****
! #!/usr/bin/env python3
  from datetime import datetime, timedelta
  import signal
  from pathlib import Path
--- 1,4 ----
! #!/usr/bin/env python3.11
  from datetime import datetime, timedelta
  import signal
  from pathlib import Path

# vi /opt/nft-dns/etc/nft-dns.conf

[GLOBAL]
#max_ttl = 86400
#min_ttl = 300
#mode = capture
#custom_resolver = "1.1.1.1"
#dry_run = False
#verbose = False
include_config_dir = /opt/nft-dns/etc/nft-dns.d

[myddnsip]
set_name = ALLOW-DNS
enable = true
family=ip
table=filter
domains = hoge.mydnsxxxxxx.mydns.jp

# systemctrl enable nft-dns.service
# systemctrl start nft-dns.service
# systemctrl status nft-dns.service

● nft-dns.service - NFTABLES DNS support
   Loaded: loaded (/opt/nft-dns/systemd/nft-dns.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2024-11-21 05:30:08 JST; 3 days ago
 Main PID: 264877 (python3.11)
    Tasks: 1 (limit: 4408)
   Memory: 21.7M
   CGroup: /system.slice/nft-dns.service
           mq264877 python3.11 /opt/nft-dns/bin/nft-dns.py -c /opt/nft-dns/etc/nft-dns.conf

11月 24 15:38:40 test.example.jp nft-dns.py[264877]: 2024-11-24 15:38:40,814 INFO:Sleeping for 302s
11月 24 15:43:42 test.example.jp nft-dns.py[264877]: 2024-11-24 15:43:42,855 INFO:Sleeping for 302s
11月 24 15:48:44 test.example.jp nft-dns.py[264877]: 2024-11-24 15:48:44,899 INFO:Sleeping for 302s
11月 24 15:53:46 test.example.jp nft-dns.py[264877]: 2024-11-24 15:53:46,941 INFO:Sleeping for 302s
11月 24 15:58:48 test.example.jp nft-dns.py[264877]: 2024-11-24 15:58:48,982 INFO:Sleeping for 302s
11月 24 16:03:51 test.example.jp nft-dns.py[264877]: 2024-11-24 16:03:51,024 INFO:Sleeping for 302s
11月 24 16:08:53 test.example.jp nft-dns.py[264877]: 2024-11-24 16:08:53,064 INFO:Sleeping for 302s
11月 24 16:13:55 test.example.jp nft-dns.py[264877]: 2024-11-24 16:13:55,105 INFO:Sleeping for 302s
11月 24 16:18:57 test.example.jp nft-dns.py[264877]: 2024-11-24 16:18:57,144 INFO:Sleeping for 302s
11月 24 16:23:59 test.example.jp nft-dns.py[264877]: 2024-11-24 16:23:59,185 INFO:Sleeping for 302s

# nft list ruleset

(抜粋)
set ALLOW-DNS {
        type ipv4_addr
        flags interval
        elements = { 203.0.113.100 }
}

chain INPUT {
        type filter hook input priority filter; policy drop;
        ct state new tcp dport 22 ip saddr @ALLOW-DNS accept
}

「ALLOW-DNS」リストに、hoge.mydnsxxxxxx.mydns.jpのIPアドレス 203.0.113.100 が登録され、
「INPUT」チェーンで、ソースIPが@ALLOW-DNS に登録されているリストを参照。かつ、destポートは、22/TCPはacceptする

このnft-dns.serviceでは、300秒おきにチェックしているが、
自宅RouterのグローバルIPが変更されているかをチェックするスクリプト。
変更された場合、DDNSサーバー(ここではMyDNS)へ変更を通知し、反映タイミング。キャッシュ時間待ち等を含めると、
トータルで数十分は待たされる事にはなるが、有効活用したい。

2024-11-24 16:48
netstaff

ddclient 4.0.0 + MyDNS 対応パッチ を作ってみた。

〇 環境

 RaspberryPi
  - Raspberry Pi OS
   - Debian 11 bullseye

〇 ddclient

 https://github.com/ddclient/ddclient
 - Releaseバージョン 4.0.0 をベースに変更

〇 作成目標

 ddclient 4.0.0 にて、IPv4のIPをMyDNSにて登録出来るようにしたい。
 ※ 本家ddclient(プログラム上)自体は、IPv6に対応しております。

〇 作成状況

 ベータ版

  • IPv4の動作を焦点にして変更。動作テストを経て、現在エージング中。
  • IPv4のグローバルIPアドレスは、WEB経由で取得している。
  • IP更新通知方式は、HTTP(s)-BASIC を採用。
  • IPv6部分に関しては当環境で不要の為、未確認。
  • 本家ddclientはGPLライセンスの為、当変更部分もGPLライセンスに準ずる

〇 適用方法

 (1) ddclient本家より、ddclient-4.0.0を入手する

  https://github.com/ddclient/ddclient/releases/tag/v4.0.0
  https://github.com/ddclient/ddclient/releases/download/v4.0.0/ddclient-4.0.0.tar.gz

$ wget "https://github.com/ddclient/ddclient/releases/download/v4.0.0/ddclient-4.0.0.tar.gz"

 (2) 当パッチを入手する

  パッチファイルはこちらに置いておきます。修正等の参考になれば幸いです。
  ※ オリジナルファイルかどうかの確認は、下記のハッシュ情報を参考にしてください。
      ※ 事前連絡なしにパッチファイルの公開を中止する場合がありますので、ご了承ください。

  [パッチ適用前] 

  4a38488128c3af00518cfe7e5d862a5c72455cc5f6346975c6e14f20452f0355 ddclient-4.0.0_MyDNS-Add-0.6.patch
  15796e39d8db448a77758aa3f691797bdfccbf613ec87d3b3aa4a8632cb0d963  ddclient.in.org
  8a01b0d7f0eb8f1da07244183945ee5ab264ac93eb2e5729b142175291afc297  ddclient.conf.in.org

  [パッチ適用後]

  8965ae9286bbd432a6a6faa461cfe5404c0bfb79ec713923eb8db3d981ff2a81  ddclient.in
  08afd19dd2582f121e27a7d7cc1f2f70267a5c066ebba63b3210f848cf4c70d9  ddclient.conf.in

 (3) パッチを適用後にビルドする

  当環境の管理方針は、ソースからビルドしたソフトやオリジナルスクリプトは、/opt 配下にインストールしているので、インストール先: /opt/ddclient とした。
 
 ./configure --help を参考に適時変更のこと。

$ tar zxfv ddclient-4.0.0.tar.gz
$ cp ddclient-4.0.0_MyDNS-Add.patch ddclient-4.0.0/
$ cd ddclient-4.0.0
$ patch < ddclient-4.0.0_MyDNS-Add-0.6.patch
$ ./autogen
$ ./configure --prefix=/opt/ddclient --with-confdir=/opt/ddclient/etc
$ make
# make install

  make install直後の展開ツリー

/opt/ddclient
  |-- bin
  |   |-- ddclient
  |-- etc
  |   `-- ddclient.conf
  `-- var
      |-- cache
      |   `-- ddclient

 (4) 諸設定

  [設定方針]

  • IPアドレスチェック間隔は5分毎
  • 1日1回はIPアドレスに変更が無くても、強制的に通知する
  • IPアドレス更新はIPv4のみ
  • daemon化は、systemdを利用
 (4-1) confの設定

* 注意 *

  • confサンプル(他のDDNSサイト用)では、行末に\を付けて1行で書かれているようになっている箇所もあるが、
    password= の行で、
    password=MyPassword, 
    と行末にカンマを入れると、パスワードが"MyPassword,"となって、IP通知処理におけるログインに失敗する。
    当環境では行末にカンマは使用していない。
  • 当環境では、「max-interval=1d」を入れている。
    5分毎のチェックにてIPが変更されれば、MyDNSのサイトへIP通知(変更)処理を行いつつ、
    24時間経過してもIPが変更されていない場合は、(強制的に)IP通知(変更)処理が行われる。
    デフォルト(max-intervalを指定しない場合)は、6d (6日) としている。
    ※ MyDNSサイト利用規定において継続的に利用する場合は、最低でも1週間(7日)に1度は通知を行わなければならない。

  • プログラム(ddclient)のオプション引数よりも、confファイルの設定値が優先されるので注意のこと。
    特に、オプション 'daemon' は注意。READMEでcron起動の際に、daemon=0 を指定するように       書かれているが、daemonの最小値はデフォルトで60となっている。
    以前のバージョン(3.8.1)の認識では、daemon=0 はフォークしない動きだったが、
    4.0.0ではプログラム内の値チェック機能により、最小値60として 'daemon=60' でフォークされる。

  • フォークせずにcron起動のみで動作させたい場合は、confに'daemon'の行は書かず、
    ddclientプログラムのオプション引数にも、'daemon'オプションは指定しないこと。

  • confには、不要な行(コメント行(#)を除く)を入れないこと。
    特に、設定値を見やすくする為に行頭での改行(空白行)を入れがちだが、confファイルの読み込みで、
    空白行が1つの設定と解釈され、エラーで起動に失敗する事象を確認した。
             
             daemon=300
             syslog=yes
             (空白行)
             protocol=xxx
         :
         :
    としてしまいがちだが、少なからず4.0.0を使う場合は、空白行は使用せずに詰めて記述するようにしたほうが良い。
    ※ MyDNSに関する処理部分に関しては一応対策したつもりだが、他のDDNS処理部分は不明。

    ※ 詳しくは、debugオプションで動作を確認してみてください。
 

 # cd /opt/ddclient/etc
 # mv ddclient.conf ddclient.conf.org
 # vi ddclient.conf
    以下を参考に入力

  protocol=mydns
server=ipv4.mydns.jp
login=xxxxxxxx
password=yyyyyyyy
max-interval=1d
myhost.example.jp
 
  (4-2) systemd ユニットファイルの設定

# mkdir /opt/ddclient/systemd
# cd /opt/ddclient/systemd
# vi ddclient.service

  [Unit]
Description=Dynamic DNS Update Client
Wants=network-online.target
After=network-online.target nss-lookup.target

[Service]
Type=simple
Environment=DAEMON_INTERVAL=5m
Environment=CNF_FILE=/opt/ddclient/etc/ddclient.conf
ExecStart=/opt/ddclient/bin/ddclient --daemon ${DAEMON_INTERVAL} --file=${CNF_FILE} --syslog --foreground
Restart=on-failure

[Install]
WantedBy=multi-user.target
 

 

# ln -s /opt/ddclient/systemd/ddclient.service /lib/systemd/system/ddclient.service
# systemctl enable ddclient.service
# systemctl start ddclient.service
# systemctl status ddclient.service

● ddclient.service - Dynamic DNS Update Client
     Loaded: loaded (/opt/ddclient/systemd/ddclient.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2025-01-31 09:30:36 JST; 1s ago
   Main PID: 31957 (ddclient - slee)
      Tasks: 1 (limit: 1595)
        CPU: 586ms
     CGroup: /system.slice/ddclient.service
             mq31957 ddclient - sleeping for 300 seconds

1月 31 09:30:36 hogehoge systemd[1]: Starting Dynamic DNS Update Client...
1月 31 09:30:36 hogehoge systemd[1]: Started Dynamic DNS Update Client.

 (4-3) 設定完了後の展開ツリー

/opt/ddclient
|-- bin
|   `-- ddclient
|-- etc
|   |-- ddclient.conf
|   `-- ddclient.conf.org
|-- systemd
|   `-- ddclient.service
`-- var
    |-- cache
    |   `-- ddclient
    |       `-- ddclient.cache
    `-- run

/lib/systemd/system/
`-- ddclient.service -> /opt/ddclient/systemd/ddclient.service

(5) Tips

  1. daemonとは別に、定時にもIP通知を行いたい場合

   daemon用confファイル、crond用confファイル、
   2つのconfファイルを準備して、それぞれ設定を行えば良さそう

  2. 設定初回時やテスト実行時は、バックグランドに不要なddclientが起動していない確認

   多重起動可能な作りとなっているので、conf設定時やテスト的にコマンド実行する場合は、
         作業終了後に、ps コマンドやpgrep コマンドなどで確認すべし

2025-02-01 02:18
netstaff

netplanでIPv6が割り当てられないよう(無効)にしたい

【環境】

Armbian 25.2.2 bookworm
  - debian 12 bookworm

 

SingleBoardConputer(SBC) では、(私の場合)debianベースを使う事が多いが、
(デフォルトの)ネットワーク設定アプリケーションが頻繁に変更されているように感じる。

現在使っている Armbianでは、
systemd-networkd.service がベースで、外部アプリnetplanと連携している

今回接続しているNetworkセグメントでは、RA (Router Advertisement; ルータ広告)が飛んでいるので
netplanで明示的に(使用しない事を)設定しないと、IPv6が割り当てられてしまう
以下の赤字を追記して、反映させればIPv6は割当されない。

$ cat /etc/netplan/armbian.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enxb0c745xxxxxx:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: [ ]
      addresses:
      - 192.168.100.100/24
      nameservers:
        addresses:
        - 8.8.8.8
      macaddress: "b0:c7:45:xx:xx:xx"
      routes:
      - metric: 200
        to: 0.0.0.0/0
        via: 192.168.100.1

 

2025-02-25 10:01
netstaff

hostnameコマンドを実行すると、「hostname: System error」と表示される

【環境】

Armbian 25.2.2 bookworm
-  Debian 12 (bookworm)

【現象】

hostnameコマンドを引数を渡して実行すると、エラーメッセージが表示され結果が表示されない。

$ hostname -f
hostname: System error
$ hostname --long
hostname: System error
$ hostname -i
hostname: System error

【対処方法】

/etc/hosts にて、127.0.1.1 の行を修正/追加する
127.0.1.1 って何? と思っていたが、バグ対応の暫定対応策らしい。
詳しくは「127.0.1.1 hosts」でgoogleってみてください。
設定時は、順番があるようですので注意のこと

127.0.1.1    fqdn shortホスト名 の順で入力

127.0.0.1  localhost
127.0.1.1  takoika.example.jp takoika localhost
(以下 略)


$ hostname --fqdn
takoika.example.jp
$ hostname --short
takoika

【参考】
https://www.debian.org/doc/manuals/debian-reference/ch05.ja.html#_the_hostname_resolution

 

2025-02-27 02:32
netstaff

debian12 IPv6が割り当てられないよう(無効)にしたい

【OS 全体でIPv6を無効にする】

/etc/sysctl.conf もしくは、/etc/sysctl.conf.d/ファイル名.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

sysctl -p -f 設定したファイル名
# sysctl -p -f /etc/sysctl.conf
          or
# sysctl -p -f /etc/sysctl.conf.d/ファイル名.conf

【インターフェース 単位でIPv6を無効にする】

/etc/sysctl.conf もしくは、/etc/sysctl.conf.d/ファイル名.conf

net.ipv6.conf.<インターフェース名>.disable_ipv6 = 1

インターフェース名がenx010203040506 の場合
net.ipv6.conf.enx010203040506.disable_ipv6 = 1

sysctl -p -f 設定したファイル名
# sysctl -p -f /etc/sysctl.conf
          or
# sysctl -p -f /etc/sysctl.conf.d/ファイル名.conf

 

2025-05-03 11:36
netstaff

Windows

Go to category

Windows11で、Win32DiskImagerが立ち上がらない

著者の環境では、「Google ドライブ (パソコン版ドライブ)」が常駐している状態だと、
Win32DiskImagerが立ち上がらない状態を確認しています。

著者がWin32DiskImagerを利用する場合には、常駐タスクアイコンを右クリック。歯車マークから一旦終了させれば、
Win32DiskImagerは立ち上がりました。
おそらく「Google ドライブ (パソコン版ドライブ)」がUSBメモリードライブを占有した状態と予測しています。

Google ドライブ (パソコン版ドライブ)を利用中の方で、「Win32DiskImager」が立ち上がらない方は、
Google ドライブ (パソコン版ドライブ)を終了させてみてください。

 

2022-09-18 12:57
netstaff

Windows10で、固定IP設定なのに169.254.x.xが割り当てられ、ネットワーク接続できない

【結論】
設定IPアドレスが重複(2台以上のデバイスで同じIPを使用)されている可能性がある。
※ 自分が設定や変更してなくても、他の人が空きIPだと思って接続している場合がある

【現象】
「自動構成 IPv4 アドレス」にDHCP未取得時のIPレンジ(169.254.38.105)が割り当てられ(優先)
 IPv4 アドレス に、設定したプライベートIP 192.168.0.115に(重複)と表示される。

 ※ この「重複」は、IPアドレスが重複割当されている事を意味しているようだ。
     最初は、169.254.x.x と 192.168.0.101が2つ設定されているから重複、と勝手に勘違い。

     Windows7の頃、IPを二重割当(重複)させると、ポップアップで警告メッセージで出ていた記憶があったので、
     すぐに「同じIPを2台の機器に設定している」と気づけず。。。。

【原因】
 数時間前に設定した、NW機器の設定ミス

 Windows10が起動中(192.168.0.101)で、NW機器のSrcNAT設定をしたが、
 その後、最終的にSrcNATは行わない方向となり、今回設定したSrcNAT設定を削除しなければならないのに、一部設定が残っていた。

  たぶん、NW機器上では内部的にエラーになっていたはずだが、WEB設定の際には特に気づかず、
  Windows10 OS再起動中に、192.168.0.101の使用優先権がNW機器に移り、
  Windows10 OS起動後に、192.168.0.101が他デバイスで使用中であったため、強制的に169.254.38.105 を割り当てて、
  IP重複を回避していた模様。

  私の認識では、169.254.x.x は、「DHCP未取得時に設定されるアドレス」という認識だけで、今回のような事でも、
  169.254.x.x が割り当てられるとは思っていなかった。

C:\Users\User001>ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: clientpc001
   プライマリ DNS サフィックス . . . . .: chovits.net
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: chovits.net

イーサネット アダプター イーサネット 1:

   接続固有の DNS サフィックス . . . . .:
   説明. . . . . . . . . . . . . . . . .: Realtek PCIe GbE Family Controller
   物理アドレス. . . . . . . . . . . . .: D0-50-99-XX-XX-XX
   DHCP 有効 . . . . . . . . . . . . . .: いいえ
   自動構成有効. . . . . . . . . . . . .: はい
   自動構成 IPv4 アドレス. . . . . . . .: 169.254.38.105(優先)
   サブネット マスク . . . . . . . . . .: 255.255.0.0
   IPv4 アドレス . . . . . . . . . . . .: 192.168.0.101(重複)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.0.1
   DNS サーバー. . . . . . . . . . . . .: 8.8.8.8
   NetBIOS over TCP/IP . . . . . . . . .: 有効

C:\Users\User001>

2022-12-02 07:09
netstaff

vmware workstation 16.2.4 で、仮想ホスト(Windows10)が Unsupported Processor で起動しない

vmware workstation上の仮想ホストで、Windows10 または、Windows11に、WindowsUpdate 21H2 や 22H2をインストールすると、
(仮想ホストの) Windows OS再起動後に、ブルースクリーン (BSOD) が表示され、エラーメッセージ:Unsupported Processor
が表示される。

自動的にOSは再起動が行われ、またまたブルースクリーン。3回目の起動で、OSの自動修復が行われ、起動完了する。
起動後のWindowsは、WindowsUpdate実施前状態にロールバックされ、実質、WindowsUpdateが行えない状態となる。

【vmware社からの公式発表】
Windows 10 or Windows 11 may BSOD in a VM on VMware Workstation while using Host VBS Mode
https://kb.vmware.com/s/article/90134

This issue is resolved in Workstation 17.0 and later versions.
vmware workstation 17では解決済み。
→ つまりは、vmware workstation17に VerUpしろってことみたい
→ これって、workstation16系では修正するつもりは無いように思える

〇 2022/12/22追記
vmware workstationにて脆弱性 (CVE-2022-31705)が発見される。
https://www.vmware.com/jp/security/advisories/VMSA-2022-0033.html
この脆弱性を修正したバージョン 16.2.5 がリリース。併せて、この記事(Unsupported Processorで起動しない)の
不具合も解消されている。

再度、https://kb.vmware.com/s/article/90134 にアクセスすると、
「This issue is resolved in Workstation 16.2.5, 17.0 and later versions.」と記事が修正されていた。

【対処方法】
vmware workstation のバージョンを16.2.5へアップデートする

【暫定対応】

ホストOS側の設定 (仮想ホスト側ではありません)
「デバイスセキュリティ」→「コア分離 (コア分離の詳細)」→ 「メモリーの整合性」を「オン」から「オフ」へ変更
※ セキュリティレベルが低下するらしいので注意の事

【対応経緯】

以下の方法は、私が行った方法で暫定ではあるが解消している。
(ググれば、世界中の方々が同問題に直面し、対処方法を記載してくれている)

(1) 仮想ホスト(Windows10Pro)に21H2へUpdate。仮想ホストのOS再起動後に、この問題に直面。
     結局、自動OS修復が実行され、WindowsUpdate 21H2が当たっていない状態。

(2) CPU数をシングル(プロセッサ数1:プロセッサ毎のコア数1)にすれば良いらしいとの情報で、CPUの割当を変更した
     → CPU処理不足で、OS起動もかなり「もったり」状態

(3) WindowsUpdate 21H2を適用してOS再起動。
     → (CPU 1 なので)、ちゃんと立ち上がってきた。

(4) Windows10を終了させ、CPUプロセッサ数を元の状態(プロセッサ数1:プロセッサ毎のコア数2)へ変更し、OS起動。
     → 見事にブルースクリーン。速攻で仮想ホストを終了。(OSの自動修復がかからないように)
     → 再度、(プロセッサ数1:プロセッサ毎のコア数1)にして、OS起動

(5) WindowsUpdate 22H2を適用してOS再起動。

(6) Windows10を終了させ、CPUプロセッサ数を元の状態(プロセッサ数1:プロセッサ毎のコア数2)へ変更し、OS起動。
     → またmた、見事にブルースクリーン。速攻で仮想ホストを終了。(OSの自動修復がかからないように)
     → 再度、(プロセッサ数1:プロセッサ毎のコア数1)にして、OS起動

(7) さらに情報収集して、
    「Windowsセキュリティ」のコア分離->メモリ整合性を"オフ"にすると良いらしい。との情報

 (7-1) [スタートボタン] -> 上部の検索できるところで、「windows セキュリティ」と入力。(windows と セキュリティの間は半角スペース)
         もしくは、
         マウスポインターを[スタートボタン]上に合わせ、右クリック。「設定」 をクリック。
         左メニュー「プライバシーとセキュリティ」→ 右上の「Windows セキュリティ」→「Windows セキュリティを開く」

(7-2) 「デバイスセキュリティ」→「コア分離 (コア分離の詳細)」→ 「メモリーの整合性」を「オン」から「オフ」に変更。
         OS再起動が促されるので、OS再起動を実施。

(8) vmware workstation16を立ち上げ、仮想ホスト WIndows10のCPU割当を(プロセッサ数1:プロセッサ毎のコア数2)へ変更

(9) 仮想ホスト(Windows10)が立ち上がる。

【最後に】

上記の方法は、暫定対応です。
ご丁寧に、コア分離->メモリ整合性の部分の注意メッセージで、
「メモリ整合性はオフです。お使いのデバイスは脆弱な状態にある可能性があります」と表示されています。

決して気持ちの良い状態ではないのですが、前述の通り、workstation16系の修正版が出れば良いけど、望み薄な状態。
vmware workstation17を購入するか、それとも、Oracle VirtualBoxを使ってみるか。
正直なことろ、(このような状態で) キャッシュアウトは苦しい。

 

2022-12-21 21:42
netstaff

DLNAサーバー + VLC(VideoLAN) ユニバーサルプラグ&プレイでDLNAサーバーが表示(検索)されない

家庭内LAN環境において、DLNAサーバーを起動させて、VLCで視聴するケースの場合、
家庭内LANネットワークが一般の方に比べて複雑の方は、VLCで視聴出来ないケースがあります。

【遭遇する可能性がある方】

・クライアント端末(VLCがインストール)されている端末で、ネットワークI/Fが複数存在し、
2つ以上のセグメントで利用している場合で、かつ、DLNAサーバーがあるセグメントは、
デフォルトGWが設定されていない側のセグメントに接続している。

・(著者の場合)OpenVPN + DLNAサーバー + VLC
出先(出張先等)から撮り貯めた動画ファイルを視聴したくて、調査/検証している際に遭遇。
クライアント端末(VLC)は、物理NIC + TAPネットワークデバイス(OpenVPN)

【解決方法】

DLNAサーバー ~ VLC 間は、UPnP(マルチキャストアドレス)を使用してます。
VLCのデフォルト設定では、デフォルトGWが設定されているセグメント側のI/FでUPnPを通信する模様。

以下のように設定変更する事で、DLNAサーバーと通信が可能となった。

  1. ツール > 設定 > 左下の[設定の表示]で「すべて」を選択。
  2. [ストリーム出力]の[出力手段]を選択。
  3. 右側の[マルチキャスト出力インターフェース]にインターフェース名を入力する
  4. [保存]をクリックして、一度VLCを終了させる。
  5. VLCを起動して、[プレイリスト]の[ユニバーサルプラグ&プレイ]をクリックする

※ Windowsの場合、インターフェース名が「ローカルエリア接続」とか「イーサネット1」とか日本語だったり、
OpenVPNのTAPネットワークデバイスも、インターフェース名に「OpenVPN TAP-Windows6」とかスペースが使われている。
VLCが正しく認識するか心配だったので、インターフェース名を「Ethernet1」とか「TAP0」とかのアルファベットに変更した

2023-02-12 09:02
netstaff

WIndwows11 再起動の度にシステム音がデフォルト(100%)に戻る

[状況]

サウンドの音量設定にて、システム音が大きいので、
100% -> 20% に設定していたが、サウンドがうるさいなぁ~と思い、
設定を確認すると、100%(デフォルト)状態となっていた。
再度、100% -> 20%に再設定しても、OS再起動の度に100%に戻ってしまう

[結論]

オーディオドライバーのダウングレードを実施した

[詳細]

思い当たるとすれば、オーディオドライバーのバージョンアップを実施した後からと思われる。
同様な事が発生しているのであれば、ドライバーバージョンを確認して欲しい。

不具合が発生したバージョン (コントロールパネル:プログラムと機能)
・ Realtek Audio Driver 6.0.9605.1

不具合が解消されたバージョン (マザボメーカーサイトより再入手)
・ Realtek Audio Driver 6.0.9601.1

 

ドライバーバージョンアップのきっかけは、マザボメーカーのユーティリティソフト(LiveUpdate)で
最新ドライバーが提供されている情報が表示されたので、アップデートした。
googleったら、realtekドライバーは以前にも、同様な事象が発生しる記事があったので、その記事を参考にした。
その記事では、
OS起動時に立ち上がる「スタートアップ アプリ」(タスクマネージャー:タブ「スタートアップ アプリ」)で
「Realtek HD Audio Universal Service」をオフにするとあった。

私の環境(Windows11 22H2) では、
RtkAudUService64.exe (説明欄にRealtek HD Audio Universal Serviceと明記)
こちらを、無効化してOS再起動を実施。音量設定を変更して再度OS再起動。音量設定が意図した音量(デフォルトに戻らない)である事を確認した。

この対応でも良かったのだが最終的には、
Realtek Audio Driverを以前使用していたバージョンに戻した。

2023-12-18 02:23
netstaff

ブラウザ経由でファイルサーバーのディレクトリを開きたい [Firefox内でファイル一覧]

主要なブラウザは、セキュリティの観点からローカルファイルの実行が制限されている。

ファイルサーバーを利用している会社では、ドキュメントやマニュアル、業務文書などを保存して、
随時ファイルサーバーからファイルを参照/利用していたりするが、WEBサーバーのコンテンツ内で、
ファイルの場所を "file:///" でハイパーリンクを貼り、クリックするとファイルやフォルダーが開けていた。
実に便利な機能である。
しかしながら、その機能が上述したブラウザの制限により、動作しなくなっている。

ブラウザ内でファイル/フォルダの一覧を表示させる方法について紹介したい。

〇 Firefox

※ Windows10, Windows11 FireFox 122.0.1 (32 ビット) にて動作確認
Firefoxでは、2通りの設定方法がある。

[方法1] about:config のUIにて設定する

(1) URL入力欄に、about:config と入力後、「エンター」押下

(2) 下記3行を入力する

設定名
capability.policy.policynames localfilelinks
capability.policy.localfilelinks.sites http://192.168.1.81
capability.policy.localfilelinks.checkloaduri.enabled allAccess

2番目の「http://192.168.1.81」 は、file:/// のハイパーリンクを貼るサイトのURLです。
各自の環境に併せて、IPアドレス等を変更してください。
複数台のWEBサーバーで利用する場合は、スペース区切りで入力します。

[方法2] user.js というファイルに以下3行を記入し、FireFoxのプロファイルフォルダへ保存する

(1) プロファイルフォルダを確認する
    URL入力欄で、about:profiles と入力後、「エンター」押下

(2) [ルートディレクトリー] 右の[フォルダを開く] をクリック

(3) このディレクトリ内に "user.js" が無いか確認。(デフォルトは存在しない)

  •  ファイルが存在する場合は、"user.js"を開き、下記3行を追記する。
  •  ファイルが存在しない場合は、テキストエディターなどで下記3行を入力。ファイル名を"user.js" として、保存する。
user_pref("capability.policy.policynames","localfilelinks");
user_pref("capability.policy.localfilelinks.sites","http://192.168.1.81");
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");

2番目の「http://192.168.1.81」 は、file:/// のハイパーリンクを貼るサイトのURLです。
各自の環境に併せて、IPアドレス等を変更してください。
複数台のWEBサーバーで利用する場合は、スペース区切りで入力します。

(4) Firefoxを再起動する。

※ 注意
Firefoxを新規に開く時に"user.js"が読み込まれ、Firefoxを閉じた時に"prefs.js"に保存される。
従って1度読み込ませたら、"user.js"は不要となる。
つまり、設定を削除したいと"user.js"ファイルを削除しても、"prefs.js"に保存されているので設定は消えない。
(Firefox バージョンアップ時等は不明)
設定を削除したい場合は、[方法1]のabout:config UI で設定を削除する必要がある。

2024-02-11 15:05
netstaff

ブラウザ経由でファイルサーバーのディレクトリを開きたい [chrome内でファイル一覧]

主要なブラウザは、セキュリティの観点からローカルファイルの実行が制限されている。

ファイルサーバーを利用している会社では、ドキュメントやマニュアル、業務文書などを保存して、
随時ファイルサーバーからファイルを参照/利用していたりするが、WEBサーバーのコンテンツ内で、
ファイルの場所を "file:///" でハイパーリンクを貼り、クリックするとファイルやフォルダーが開けていた。
実に便利な機能である。
しかしながら、その機能が上述したブラウザの制限により、動作しなくなっている。

ブラウザ内でファイル/フォルダの一覧を表示させる方法について紹介したい。

〇 Google chrome

※ Windows10  121.0.6167.161(Official Build)(64 ビット) にて動作確認

Google chromeでは、拡張機能を利用して設定を行った。
拡張機能では、有志の方々がいくつか同様の拡張プログラムを提供しているが、
今回は、「ローカルファイルリンク有効化」を利用した。

(1) chromeにてchrome ウェブストアにアクセス
    https://chromewebstore.google.com/?utm_source=ext_app_menu
    上部の [拡張機能とテーマを検索] より、「ローカルファイルリンク有効化」を検索し、
    この拡張機能を"chromeに追加"する。

(2) URL入力欄で、「chrome://extensions/」と入力。
    [ローカルファイルリンク有効化] の[詳細] ボタンを押下して、
    [ファイルの URL へのアクセスを許可する] を Onの状態にする。

以上で設定は終了

2024-02-11 15:44
netstaff

ブラウザ経由でファイルサーバーのディレクトリを開きたい [Explorer連動]

今回は、ブラウザで "file:///" のハイパーリンクをクリックすると エクスプローラが起動する方法を紹介するが、
Windowsレジストリを設定するので、細心の注意を払う必要がある。
レジストリは、プログラムが随時読み書きを行っている。
ちょっとした手違いが、「Windows再起動したら、OSが立ち上がらない!」という事もありえる
ので注意して欲しい。
重要なので2回言いました

紹介にあたり、この設定は
「Webブラウザからエクスプローラーを起動する」 Gomita氏執筆
https://zenn.dev/gomita/articles/3446c5764265c2
を参考(リスペクト)させて頂きました。ありがとうございます。

〇 やりたいこと

ブラウザで "file:///" のハイパーリンクをクリックすると エクスプローラを起動したい。
(エクスプローラ上でファイル一覧を確認したい)

〇 実装環境・条件について

[ファイルサーバー]

Rocky Linux 8.8
・ httpd-2.4.37-56
・ samba-4.17.5-3
WEBコンテンツ("file:///"のリンクを貼る)は、新規作成する

[クライアント]

Windwos10/11
ブラウザは、Firefox, chrome
ブラウザからファイルサーバー上のWEBコンテンツのハイパーリンクをクリックすると、
エクスプローラで対象のディレクトリが表示される

〇 実装手順

[ファイルサーバー]

動作確認の為のhtmlを作成

<html>
<p> ServerGroup ショートカットリンク
  <ol>
    <li>Teraterm</li>
      <ul>
        <li><a href="file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\Main">本体</a> プログラム</li>
        <li><a href="file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\TTL">マクロ</a> 業務に必要なマクロ集</li>
        <li><a href="file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\INI">初期設定ファイル</a> 新人の方は、まずこれをひな型に</li>
        <li><a href="file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\TTL">ヘルプ</a> 使い方、マクロ修正時の参考に</li>
      </ul>
    <li>WinSCP</li>
    <li>VirtualBox</li>
  </ol>
</html>

通常は、href= の所に、"file/////192.168.1.81/ServerkGrp/Software/teraterm/Main" と入れるだろう。
もしくは、メールで「ここに保存したよ!」とアナウンスする場合は、
\\192.168.1.81\ServerkGrp\Software\teraterm\Main

今回の仕掛けでは、
先頭に、 file-explorer:と書くと、後述するレジストリ設定のトリガとなる。
例) file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\Main"

[クライアント側]

ユーザー名は、testuser01

(1) 参考サイトより、"エクスプローラー起動用Windows Script (file-explorer.js)"を入手 orz
     著者は、C:\Users\testuser01\browser2expolorer\file-explorer.js に配置

(2) レジストリファイルの作成
      (1)で保存場所を変更したので、こちらも修正。ファイル名は任意(file-explorer_regist.reg)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\file-explorer]
@="URL:FileExplorer Protocol"
"URL Protocol"=""

[HKEY_CURRENT_USER\SOFTWARE\Classes\file-explorer\shell\open\command]
@="\"wscript.exe\" \"C:\\Users\\testuser01\\browser2expolorer\\file-explorer.js\" \"%1\""

このレジストリ設定が完了すると、
例えば、href="file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\Main" では、
"file-explorer:" に反応して、
"wscript.exe C:\Users\\testuser01\browser2expolorer\file-explorer.js file-explorer:\\192.168.1.81\ServerkGrp\Software\teraterm\Main" が実行され、
file-explorer.js が、"explorer.exe \\192.168.1.81\ServerkGrp\Software\teraterm\Main" を実行。
結果、エクスプローラが指定のフォルダを開くという動作となる。

(3)レジストリファイル(file-explorer_regist.reg)を実行して登録する

(番外編) (3)で登録したレジストリを削除したい場合は、下記をファイルに保存して実行する

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\SOFTWARE\Classes\file-explorer]

(4) ブラウザにて動作確認

2024-02-12 15:39
netstaff

マイコン

Go to category

MPLAB X IDE v6.00 メニューの日本語化

MPLAB X IDE と Apache NetBeansの関係性が(私が)不明な状態で掲載するのもいかがなものかと思ったが、
ネットで拾った情報で、試したら日本語メニューになった。

【環境】

  • Windows11
  • MPLAB X v6.00 (MPLABX-v6.00-windows-installer.exe)
  • MPLAB XC8 (xc8-v2.36-full-install-windows-x64-installer.exe)

NetBeansの日本語翻訳 junichi11氏
https://github.com/junichi11/netbeans-translations-ja
https://github.com/junichi11/netbeans-translations-ja/releases
-> org-apache-netbeans-localise-ja-0.0.3.nbm

【適用方法】

  1. MPLAB X v6.00 インストール
  2. MPLAB XC8 インストール
  3. MPLAB X v6.00を立ち上げる
  4. メニューから「Tools」→「Plugins」を選択


  5. 「Download」タブの「Add Plugins」をクリック
  6. ダウンロードした、ファイル(org-apache-netbeans-localise-ja-0.0.3.nbm)を選択する
  7. 「Install」をクリックする
  8. 新たに[plugin Installer]ウインドウがたちがるので、「Install」→「Next」と進めていくと、
    MPLAB X IDE のリスタートの選択が出るので、リスタートする。
    おそらく、Restart Laterを選択しても、アプリを再立ち上げで反映されるはず。。。
  9. 「Restart Now」を選択し、「Finish」をクリックすると、アプリが終了→起動して、日本語メニューとなった


2025-01-04 02:46
netstaff

リモコンリレー RYO-XPX-5P (315MHz版) 操作説明 (未検証)

注意

製品自体に操作説明書が添付されておらず、ネットから情報を入手したものです。
当方、この製品に対する送信機が無いので動作未検証となり、送信機入手まで倉庫行きになるので備忘として残しています。
よって、この説明書きの信憑性は保証できません

推測ですが

  • 複数の送信機(リモコン)が登録できる (しかし、送信機を個別削除は出来ない)
    ネット情報を踏まえると、複数ボタン搭載のリモコンにも対応するようだ
 
[リモコン ボタン押下時のみリレー動作]
  1. リモコンのボタンを押している間は、リレーが動作中状態となる
  2. ボタンから手を離すと、リレーが復帰する
  操作 操作に対する反応
1 ペアリングボタンを1回押す LED赤ランプ 点灯
2 リモコンのボタンを押す LED赤ランプ 2回点滅後消灯
 
[リモコン ボタン押下毎にリレーが動作/復帰を繰り返す]
  1. リモコンのボタンを押すとリレーが動作する。ボタンから手を放しても、動作状態を維持する
  2. 再度、リモコンのボタンを押すとリレーが復帰する。ボタンから手を放しても、復帰状態を維持する
  操作 操作に対する反応
1 ペアリングボタンを2回(連続して)押す LED赤ランプ 1回点滅後点灯
2 リモコンのボタンを押す LED赤ランプ 2回点滅後消灯
 
[リモコン ボタン毎にリレー動作/復帰を割り当てる]
  • 1つのリモコンに2ボタンある (ON/OFFの表示や、1/2 と表示)時に利用
  1. リモコン ONボタン(ボタン1)を押すとリレーが動作する。ボタンから手を放しても、動作状態を維持する
  2. リモコン OFFボタン(ボタン2)を押すとリレーが復帰する。ボタンから手を放しても、復帰状態を維持する
  操作 操作に対する反応
1 ペアリングボタンを3回(連続して)押す LED赤ランプ 2回点滅後点灯
2 リモコンのONボタン(ボタン1)を押す LED赤ランプ 2回点滅後点灯
3 リモコンのOFFボタン(ボタン2)を押す LED赤ランプ 2回点滅後消灯
 
[リモコンでOFF操作を行った際に、一定時間経過(遅延)後に復帰する : OFF DELAY ]
  • このモードは付加モードで、リモコンのON/OFFを登録を済ませておく必要があると予想される
  • 選択可能な遅延時間は、5秒, 10秒, 15秒, 20秒
  操作 操作に対する反応
1 ペアリングボタンをX回 (連続して)押す
  ※ Xは、4~7を指定。遅延時間は下記参照
  •  5秒設定時: ペアリングボタン 4回操作
  • 10秒設定時: ペアリングボタン 5回操作
  • 15秒設定時: ペアリングボタン 6回操作
  • 20秒設定時: ペアリングボタン 7回操作
LED赤ランプ (X - 1) 回点滅後点灯
2 リモコンのボタンを押す
  ※ おそらく、OFFに割り当てたボタンと推測
LED赤ランプ 2回点滅後消灯
 
[本体の電源投入後にリレーを動作させる : POWER ON START ]
  • このモードは付加モードと予想
  • 本体の電源投入時に強制的にリレーが動作状態となるが、その後、リモコンでOFF/ON操作をすると復帰/動作すると予測
    本体電源投入直後は強制的にONにしたい場合に、このモードを利用すると思われる
  • OFF DELAYと組み合わせ可能かは不明
  1. 本体電源の電源を投入すると、直後リレーが動作状態となる
  2. 本体電源が切ると、リレーが復帰する (これは当然の動作だが)
  操作 操作に対する反応
1 ペアリングボタンを8回(連続して)押す LED赤ランプ 7回点滅後点灯
2 リモコンのボタンを押す LED赤ランプ 2回点滅後消灯
3 本体の電源を切る  
4 本体の電源を入れる リレーが動作する
5 本体の電源を切る リレーが復帰する
 
[初期化 : RESET ]
  • 全ての付加機能とリモコン登録を消去する
  • 残念ながら、リモコンの個別消去方法は不明 (公式な取扱説明書が無いので)
  操作 操作に対する反応
1 ペアリングボタンを9回(連続して)押す LED赤ランプ 4回点滅後消灯

 

2025-01-02 12:07
netstaff

リモコンリレー YK10A5V/12V (315MHz版) 操作説明

注意

製品自体に操作説明書が添付されておらず、購入サイトに操作説明が書かれていた。
購入サイトが販売終了した場合、操作説明が分からなくなるため、情報を残しておきます。

リモコン(送信機)は複数台登録可能。
動作モードは、Momentary / Toggle/ Latched/ Delay Mode の4種類あるが、動作確認を行ったところ、
リモコン毎に動作モードは変更されず、動作モードは単一であった。

  1. リモコンAをMomentaryモード(ペアリングボタンを1回)で登録
  2. リモコンBをToggleモード(ペアリングボタンを2回)で登録
  3. リモコンAの ボタンを押下したところ、Toggleモードであった。
    リモコンBの ボタンを押下したところ、Toggleモードであった。

以上から、リモコン毎にモードを割り当てる事は出来ないものと想定している。
(全てのモードに対しては確認していない)

  値 (HP) 備考
(所見)
  値 (HP) 備考
(所見)
Working Voltage DC 5-12V   Output Voltage
contact output
1-250V

メカニカルリレーにより、リレーの最大定格に依存
NO 20A
NC 12A 14VDC
7A 120VAC

Max current 10A       Quiescent Current 5mA  
Frequency 315 MHz   Wireless Communication RF  
Support encoding

1527 Learning code
2262 fixed code

  Wireless Communication RF  
[リモコン ボタン押下時のみリレー動作:Momentary モード]
  1. リモコンのボタンを押している間は、リレーが動作中状態となる
  2. ボタンから手を離すと、リレーが復帰する
  操作 操作に対する反応
1 ペアリングボタンを1回押す LED赤ランプ 1回点滅
2 リモコンのボタンを押す LED赤ランプ  1回点滅
[リモコン ボタン押下毎にリレーが動作/復帰を繰り返す:Toggle モード]
  1. リモコンのボタンを押すとリレーが動作する。ボタンから手を放しても、動作状態を維持する
  2. 再度、リモコンのボタンを押すとリレーが復帰する。ボタンから手を放しても、復帰状態を維持する
  操作 操作に対する反応
1 ペアリングボタンを2回(連続して)押す LED赤ランプ 2回点滅
2 リモコンのボタンを押す LED赤ランプ  1回点滅
[リモコン ボタン押下するとリレー動作後固定:Latched モード]
  1. リモコンのボタンを押すとリレーが動作する。ボタンから手を放しても、動作状態を維持する
  2. リモコン操作してもリレー状態に変化なし。復帰させる為には、供給電源をOFFにする必要がある
  操作 操作に対する反応
1 ペアリングボタンを3回(連続して)押す LED赤ランプ 3回点滅
2 リモコンのボタンを押す LED赤ランプ  1回点滅
[リモコンでOFF操作を行った際に、一定時間経過(遅延)後に復帰する : Delay モード ]
  • リモコン操作直後にリレーが動作。各遅延時間経過後にリレーが復帰する (OFF Delay)
  • 選択可能な遅延時間は、5秒, 10秒, 60秒
  操作 操作に対する反応
1 ペアリングボタンをX回 (連続して)押す
  ※ Xは、4~6を指定。遅延時間は下記参照
  •  5秒設定時: ペアリングボタン 4回操作
  • 10秒設定時: ペアリングボタン 5回操作
  • 60秒設定時: ペアリングボタン 6回操作
LED赤ランプ X回点滅
2 リモコンのボタンを押す LED赤ランプ 1回点滅
[初期化 : RESET ]
  • 設定が消去される (全てのリモコン登録が解除される)
  操作 操作に対する反応
1 ペアリングボタンを5秒間押下状態にする LED赤ランプ 4回点滅後消灯

 

2025-02-20 05:40
netstaff

ESP32-32D DEVKIT 電源ON後にrst:0x3 (SW_RESET) でループする

【現象】

DOIT社のESP32-32D DEVKITにて、Arduino IDEにてスケッチを書きESP32-32Dへ書き込み。
書き込み完了後は、自動的に再起動するが、シリアルコンソールで以下メッセージがループして
立ち上がらない。もしくは、X回ループして立ち上がる現象に遭遇した。(xは数字で不安定)

14:30:20.751 -> ets Jul 29 2019 12:21:46
14:30:20.751 -> 
14:30:20.751 -> rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
14:30:20.787 -> configsip: 0, SPIWP:0xee
14:30:20.787 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
14:30:20.787 -> mode:DIO, clock div:2
14:30:20.787 -> load:0x3fff0030,len:4660
14:30:20.787 -> load:0x40078000,len:15568
14:30:20.787 -> ho 0 tail 12 room 4
14:30:20.787 -> load:0x40080400,len:4
14:30:20.787 -> load:0x40080404,len:3152
14:30:20.787 -> entry 0x400805a0

【環境】

・ESP32-32D (USB-C) <---> Windows11 (マザーボードUSB2.0端子)
・Arduino IDE 2.3.6

【対応策】

私も困ってgoogle検索しサイトを数ページ巡回してみましたが、DOIT社のESP32ではクセがあるSoCであるようです。
対応策は、

  1. FlashROMの初期化を行う
  2. Arduino IDEの「Flash Frequency」を40MHzにする
  3. EN Pin と GNDPIN 間に0.1μFのコンデンサを接続する

【私の準備した個体では】

再起動直前まで正常に見えたので、3かな?と思いつつ順に試してみる事に

1は、Arduino IDE 2.3.6では、「Erase All Flash Before Sketch Upload」をenableに変更。
書き込み->書き込み完了->自動再起動 やはりループしている
→ USBケーブルを抜いて電源OFF。再度USB接続しても、ループする。
→ ENボタン(RESET)を押しても、ループする。

2は、Arduino IDE起動時80MHzに設定(初期状態)されていたので、40MHzに変更。
書き込み->書き込み完了->自動再起動 やはりループしている
→ USBケーブルを抜いて電源OFF。再度USB接続しても、ループする。
→ ENボタン(RESET)を押しても、ループする。

3の時は、電源OFF状態で0.1μFのコンデンサ接続後に電源ON。
→ 正常に立ち上がる。USBケーブル抜いて、入れてを3回ほど試したが、3回ともOKとなる。
→ ENボタン(RESET)を押しても、ちゃんと立ち上がる。

といっても、解せない点もある。
今回、同製品を2個準備していて、1個目でループしまくったので色々と調べてみたが、
念のためと2個目の個体は、ループしても1~4回程度のループで立ち上がる。ループしない場合もあった。そちらも、0.1μFのコンデンサ接続後は正常。

【色々試してみたこと】

上記の状況で電源周りが怪しいと薄々気づきだした。

DSP32-32Dは、ボード上にLEDが搭載されているので、試しにサンプルスケッチのLチカを書き込んでみると、コンデンサ無しでも正常に起動した。
まあ、無線系使うと消費電力上がるよね!という事になり、ESP32-32Dのデータシートをgoogle検索したが、すぐには探し出せず。

Espressif Systems社(本家)のESP-WROOM-32Dのデータシートを見たところ、
最低電流(Min) 0.5A となっているのを発見。互換品が下回ることは無いと思うので、最低でも0.5A以上は必要だろう。 
https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf

おそらくWifi + BT 両方使うようにスケッチしていたら、USB2.0での電流供給能力 0.5Aを楽に超える事が推測できる。

他にも試してみた事は、
  DSP32-32D上のUSBポートは使わずに

  • 5V(1A)のACアダプタでVIN pinへ電源供給。TX0, RX0,GNDを外付けのUSBシリアル変換モジュールで接続して起動した結果、正常起動
  • 3.3V(2A)のACアダプタで3V3 pin へ電源供給。TX0, RX0,GNDを外付けのUSBシリアル変換モジュールで接続して起動した結果、正常起動

ダメ出しで、あまり使う機会がなかったビット・トレード・ワン社の「USB CABLE CHECKER2」を引っ張り出してきて、使っていたUSBケーブル(1M)を測定してみると、[High mΩ] (1100mΩ以上)という、"そもそも、このケーブル使えねぇ~"という状態でした。

【同現象の方へ】

まずはUSBケーブルを疑ってください。
USBケーブルを複数お持ちであれば、

  • なるべく短いケーブルで試してみる。
  • 異なるメーカーのケーブルで試してみる
  • ハイパワー対応のUSBケーブル(2Aとか3Aとか流せる)を使う 

最近は、100均でも2Aや2.4A流せるケーブルが売っています。
100円ではなく200円製品だったりしますが。
※ USBケーブル自体が太いからといって安心できません。ケーブル捨てる勢いで、
    ニッパーで切断してみたら、中身のプラス(+)の線とマイナス(-)の線径が思ったより細かったという事はよくある話!?

2025-06-09 13:30
netstaff

PICkit3 は、MPLAB X IDE v6.25 以降は使用できません

PICkit3 は、MPLAB X IDE v6.25から使用できなくなりました。
よって、PICkit3を継続的に使用可能な最終バージョンは、MPLAB X IDE v6.20 という事になります。
https://www.microchip.com/en-us/about/media-center/blog/2024/discontinued-ide-support-for-gen3-tools

MPLAB社のHPより、過去のバージョンのMPLAB X IDE をダウンロードできます。
https://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem 

PICkit3の後継で最新モデルはPICKit5 となりますが、2025/06/16現在 秋月電子で15,980(税込)で販売されておりますが、
趣味的利用で思い立った時に利用する(年に数回)レベルの頻度の私としては、大変高価な代物と言えます。

MicroChip社より、PICkit Basicがリリースされております。
https://www.microchip.co.jp/information/entry_file_download.php?Name=0f4fe3fe44c2c6fec448c946f614c70ffdb770f3.pdf&ID=535f45f4624db5a92baab7125d80df75c8b95f67
2025/06/16 現在 約6000円程度で販売されておりました。
https://www.marutsu.co.jp/pc/i/3587075/
※低電圧書き込みのみとの情報あり。PICがLVP対応で無いものは使用できない模様。 

これよりも安いとなると、RASPIを使って書き込みを行うソフト pickle がある。(詳細未確認)
※ RASPIを所持している人なら選択肢の一つとなるでしょう。 
https://wiki.kewl.org/projects:pickle

2025-06-16 01:09
netstaff

無線

Go to category

ノイズ対策で使われるフェライトコア(パッチンコア)には周波数特性がある

ノイズ対策でよく使われる、フェライトコア。
「パッチンコア」とか「トロイダルコア」とも呼ばれるが、商品によって低周波用/高周波用とあるので購入の際は注意が必要。

概ね1MHzを境に、
・1MHz以下のノイズ低減用を低周波用
・1MHz以上のノイズ低減用を高周波用
のフェライトコアを用いる必要がある

単純にフェライトコアを付けても、低周波用/高周波用の違いで効果が思うように効果が出ない場合がある。
メーカー製のものは購入前に商品仕様書等を入手すれば、低周波用か高周波用かは判別できるが、アマゾン等で売られているフェライトコアは、記載されていない商品もあるので、購入時には注意した。

2022-06-17 06:18
netstaff

NetWork

Go to category

FortiGate CUIコマンド IPアドレス割当確認やarpテーブル確認

著者はFortiGate60Dを利用しており、管理画面(Web)を用いれば、(管理画面から設定した箇所の)設定確認が出来る。
しかしながら、一部の設定については、管理画面からの設定U/Iが用意されていない部分もある。
管理画面にて設定U/Iが無く、CUIコマンドで設定した場合は、確認したい設定内容や付随情報なども、CUIコマンドでしか確認出来ない場合がある。

使用頻度は低いのでコマンドを覚えておらず、利用する度にググっているが、未来永劫、ググれば必ずHitする訳ではないので、情報を残しておきたい

IPv6関連

プロバイダからのIPv6アドレス(IPoE) や、サブネットを切って、I/Fにプリフィックスを割り当てた場合など。

【IPv6割当確認】

  diagnose ipv6 address list

【近隣キャッシュ(Neighbor Cache): IPv4で云うところの arpテーブル】

  diagnose ipv6 neighbor-cache list

IPv4関連

IPv4アドレスでは、PPPoEアドレスも管理画面に表示されるので、あまりコマンドを打った事はないので、
とりあえず、対比的に認めておく

【arpテーブル】

  diagnose ip arp list

【IPv4割当確認】

  diagnose ip address list

2022-11-28 09:04
netstaff

NTT フレッツ光のMTU値について

NTT フレッツ回線にて使用するMTU値

【NTT東日本】

フレッツ 光クロス/光ネクスト/光ライト/光ライトプラス

IPv4通信 1454 byte
IPv6(IPoE)通信 1500 byte
IPv6(PPPoE)通信 1454 byte

 

情報ソース
NTT東日本 技術参考資料
https://www.ntt-east.co.jp/gisanshi/
IP通信網サービス
 - IP通信網サービスのインタ フェース 第三分冊 第43版 (2023.11)

【NTT西日本】

フレッツ 光クロス/光ネクスト/光ライト

IPv4通信 1454 byte
IPv6(IPoE)通信 1500 byte
IPv6(PPPoE)通信 1454 byte

 

情報ソース
NTT西日本 技術参考資料
https://www.ntt-west.co.jp/info/gisanshi/
IP通信網サービス
   - IP通信網サービス(フレッツシリーズ<光クロス、光ネクスト、光ライト編>)
   - IP通信網サービスのインタ フェース フレッツシリーズ <光クロス、 光ネクスト 、光ライト 編> 第28版 (2022.2.9)

2024-12-04 19:47
netstaff