alchemistarkの日記

やったことのメモ

OpenWRT VerUPに伴うトラブルというか

VerUP来てたので更新したのだが、ちょっと困ったのでメモ*1
本当に大したことではないのだが

・IPv6 PDが取得できなくなった

DUIDの欄が自動入力されているが、コレがあるとNTT網からPDを受領できなくなる。
空欄か、正式な値を入力すること とのこと。

wp.hima-jin.info


前この件について調べた時は「網から」PDを受領する時にはしなければならないという認識だったのだが…
自動生成のDUIDが入力されていても「HGWから」PDは受領できていた気がするが…?ううむ。念の為空欄にしていたのだろうか。そんな記憶はないのだが。
ともあれDUIDを空欄にしたら接続できたのでとにかくNTT回線でPDを貰うにはDUIDの設定が必要ということで。
空欄だと次回更新時にまた自動入力されてしまうので、DUID-LLを入力しておくのが良いだろうとのこと。*2


・mwan3が消えた

公式のではなく別の使ってたので公式ので上書きされちまったい。
Attended Sysupgradeでapkを再インストールする時に公式パッケージに置き換えられてしまいました。せやろな。

forum.openwrt.org


こっちのnftables対応版のmwan3を使っているのでこっちを入れねば。
導入時は/tmpにでもwgetしてapk addすること。

*1:また更新時に同じ事なるので

*2:00030001+MAC

続々・srcds更新確認

戦いは続く

alchemistark.hatenablog.jp

また止まりました。チクショーめ。

今回はUpdateResultが0のまま、FullValidateAfterNextUpdateという項目が増えて1が設定されている。
これも条件に加えればいいのだろうか…

いっそbuildidやら更新日時から引っ掛けれないものかまで考えたが
buildidはちょっとjsonをパースしないといけないっぽい シェルでやれるんか?しらんけど。*1*2
更新日時は出てくるので、比較はしんどいので変化があれば再起動ってのならできるかも。

$ ./steamcmd.sh +app_info_update +app_info_print 232250 +quit | grep "last change"
steamcmd.sh[369]: Starting  /home/steam/steamcmd/linux32/steamcmd
AppID : 232250, change number : 37180058/0, last change : Sun Jul 12 15:09:58 2026 
$ 

app_info_updateが必要か、ちゃんと効くのかはまた次回更新にならんとわかんねぇ…

で、こんな感じでどねえでしょうかと先生に確認したところ
「いやbuildid取れるだろ…」と真顔で返されたので横転

$ steamcmd/steamcmd.sh +login anonymous +app_info_update 1 +app_info_print 232250 +quit | grep -A 4 '"public"' | grep '"buildid"'
steamcmd.sh[485]: Starting  /home/steam/steamcmd/linux32/steamcmd
                                "buildid"               "24151648"
$ 

Oh…取れてるわ…

念の為にpublicとその後4行を表示して確認。大丈夫そうかな?

steamcmdはパスが通ってないと思うので、
/home/steam/steamcmd/steamcmd.shを直接実行して動作確認。

$ /home/steam/steamcmd/steamcmd.sh
steamcmd.sh[544]: Starting  /home/steam/steamcmd/linux32/steamcmd
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
Logging directory: '/home/steam/Steam/logs'
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logo
Steam Console Client (c) Valve Corporation - version 1782532820
-- type 'quit' to exit --
Loading Steam API...OK

Steam>

ここまでやってなんだが、どの方法で確認すべきか分からないので
全部チェックして通知するようにしておこう…*3
cron用スクリプト書いたらまた貼ります


とりあえずコレで様子見。

#!/usr/bin/env bash

FILE1="/mnt/app/srcds/tf-dedicated-ar/steamapps/appmanifest_232250.acf"
FILE2="/mnt/app/srcds/tf-dedicated-mge/steamapps/appmanifest_232250.acf"

#FILEからbuildid行を抜き出し、区切り文字を"とし4番目の結果を出力
ID1=$(grep "buildid" $FILE1 | awk -F '"' '{print $4}')
ID2=$(grep "buildid" $FILE2 | awk -F '"' '{print $4}')

#steamcmd実行用コンテナを設定
SRCDS="tf2-dedicated-ar"
#steamcmdのパス
CMD="/home/steam/steamcmd/steamcmd.sh"
#tf2のappID
APPID="232250"

#buildidを取得
NEWID=$(doas docker exec $SRCDS $CMD \
    +login anonymous +app_info_update 1 +app_info_print $APPID +quit \
    | grep -A 4 '"public"' | grep '"buildid"' | awk -F '"' '{print $4}')

echo "ar buildID : $ID1" 
echo "mge buildID : $ID2" 
echo "new buildID : $NEWID" 

