家族用ネットワークの中に個人用ネットワークとしてASUSルータRT-AX56Uを(ルータモードで)設置し、二重ルータで利用しているのですが、ラズパイのcactiでpingを打って死活状態をログ取りたいのに、pingに応答しないデバイスがあります。そういうのには仕方なくarpingでARPを送るんですが、ARPはイーサネットフレームなのでルータを越えられません。(Proxy ARPとかあるらしいですが)
これまで個人用ネットワークのラズパイのwifiを家族用ネットワークにも属させてarpingしてましたが、wifiが切れることもあるので、ASUSルータにやらせることにしました。(こちらは有線なので)
ログを取るのにASUSルータにUSBメモリを挿すのですが、メモリの寿命が心配なのとアクセスランプがうざいので、cacti用の毎分の出力はtmpfsに。
ASUSルータの作業内容
USBメモリを挿して /tmp/mnt/<USB MEMORY>/ がマウントされるのを確認。設定はルータGUIから。 GUIからゲストアクセス無効、asus-scriptディレクトリ作成、ユーザーfoo(pw:bar)を作成。 mkdir /tmp/mnt/<USB MEMORY>/asus-script/ mkdir /tmp/mnt/<USB MEMORY>/asus-script/ram <USB MEMORY>/asus-script/に arping-command.sh crontab boot.sh を用意 (UTF-8,LF) 自分用のarping-command.sh (管理しやすいデバイスにはpingで) ping10=`ping 192.168.あ.10 -w 1 -W 1 -q | grep '100% packet loss' >/dev/null || echo 10` ping14=`arping 192.168.い.14 -w 3 -c 1 | grep 'Received 0 reply' >/dev/null || echo 14` # arpをeth0(WAN側)以外から出したい場合は -I br0 などでインターフェース指定する echo "ping10:$ping10 ping14:$ping14" > /tmp/mnt/<USB MEMORY>/asus-script/ram/ping-status.txt crontab * * * * * /tmp/mnt/<USB MEMORY>/asus-script/arping-command.sh boot.sh #!/bin/bash mount -t tmpfs -o size=1M tmpfs /tmp/mnt/<USB MEMORY>/asus-script/ram cp /tmp/mnt/<USB MEMORY>/asus-script/crontab /var/spool/cron/crontabs/<admin username> nvram set script_usbmount="/tmp/mnt/<USB MEMORY>/asus-script/boot.sh" # 1行でコマンドを入れる場合は script_usbmount='`cp /tmp/mnt/<USB MEMORY>/asus-script/crontab /var/spool/cron/crontabs/<admin username>`' のようにする nvram commit nvram show > nvram.txt #確認用
2024/4/4追記:上記のnvram set script_usbmountが動かなくなったような気がする。
仕方ないのでboot.shを手動で実行。どうすれば自動化できるかは後で考える。
ファームウェアバージョン:3.0.0.4.386_51665-g8072e52 (RT-AX56U)
ラズパイの作業内容
crontab -e @reboot sleep 20;mount -t cifs -o username=foo,password=bar,vers=2.0 //192.168.あ.1/asus-script /適当なディレクトリ/ cacti上でチェックするping-status.txtを/適当なディレクトリ/ram/ping-status.txtに変更する
参考
http://kinomuku129.blogspot.com/2017/12/rt-ac68uddns.html https://www.securityforrealpeople.com/2015/08/cron-on-asus.html https://armadillo.atmark-techno.com/howto/mounting-tmpfs