ページ

2021年3月18日木曜日

Raspberry Pi ルーターに Dynamic DNS を導入する

IPv4 over IPv6 接続した Raspberry Pi ルーターに PPPoE 接続を共存させ外部から IPv4 で接続することができるようになったので,Dynamic DNS を導入した.


これまでの設定は以下の記事に纏めてあるので,最初から読みたい方はどうぞ.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる

今回は無料で使える No-IP を利用する.

初めに,https://www.noip.com/ にアクセスしてアカウントの作成とホスト名の取得を完了したら,以下の記事に従ってクライアントソフトをビルドする.ただし,ルート権限の取得と make install はしないようにする.

How to Install the Dynamic Update Client on Linux

理由は,/etc とか /usr/local とかを勝手に弄られるのが嫌だから.

 $ wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
 $ cd noip-2.1.9-1
 $ make

ビルドが完了したら,以下のコマンドで conf ファイルを作成する.設定は全てデフォルトで良い.
 $ ./noip2 -C -c hoge.conf

conf ファイルが作成されたら,IPアドレス更新のテストを実行する.
 $ ./noip2 -c hoge.conf -i XXX.XXX.XXX.XXX

No-IP のアカウントページに表示された IP が XXX.XXX.XXX.XXX に更新されていたら,クライアントソフトの設定はひとまず完了.

次はこれを定期的に実行するために,cronを仕込む.

cronで動かすために作成したスクリプトは以下の通り.host コマンドで取得したDDNS によるIPアドレスと,ip コマンドで取得したデバイスの実 IPアドレスが異なっていたら,クライアントソフトを使ってIPアドレスを更新するという流れ.
/home/mirasuni/bin/hoge.sh
----------------------------------------
#!/bin/bash

readonly NOIP_DIR="${HOME}/noip-2.1.9-1/"
readonly CONF_FILENAME="hoge.conf"
readonly HOST_URL="hoge.ddns.net"
readonly DEVICE_NAME=ppp0

if HOST_IP=$( host ${HOST_URL} ); then
  HOST_IP=$( echo ${HOST_IP} | awk '{print $4}' )
  echo ${HOST_URL} : ${HOST_IP}
else
  echo Failed : host command
  exit 1
fi

if DEVICE_IP=$( ip addr show dev ${DEVICE_NAME} | grep inet ); then
  DEVICE_IP=$( echo ${DEVICE_IP} | awk '{print $2}' )
  echo ${DEVICE_NAME} : ${DEVICE_IP}
else
  echo Failed : ip command
  exit 1
fi

if [ "${HOST_IP}" != "${DEVICE_IP}" ] ; then
  cd ${NOIP_DIR}
  ./noip2 -c ${CONF_FILENAME} -i ${DEVICE_IP}
else
  echo ${HOST_URL} and ${DEVICE_NAME} are same.
fi

exit 0

スクリプトの動作確認をして,問題なければ,これが5分に1回実行されるようcronを仕込む.
 $ crontab -e
----------------------------------------
 */5 * * * * /home/mirasuni/bin/hoge.sh


以下,補足.
No-IPが提供するクライアントソフトは-i オプションを付けずに起動すると常駐して,conf ファイル作成時に設定した間隔でアップデートするように動作するが,デフォルトの間隔は30分と長いので,今回はcronで回すようにした.

クライアントソフトの設定を5分間隔にして常駐させてしまうと,頻繁にアップデートが走りサーバーに負荷をかけてしまう恐れがあるので,スクリプトでアップデートの要否を判定してからIPアドレス指定で動作するように仕込むことで,サーバーに負荷をかけずに,IPアドレスが変わった場合のラグも最小限に抑えることを目論んでいる.

次回はラズパイルーターでポートフォワードさせて,LAN 内の端末(こっちもラズパイだけどw)で VPN を構築したいと思う.

0 件のコメント:

コメントを投稿