#どちらかのbuildidが異なっているならば再起動
if [ "$ID1" != "$NEWID" ] || [ "$ID2" != "$NEWID" ] ; then
	#一旦試験用として再起動を行わず通知のみ実施する
    exit 1
else
    exit 0
fi


更新早かったな たすかるが

steamcmd.sh[778]: Starting  /home/steam/steamcmd/linux32/steamcmd
ar buildID : 24151648
mge buildID : 24151648
new buildID : 24207061

検知成功 buildIDは検知したが、UpdateResultとFullValidateAfterNextUpdateでは検知できず。
buildIDのチェックでコンテナ再起動するように修正しておいた。
これで大丈夫にしてくれー頼むー

*1:jqコマンドが必要だってさ

*2:jsonじゃないらしい。知らんがな…

*3:buildidで比較が一番スマートだと思うのでこれで行きたくはある

VPN越しに(smb)ホスト名解決するには

NetBIOSは同一ネットワーク内でしか使えないからね 困った困った

だがDNSは使えるのでDNSで解決してやりましょ。

前提がOpenWRTでDHCPでIPアドレスを配布しておりホスト名に.lanが振られていること。*1
あとウチのDNSサーバーがAdGuardなのでAdGuardの場合で説明。

smbでなかったらDNS書き換えで済むんだが、smbのアドレス指定(\\hostname\~)は
tldが無いとDNS問い合わせしようとしないので適当なtldを付与していやる必要アリ。
静的IPアドレス設定の場合もOpenWRTが.lanの名前を割り当ててないのでDNS書き換えから設定が必要。*2

OpenWRTでDHCP配布してる場合は、.lanへの接続をOpenWRTに問い合わせるようにすればOK
AdGuardのアップストリームDNSサーバーに

