ダイナミックDNSの更新スクリプト

自宅のサーバは普通のADSL接続なのでたまにIPが変わってしまう。なのでIPが変わってないか常に監視して、変わったらDNSを更新してやらないといけない。今まで What’s Up! というソフトを使っていたのだが、たまに更新できずにいて外からサーバにアクセスできなくなっていることがよくあった。DNSの更新にわざわざグラフィカルなインターフェイスとかいらないのでこの際自分でスクリプトを書いてしまおうと思い立った。最近仕事でシェルスクリプトを覚えたし。

ダイナミックDNS更新シェルスクリプト
というわけでこちらのサイトを参考にさせていただく。処理の流れとしては、まずADSLモデムの管理画面のHTMLを wget でとってきてそこからWAN側IPを抜き出す。

current_ip=`wget -q -O - '管理画面のURL' | cat -n | grep 行番号 |
awk '{print $2}'`

wget -O - でとってきたHTMLを標準出力に渡し、 cat -n | grep 行番号 で指定した行だけ抜き出し、 awk でIP部分を抜き出すという寸法。

で、前回更新した IP をファイルに書き込んでおいたものを取り出してきて、今 wget でとってきた IP と比べて変更されていたら DNS に新しい IP を教えてやればいい。 DNSの更新の仕方はサービスによるけどたいてい GET の引数に各種情報を入れたURLにアクセスするだけでよいのでこれも wget を使えばよい。

そんな感じで作ったスクリプトを cron で5分毎に実行。IPが変更されたときはちゃんとログを書き出すようにしておくべき。昨日の夜から動いているが早速変わっている。しかも0.0.0.0ってなんかIP取得に失敗している瞬間があったり。思ったより回線状況は不安定?

2 comments.

  1. こんにちわ。

    cat 以降は awk ‘NR == 行番号 {print $1}’
    で置き換えられないでしょうか。行番号がなくなる分 $2 → $1 としてみました。

  2. >つゆさん
    こんにちは。
    お初ですけど毎日会ってる方ですよね?(笑

    ご指摘いただいた通り、そのコマンドでできました!
    こっちの方がスマートですね。
    ありがとうございます!

Post a comment.