グローバルIPアドレスが変更された

| コメント(0)
ここ数年プロバイダーから割り振られたIPアドレスは変更がなく、何のトラブルもなくすごしていました。今回の工事で機器の交換が行われたようで、IPアドレスが変わりました。先代のサーバーまでは自動的にDNSのエントリーを更新するプログラムを組み込んでいましたが、4月からドメイン登録業者を格安のところへ移転させて運用していました。そんな中プログラムも不要と判断して削除したら、とんでもない目にあって慌てています。

インターネット検索で参考になりそうなところをダウンロードしてみたり、コーディングを読んでみたりと相性の良いところを探しています。
CGI の Perl はどう見てもとっつきにくいものがあります。以前のものはそれでも我慢して作ってみました。今回は比較的わかりやすいRubyのプログラムを見つけましたので実験中です。
新旧のアドレスを比較して、異なっていたら更新するようになっています。
また、別なところにあったRubyのメールを自動的に送るプログラムも借用して組み合わせました。更新したときにはメールのお知らせが飛んでくるとしました。
まだ、欠陥もありまして新アドレスの取得に失敗した場合でも比較は否ですのでメールが飛んできます。

新アドレスの取得失敗のケースは、「サーバーがTempolary downです」とか「500エラー」、「503エラー」や「ページの表示に失敗」などのケースがあります。一日に10件以上ありますので、相当の期間DNSサーバーは停止していることとなりそうですね。
2009/06/19現在のプログラム
#! /usr/bin/ruby

require 'net/http'
require 'resolv.rb'
require 'net/smtp'
require 'kconv'

DNS_SERVER = ['ns1.value-domain.com']
DOMAIN     = 'ikezoe.net'
HOST       = '*'
PASSWORD   = 'password'

dns = Resolv::DNS.new({:nameserver=>DNS_SERVER, :search=>[DOMAIN], :ndots=>1})
cur_addr = dns.getaddress(HOST == '*' || HOST == '@' ? DOMAIN : "#{HOST}.#{DOMAIN}").to_s

Net::HTTP.version_1_2
Net::HTTP.start('dyn.value-domain.com', 80) do |http|
  new_addr = http.get('/cgi-bin/dyn.fcg?ip').body
  if new_addr != cur_addr
    response = http.get("/cgi-bin/dyn.fcg?d=#{DOMAIN}&p=#{PASSWORD}&h=#{HOST}&i=")
    #puts response   テストのときは#を取る

to   = %w(mail@mail.ikezoe.net )     # Array 複数アドレス指定可
subj = 'Global address changed.'
from = 'my server' # for Header From part
body  = <<-BODY
  CCNW provided ip address changed.
  old ip address =#{cur_addr}
  new ip address =#{new_addr}
  status = #{response}

BODY

sender = 'mail@mail.ikezoe.net'
subj = Kconv.tojis(subj)
subj = subj.split(//,1).pack('m'); subj = subj.chomp
from = Kconv.tojis(from)
from = from.split(//,1).pack('m'); from = from.chomp
tomany = to.join(',')

head = <<HEAD
Subject: =?ISO-2022-JP?B?#{subj}?=
To: #{tomany}
From: =?ISO-2022-JP?B?#{from}?=
Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: Text/Plain; charset=iso-2022-jp
HEAD

ENV['HOSTNAME'] = `hostname`.chomp
src = head + "\n\n" + Kconv.tojis(body)
m = Net::SMTPSession.new(address = 'localhost', port = 25)
m.start()
m.sendmail(src, sender, to)
m.finish

  end
end

エラーメッセージのサンプル1
  CCNW provided ip address changed.
old ip address =219.124.192.120
new ip address =500 Internal Server Error

エラーメッセージのサンプル2
CCNW provided ip address changed.
old ip address =219.124.192.120
new ip address =<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>503 Service Temporarily Unavailable</TITLE>
</HEAD><BODY>
<H1>Service Temporarily Unavailable</H1>
The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.
</BODY></HTML>


status = #<Net::HTTPOK:0xb7cca774>
status = #<Net::HTTPInternalServerError:0xb7c7a774>
などと、送信されてきます。

コメントする

最近のブログ記事

Windows XPのOutlook Express 6.0 のスペルチェック
近所の会社の社長さんは Windows …
白菜の花
畑は春の陽気ですね。2/23以降朝の冷え…
css - リストの黒丸や四角の黒などが表示できない
比較的簡単なページを作成しています。リス…

おすすめ