[/*.lan/](OpenWRTのIPアドレス)

としてやれば解決可能。

*1:DHCPのデフォルト動作なので特に設定は必要ない

*2:TLDなら何でもいいと思うが、他の端末と揃えたり分かりやすさで.lanか.localあたりにしとくのが無難だと思う

bitwardenのandroidクライアントについて

自動入力がうまくいかない。
色々試してhttpsのサイトならいけるがhttpだとダメということがわかった
だがググっても同様の現象が出てこず
導入見送りかなぁってなってる

CrowdSecにdockerコンテナのログを食わせる

ファイルにログを吐いているコンテナはボリュームマウントすればいいんだけど*1
コンテナのログに出力しておしまいのやつ*2はどうすりゃええねんってなったので

いつも通りdockerソケットを読み込んで

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

前回GIDとかappで指定してたけどdockerグループじゃないとコケるので削除 いらんかったね

acquis.yamlに---で区切って必要数追加。
コンテナ名はTrueNASのappだとix-うんちゃらかんちゃらのやつね

---
source: docker
container_name:
  - nginx
labels:
  type: nginx

コレクションはコンテナに合わせて適当に導入してくだせえ。

cscli metrics

で反映されているか確認。だけどログが流れてこないと出てこないっぽいので
わざとログイン間違えるとかでログを流してやればOK 数回程度じゃbanされないし。

*1:npm+とか

*2:nginx、authelia、他ログイン画面のあるコンテナ(joplin server、navidrome)とか

TrueNASのハードウェアを変更した

i3 4世代がi5 7世代になったよ やったね

TrueNASの設定をしっかりバックアップを取ることと*1
バックアップを復旧したらデバイス名の変更によりネットワーク周りの設定が飛ぶので
そのあたりをモニタ直結して設定してやらないといけないので注意だ

後は案外すんなり起動して拍子抜けしている いやその方がいいです勘弁してください

だがアプリ用のプールがエラー吐いて困っているm.2でミラー組んでるんですけどチェックサムエラー出てる
スクラブで直るんだけどまた出る
数時間前まで前環境で動いてただろ勘弁して

*1:この時poolは外したほうがいいかもしれない?

TrueNASとOpenWRTにCrowdSecを導入する

とりあえず動いたのでメモしておきます。


kroon.email
えー、ガイドあります。(完

それでは終わってしまうので続けます。

docker-compose.yamlを準備します。

services:
  crowdsec:
    container_name: crowdsec
    environment:
      #nginxはいらないと思うが 気分で
      COLLECTIONS: crowdsecurity/linux crowdsecurity/iptables crowdsecurity/nginx
      GID: '568'  #TrueNASがapp権限要求してきたら嫌なので念の為 不要ならポイ
      TZ: Asia/Tokyo
      UID: '568'  #TrueNASがapp権限要求してきたら嫌なので以下略
      USE_WAL: 'true'  #必要なのか不明 無くても起動はするはず
    image: crowdsecurity/crowdsec:latest
    ports:  #任意ポートに変更、syslog用に追加ポート必要
      - 30514:514/udp
      - '30380:8080'
    restart: unless-stopped
    volumes:
      - /mnt/dataset/crowdsec/crowdsec-db:/var/lib/crowdsec/data
      - /mnt/dataset/crowdsec/crowdsec-config:/etc/crowdsec
      #編集が必要な為個別対応
      - /mnt/dataset/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml

#webui 本家クラウド使う場合は不要
#先にCrowdSecを起動して準備が必要
  crowdsec-web-ui:
    environment:
      - CROWDSEC_URL=http://crowdsec:8080 #コンテナ直通
      - CROWDSEC_USER=crowdsec-web-ui #crowdsecに登録した名前
      - CROWDSEC_PASSWORD=<生成が推奨されている、後述>
      - CROWDSEC_LOOKBACK_PERIOD=5d
    image: ghcr.io/theduffman85/crowdsec-web-ui:latest
    ports:
      - '33000:3000'  #webuiポート
    restart: unless-stopped
    volumes:
      - /mnt/dataset/crowdsec/crowdsec-web:/app/data

crowdsec-web-uiは起動時に必要な情報をcrowdsecに登録する必要がある為、
先に起動したら問題が出るかもしれない

acquis.yamlを作成して置いておく

listen_addr: 0.0.0.0
listen_port: 514
protocol: udp
source: udp
labels:
  type: iptables

OpenWRTのシステム>システム>ロギングから
TrueNASのIPアドレスとポートを設定する
fwのログはkern.warnって出てるからログ出力レベルは警告でいいはず

CrowdSecを起動してシェルに入る

(必要であれば)CAPIの登録を行う

cscli capi register

一応起動時などに自動で実行されるらしいんだが、

scli capi status

を実行して

Sharing signals is enabled
Pulling community blocklist is enabled
Pulling blocklists from the console is enabled

enabledが出ているなら大丈夫じゃないだろうか。
出ていないなら実行した方がいいかも。

bouncerのAPIキーを取得する

cscli bouncers add openwrt

OpenWRTにluci-app-crowdsec-firewall-bouncerをインストールして
ネットワーク>ファイアウォール>CrowdSec Bouncer
URLとAPIキーを入力して有効化
Filtered interfacesで対象にするインターフェースを設定するのを忘れないように*1

bouncerが登録されて接続できていることを確認

/ # cscli bouncers list
─────────────────────────────────────────────────────────────────────────────────────────────────────
 Name     IP Address      Valid  Last API pull         Type                       Version  Auth Type 
─────────────────────────────────────────────────────────────────────────────────────────────────────
 openwrt  192.168.1.1     ✔️     2026-06-06T14:56:05Z  crowdsec-firewall-bouncer           api-key   
─────────────────────────────────────────────────────────────────────────────────────────────────────

各種Metricsが動いていることを確認

/ # cscli metrics
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Acquisition Metrics                                                                                             │
├───────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────┤
│ Source                │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
├───────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
│ syslog:192.168.1.1221221          │ -              │ 199                    │ -                 │
╰───────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯

(中略)

╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Scenario Metrics                                                                                      │
├─────────────────────────────────────────┬───────────────┬───────────┬──────────────┬────────┬─────────┤
│ Scenario                                │ Current Count │ Overflows │ Instantiated │ Poured │ Expired │
├─────────────────────────────────────────┼───────────────┼───────────┼──────────────┼────────┼─────────┤
│ crowdsecurity/iptables-scan-multi_ports │ 6             │ -         │ 194199188     │
╰─────────────────────────────────────────┴───────────────┴───────────┴──────────────┴────────┴─────────╯

この辺の数字が動いていたら多分大丈夫…だと思う…*2


ダッシュボードの導入

事前にcrowdsecでmachineを追加しておくのだが、パスワードの生成が必要なので
TrueNASのシェルから

openssl rand -hex 32

を実行してパスワードを生成しておく。*3
生成したらCrowdSecのシェルに戻りmachineを登録。

cscli machines add crowdsec-web-ui --password <生成したパスワード> -f /dev/null

-f /dev/nullは必要だそうですよ

-f /dev/null フラグは重要です。 CrowdSec コンテナの既存の認証情報ファイルを上書きしないように cscli に指示します。
コンテナのローカル構成を変更するのではなく、マシンをデータベースに登録するだけです。

これでとりあえず全部起動できると思う。

*1:1敗

*2:unparsedが増えてたら読めてないと思われる

*3:公式がそう案内しているんだが、この長さ要るの?