2014年7月5日土曜日

【ルータ】ヤマハ RTX1100 でWake on LANのマジックパケットを送信する

NASを家にいる土日だけ自動で電源ONにするようにしています。
常時ONだと電気代がもったいないし、とは言え毎回手動で電源入れるのも面倒ですからね。
システムで自動化できるものは自動化するのが信条。

あいにく、我が家のNASは古めのNASなのでスケジュールで電源をON/OFFする機能を搭載していません。
しかし、WOL機能を搭載しており、Raspberry Piからマジックパケットを送信するシェルスクリプトを作って、crontabで土日だけNASが起動するようにスケジューリングしていました。
ところが、Raspberry Piが壊れてしまいました・・・

同様のことがyamahaルーター(RTX1100)でもできるようなので、メモしておきます。

【ネットワーク構成】


【使用機器】
ルータ … Yamaha RTX1100
NAS … Buffalo LinkStation LS-WH2.0TGL/R1

【入力形式】

wol send [-i 送信間隔] [-c 送信回数] インタフェース MACアドレス

-i、 -c は省略可能でデフォルト値は-i 1、-c 4 です。
wol send だけだと単発でマジックパケットを送信するだけなので、スケジュールに組み込みます。

毎週土日午前8時に3分間隔で320回マジックパケットを送信します。
NAS(LinkStation)の仕様上、定期的にマジックパケットを受け取らないと、電源がOFFになってしまいます。
送信間隔をとりあえず3分にしました。送信回数の320回は16時間後の0時にNASの電源がOFFになるようにする為に設定しています。

schedule at 1 */Sun,Sat 08:00 * wol send -i 180 -c 320 lan1 xx:xx:xx:xx:xx:xx

ラズパイでやっていたことが9年前のルータでも実現できたので、なかなか侮れないなぁと関心。

2014年6月5日木曜日

【VBA】Windows 64bit で発生するDeclareエラーの対応方法

2014年4月でWindows XPのサポートが終わってしまいましたね。
自宅の開発環境はしばらくXPを使い続けていましたが、セキュリティ的にいつまでもXPというわけにも行かないので、一念発起し、Windows 7 環境へ移行しました。

移行後、Excelマクロを立ち上げたところ、以下のようなエラーメッセージが。
"このプロジェクトのコードは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認及び更新を行い、次に Declare ステートメントに PtrSafe 属性を指定してください。"

ううむ。OSアップデートの洗礼か、はたまた32bitから64bit化したことによる影響か・・・

どうやら、Windowsが64bitだと Declare Function の箇所でエラーになってしまうようです。
メッセージ通り、Declare に PtrSafe を指定すれば解決しました。ほっと一安心。

【修正前】

Public Declare Function 関数名 ...

【修正後】

Public Declare PtrSafe Function 関数名 ...

ExcelのVBAで作成した便利ツールがいくつかあり、自宅でもWindows 7化対応をしなくちゃだめなのか・・・と思いましたが、簡単な修正で済んで一安心です。

【ルータ】ヤマハ RTX1100 ルータのsyslogを取得する

ヤマハのルータ(RTX1100)でsyslogを取るようにしたのでメモ。

構成
取得元(ルータ):YAMAHA RTX1100
保存先(サーバ):CentOS 6.4

1.サーバ側の設定

syslogにはrsyslogを使います。
rsyslogはCentOS 6.0からの標準装備なようですね。

1)rsyslogのコンフィグの設定 - 外部ホストの許可

viで開いて。

sudo vi /etc/rsyslog.conf

外部ホストのsyslogを受け付けるようにします。
以下のコメントを外す。
RTX1100はsyslogはUDPのようなので、とりあえずUDPだけ外しました。

修正前

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

修正後

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

2)rsyslogのコンフィグの設定 - ルールの追加

「#### RULES ####」コメント直下に追加。

#### RULES ####
:fromhost-ip, isequal, "192.168.1.250" -/var/log/rtx1100.log
& ~

1行目
:fromhost-ip,は送信元IP
isequal,は演算子でイコールの条件。
"192.168.1.250"はルータのIPアドレス。
-/var/log/rtx1100.log はログの保存先

2行目の"& ~"は1行目の条件に一致したら、以降のルールは評価せず終わりという意味。
これがないと以降のルールも評価して、合致した場合に無駄なログが書かれてしまうので入れておく。

コンフィグを修正したら保存します。

3)rsysconfigの再起動
設定変更を反映させるため再起動する。

sudo service rsysconfig restart

4) iptablesの設定

ポートを閉じている場合、ポートを開けてやります。
syslogのポートは514なので、そいつを開けてやります。
iptables変更後は、忘れずにデーモンを再起動。


2.ルータ側の設定

telnetでルータにログオンして、administratorにスイッチ。
設定を変更します。


syslog info on
syslog notis on
syslog debug on
syslog host 192.168.1.10
syslog facility local0

syslog info、syslog notis、syslog debug は出力するログの有無。
とりあえずすべてONにします。

syslog host はsyslogを受けるホストのIPアドレスを指定。
今回は保存先のCentOSのIPアドレスを指定します。

syslog facility はsyslogの分類にあたるもの。
サービスに応じて、mailとかcronとかがあり、local0~7が汎用なので、今回はlocal0にしておく。

パケットダンプを見たかったので、以下も設定しておく。

packetdump lan1 100

lan1 はダンプしたいインタフェース名。
100 はダンプするパケット数。
infinityにすると制限なくダンプを出力してくれるそうだけど、必要な分を見ると思うのでパケット数指定が無難でしょう。

こいつは"syslog debug on"にしておかないと機能しないそうなので、忘れずにONにしておく。

http://www.rtpro.yamaha.co.jp/RT/manual/nvr500/logging/packetdump.html


RTX1100の設定変更は即反映されるけど、忘れずにsaveで保存する。


これで、ルータのsyslogが取得できました。


パケットダンプはこんな感じで出力されます。

Jun  5 12:20:56 LAN2 IN: IP TCP 69.192.178.110:443 > 172.20.10.5:61627
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 LAN2 IN: IP TCP 199.59.150.46:443 > 172.20.10.5:60191
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
Jun  5 12:20:56 192.168.1.250      00 00 00 00 00 00 00 00  00 00 00 00 00 00