目次
Wake On LAN(WOL)の設定
ルーターにWOL機能を追加してVPNからアクセスする方法と,コマンドラインベースで既存の稼働中サーバーHPに組み込む方法があるが,どちらもコード等を記載してカスタマイズが必要。とりあえず両者を設定してみる。
ルーターにWOL機能を追加
この機能もヤマハのHPに設定方法が記載されている。がよくよく確認するとルーターでDHCP管理しているものが対象なようで,固定IPアドレスのホストは使えないようだ。が,何か使えそうな気もするが。ポチポチ入力するのも面倒なので,一覧表から選択出来ないか検討する。
ネット検索したらカスタマイズして使用している例があった。
RTX1200にカスタムGUIを導入し、Wake ON LAN環境を構築する | 縦ぽん!! (tatepon.com)
とりあえずこのサイトを参考にさせてもらった。_(._.)_
HTMLを作成
ヤマハのHPからダウンロードしたカスタムGUIファイル(wol.html)をカスタマイズ
index.htmlにリネーム
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>カスタムGUI設定例 Wake on LANによるPC管理</title>
<link rel="stylesheet" href="./style.css" type="text/css">
<script type="text/javascript" src="/custom/custom_gui_lib.js"></script>
<script type="text/javascript">
<!--
/*
* 【概要】 XMLHttpRequestオブジェクトを作成する
*
* 【引数】 なし
*
* 【戻り値】XMLHttpRequestオブジェクト
*/
function createHttpRequest()
{
if (window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return null;
}
}
}
else if (window.XMLHttpRequest)
return new XMLHttpRequest();
else
return null;
}
/*
* 【概要】 リクエストを送信する
*
* 【引数】 callback: コールバック関数
* data : 送信するデータ
* async : true - 非同期モード
* false - 同期モード
*
* 【戻り値】なし
*/
function sendRequest(callback, data, async)
{
var httpoj = createHttpRequest();
httpoj.open("POST", "/custom/execute", async);
httpoj.onreadystatechange = function()
{
if (httpoj.readyState == 4)
callback(httpoj);
}
httpoj.send(data);
}
/*
* 【概要】 コマンドが実行されたか否かを確認する
*
* 【引数】 oj: XMLHttpRequestオブジェクト
*
* 【戻り値】なし
*/
function confirmWol(oj)
{
if (oj.status == 200)
alert("Magic Packetを送信しました");
else
alert("エラーが発生しました");
}
function confirmLogout(oj)
{
if (oj.status == 200)
alert("ログアウトしました。ブラウザを終了してください。");
else
alert("ログアウトできませんでした。");
}
/*
* 【概要】 選択した情報を入力フィールドにセットする
*
* 【引数】 mac : MACアドレス
*
* 【戻り値】なし
*/
function setAddr(mac)
{
document.getElementById("target_mac").value = mac;
}
/*
* 【概要】 コマンド実行結果からページを作成する
*
* 【引数】 oj: XMLHttpRequestオブジェクト
*
* 【戻り値】なし
*/
function printDhcpClientInfo(oj)
{
var str_array = oj.responseText.split('\r\n');
var host_array = [];
for (var i = 0; i < str_array.length; i++) {
if(str_array[i].match("スコープ番号") || !str_array[i] )
continue;
var temp1 = str_array[i].split(' ');
var temp2 = [];
var info = { name:"", ipaddr:"", macaddr:"" };
for (var j = 0; j < temp1.length; j++) {
if(!temp1[j])
continue;
temp2.push(temp1[j]);
}
info.ipaddr = temp2[1].replace(":", "");
info.macaddr = temp2[2].replace(",", "");
if (temp2[3])
info.name = temp2[3];
host_array.push(info);
}
var str = "<table border=\"0\" cellpadding=\"1\" cellspacing=\"1\" width=\"540\" summary=\"popupcontents\">"
+ "<tr bgcolor=\"pink\">"
+ "<td width=\"180\">ホスト名</td>"
+ "<td width=\"180\">IPアドレス</td>"
+ "<td width=\"180\">MACアドレス</td></tr>";
for (var i = 0; i < host_array.length; i++) {
if ( i % 2 )
str += "<tr bgcolor=\"#cccccc\">";
else
str += "<tr>";
str += "<td>"
+ "<span style=\"cursor:pointer;\" onclick=\"setAddr(\'"
+ host_array[i].macaddr + "\')\">"
+ host_array[i].name
+ "</span></td><td>"
+ "<span style=\"cursor:pointer;\" onclick=\"setAddr(\'"
+ host_array[i].macaddr + "\')\">"
+ host_array[i].ipaddr
+ "</span></td><td>"
+ "<span style=\"cursor:pointer;\" onclick=\"setAddr(\'"
+ host_array[i].macaddr + "\')\">"
+ host_array[i].macaddr
+ "</span></td></tr>";
}
str += "</table>";
document.getElementById("dhcp_info").innerHTML = str;
}
/*
* 【概要】 DHCPクライアント情報を取得、表示する
*
* 【引数】 なし
*
* 【戻り値】なし
*/
function getDhcpClientInfo()
{
var cmd = "#" + getSessionId() + "\r\nshow status dhcp summary\r\n";
sendRequest(printDhcpClientInfo, cmd, true);
}
/*
* 【概要】 wolコマンドを実行する
*
* 【引数】 なし
*
* 【戻り値】なし
*/
function execWol()
{
var cmd;
var target_mac = document.getElementById("target_mac").value.toLowerCase();
if (!target_mac) {
return;
} else if (target_mac.match(/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i)) {
/* 入力値がMACアドレスであればコマンドを実行する */
cmd = "wol send lan1 " + target_mac;
cmd = "#" + getSessionId() + "\r\n" + cmd;
sendRequest(confirmWol, cmd, true);
} else {
alert("入力値が不正です。MACアドレスを入力してください。");
}
}
/*
* 【概要】 ログアウトする
*
* 【引数】 なし
*
* 【戻り値】なし
*/
function logout()
{
var cmd = "#" + getSessionId() + "\r\n#logout\r\n";
sendRequest(confirmLogout, cmd, true);
}
//-->
</script>
<body onLoad="getDhcpClientInfo();">
<h1>Wake on LANによるPC管理</h1>
<hr>
<p>Wake on LAN機能で起動したいPCのMACアドレスを入力してください。<br>
DHCPクライアント情報をクリックすることでも入力できます。<br>
MACアドレス取得済みの情報からもクリックで入力できます。<br>
LAN1のネットワークアドレス(192.168.***.***/24)へ送出</p>
<form name="lan" action="#">
<table border="0" width="500" cellpadding="3" cellspacing="0">
<tr>
<td width="300" bgcolor="pink">起動したいPCのMACアドレス</td>
<td bgcolor="pink">
<input type="text" maxlength="17" size="30" name="target_mac" id="target_mac" value="">
</td>
<td bgcolor="pink">
<button type="button" onclick="execWol()">起動する</button>
</td>
</tr>
</table>
</form>
<br>
<h3>ルーターが保持しているDHCPクライアント情報</h3>
<div id="dhcp_info"><p>情報の取得中</p></div>
<h3>MACアドレス取得済みの情報</h3>
<div>
<table border="0" cellpadding="1" cellspacing="1" width="540" summary="popupcontents">
<tr bgcolor="pink">
<td width="180">ホスト名</td>
<td width="180">IPアドレス</td>
<td width="180">MACアドレス</td>
</tr>
<tr>
<td>(server01)</td>
<td>(192.168.***.001)</td>
<td><span style="cursor:pointer;" onclick="setAddr('00:00:00:00:00:01')">00:00:00:00:00:01</span></td>
</tr>
<tr>
<td>(server02)</td>
<td>(192.168.***.002)</td>
<td><span style="cursor:pointer;" onclick="setAddr('00:00:00:00:00:02')">00:00:00:00:00:02</span></td>
</tr>
<tr>
<td>(server03)</td>
<td>(192.168.***.003)</td>
<td><span style="cursor:pointer;" onclick="setAddr('00:00:00:00:00:03')">00:00:00:00:00:03</span></td>
</tr>
<tr>
<td>(server04)</td>
<td>(192.168.***.004)</td>
<td><span style="cursor:pointer;" onclick="setAddr('00:00:00:00:00:04')">00:00:00:00:00:04</span></td>
</tr>
</table>
</div>
<hr>
<button type="button" onclick="logout()">ログアウト</button>
</body>
</html>
上記の網掛け部を追加した。ホストはLAN上にあるものを記載してみた。
※アドレス等は実際のものに書き換え必要。
ルーターに登録
作成したカスタムGUIのHTMLファイル(index.html)をルーターの所定の場所に保存する。
ルーターへのコピー方法は複数あるが,手っ取り早くできそうなパソコンのコマンドプロンプトからTELNETでファイルをコピーする。
TELNET機能は「Windows機能の有効化と無効化」から事前に有効にしておく。
作成した「index.html」をusbメモリーのwolフォルダーにコピーして,ルーターのusbポートに差し込む。
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Windows\System32>telnet 192.168.***.***
####画面が切り替わる
Password: <<<<表示されないのでパスワード入力後「enter」
RTX1210 Rev.14.01.41 (Mon Jun 13 15:33:27 2022)
Copyright (c) 1994-2022 Yamaha Corporation. All Rights Reserved.
To display the software copyright statement, use 'show copyright' command.
00:00:00:00:00:00, 00:00:00:00:00:00, 00:00:00:00:00:00
Memory 256Mbytes, 3LAN, 1BRI
> ad <<< adと入力後「enter」
###### 下記に変換される
> administrator
Password: <<<<表示されないのでパスワード入力後「enter」
# copy usb1:/wol /wol
# show file list /
2022/10/12 21:55:15 <DIR> ap_config
2022/10/10 14:10:13 <DIR> dashboard
2022/09/26 15:56:18 <DIR> lanmap
2022/11/27 12:23:44 <DIR> wol
# quit
>
ルーター設定
登録したカスタムGUIのHTMLファイル(index.html)にアクセスするユーザーを登録する。
通常のメンテナンスユーザーと異なり,この登録したユーザーは「wol\index.html」へのアクセス専用となる。後から判明したのだが,magic packetを送信する際に再度ユーザーidとパスワードを聞いてくるが,その際にパスワードはこのユーザーのものではなく,管理ユーザーのパスワード入力が必要なようだ。(ヤマハのホームページに記載されていた)管理パスワードと同じで良いのかも。
#
# ログインユーザの設定
#
login user custom-user ********
#
# カスタムGUIの設定
#
httpd custom-gui use on
httpd custom-gui user wol-user directory=/wol index=index.html
上記設定後アクセスできて,magic packetの送出もされホストが起動した。
ただし,ユーザーを切り替えてルーター管理画面に入る際にブラウザのキャッシュの影響だと思うが,何度もカスタムGUIの画面が表示された。
カスタムGUI完成画面
「MACアドレス取得済みの情報」欄の起動したいホストのMACアドレスをクリックすると,「起動したいPCのMACアドレス」の空欄に転記されるので,そのまま「起動する」をクリック。非常に楽だ!