と書きましたが、11月6日からADSL環境になりましたので、ADSLモデムとなり、 この方法が使えな くなりました。 で、結論から言うとログが取れなくても wget を使えればなんとかなります。 (2001.11.7追加 後述)
dyndns.org のサービスを使うという手もあります。 (2001.11.7追加 後述)
/etc/rc.d/init.d/syslog の daemon syslogd -m 0 を daemon syslogd -m 0 -r に変更します。 init.d を再起動します。 root で cat /var/log/messages としてみましょう。 /var/log/messages に Oct 20 00:10:00 firewall CRON[291]: (root) CMD (/usr/sbin/newsyslog) のようにfirewall からのログが記録されていればOKです。 今回のポイントは、DHCPからグローバル側のIPを割り当てられた時に、 Oct 19 18:59:10 firewall dhcpc[91]: send DHCPREQUEST(RENEWING) Oct 19 18:59:10 firewall dhcpc[91]: Got DHCPACK (IP = XXX.XXX.XXX.XXX, duration = 86400 secs) Oct 19 18:59:10 firewall dhcpc[91]: Got 2 DNS server: XXX.XXX.XXX.YYY XXX.XXX.XXX.ZZZ といった一連の情報に着目します。ここでfirewallに割り当てられたグローバル側のIPはDHCPACKの後の IP = XXX.XXX.XXX.XXX となります。
# cd /usr/DDNS # chmod 700 gdipc.pl # perl gdipc.pl -c New Username: 登録したユーザ名 New Password: 登録したパスワード New Password Again: もう一度 Domain: 選択したドメイン名 New GnuDIP Server: 登録したDDNSサーバ(今回はieserver.net)これで /root/.GnuDIP2 というファイルができますから、/usr/DDNSにコピー します。
# cp /root/.GnuDIP2 /usr/DDNSルータ経由でない場合は単に
perl gdipc.plで使えるようになりますが、間にルータが入っている場合はそうは行きません。
# cd /usr/DDNS # chmod 700 IP_Get.plIP_Get.pl を使っているログの形式に合わせて変更します。以下はログの形式が
Oct 19 18:59:10 firewall dhcpc[91]: Got DHCPACK (IP = XXX.XXX.XXX.XXX, duration = 86400 secs)の場合です。 たとえば以下の通りに変更します。
cat /var/log/messages | grep DHCPACK ログの中に複数行ある場合、一番古いものになってしまったので以下に変更 cat /var/log/messages | grep DHCPACK | tail -1 ログがローテートされると空っぽになってしまうので以下に変更 cat /var/log/messages.1 /var/log/messages | grep DHCPACK | tail -1
#!/usr/bin/perl ※ perl へのパス # $O_IP = '/usr/DDNS/IP.dat'; ※ ファイルを置く位置 $IP = '/usr/DDNS/N_IP.dat'; ※ ファイルを置く位置 system("cat /var/log/messages.1 /var/log/messages | grep DHCPACK | tail -1 >$IP"); ※1 今回のポイント open(INPUT,$IP); $c = <INPUT>; $start = index($c,"IP = ")+5; ※ DHCPACKで貰えたIPの前の文字列 $end = index($c,", duration"); ※ DHCPACKで貰えたIPの後の文字列 $New_IP = substr($c,$start,($end-$start)); close(INPUT); open (OUTPUT ,">$IP"); print OUTPUT $New_IP; close OUTPUT; open INPUT,"$O_IP"; $Old_IP=<INPUT>; close INPUT; if ($New_IP ne $Old_IP) { open (OUTPUT ,">$O_IP"); print OUTPUT $New_IP; close OUTPUT; print"Dynamic DNS => $New_IP\n"; system("/usr/DDNS/gdipc.pl -f /usr/DDNS/.GnuDIP2"); ※ パスに合わせて変更 }
(cd /usr/DDNS; wget http://upsys.de/dyndns/check_ip.php3)とでもして、ローカルに自分の情報を持ってきましょう。 check_ip.php3 というファイルができていますから、 ログの代わりにこれを使えばいいですね。どんな感じか例を示します。
<html><head><title>Current IP Check</title></head> <body bgcolor=white text=black> Current IP Address: 210.XXX.YYY.ZZZ <br>Hostname: xyz.ppp.abc.defgh.jp </body></html>
このあたりまで来ると、もういろいろな合わせ技でなんとでもなりますね。 (^◇^)
*/10 * * * * /usr/bin/perl /usr/DDNS/IP_Get.plの行を付け加えて保存します。crontab -l で設定を確認します。 これで10分おきにIPをチェックしてくれます。 IP.dat と N_IP.dat の内容が異なればDDNSサーバに通知します。
# watchfor /DHCPACK/ exec /usr/DDNS/IP_Get.pl mail=masuda@im.dendai.ac.jp
proto target IP port alias IP port remote IP port ------ --------------- ------ --------------- ------ --------------- ------ tcp 192.168.0.XXX 80 (null) 80 (null) (null) udp 192.168.0.XXX 80 (null) 80 (null) (null) tcp 192.168.0.XXX 22 (null) 22 (null) (null) udp 192.168.0.XXX 22 (null) 22 (null) (null) tcp 192.168.0.XXX 25 (null) 25 (null) (null)firewall にログインして、
configure nat redirect-port add プロトコル serverのIP:ポート番号 エイリアスポート番号の形で設定します。たとえば、HTTP は、
configure nat redirect-port add tcp 192.168.0.XXX:80 80 configure nat redirect-port add udp 192.168.0.XXX:80 80とします。その後、write して rebootします。