前書き
ついに固定回線引いたのはいいが可変IPなので外からでも自宅に繋げられるように自宅にサブドメイン割り当てようと思った
環境はVPSがarchlinux
自宅がRaspberry pi上でRaspbianだけどssh打てたらなんでもいい
これからやるのはVPSにddns鯖立てる
本文
1.vps上にdns鯖立てるためにbindを入れる
# pacman -S bind
設定ファイル/etc/named.confにこれを追加する、noter.jpの箇所は各自の独自ドメイン
zone "noter.jp" IN { type master; file "noter.jp.zone"; allow-transfer { 210.172.129.81; }; allow-update { 127.0.0.1; }; };
次にさっきのファイルのdirectoryで指定しているディレクトリにさっき書いたfileの場所に以下の内容のファイルを作る
コメント書きたかったら「;」
/var/named/noter.jp.zone
$TTL 3600 * IN SOA noter.jp. root.noter.jp. ( 2016040301 3600 900 604800 86400 ) NS * NS ns1.noter.jp. NS 2nd.dnsv.jp. A 自分のIP ns1 A 自分のIP 自宅 A 家のIP
設定は終わったのでbind使うようにする
# systemctl enable named.service # systemctl start named.service
まだ公開してない状態で正引きが設定した家のIPであることを確認
# nslookup 自宅.noter.jp localhost
2.お名前.comでプライマリネームサーバ IPアドレスの設定
お名前.comにログインしたら
Navi TOP -> ネームサーバーの変更する -> DNS関連機能の設定 -> 設定するドメイン選んで次へ
セカンダリDNS(Slave)を利用する -> プライマリネームサーバ IPアドレスに自分のVPSのIPを入力
3.お名前.comでホスト設定
Navi TOP -> ネームサーバーの変更する -> DNS関連機能の設定 -> 設定するドメイン選んで次へ
ネームサーバー名としてのホストを設定する -> 作成を選択 -> DNS鯖として使うドメインとIPを入力する。例ではns1.noter.jp 自分のIP
4.お名前.comでネームサーバーの変更
Navi TOP -> ネームサーバーの変更する -> ネームサーバーの変更 -> 他のネームサーバーを利用
プライマリネームサーバーに先ほどホスト設定したドメイン 例: ns1.noter.jp
セカンダリネームサーバーに2nd.dnsv.jpで登録する
とりあえずこれで時間経てばnslookupで普通に正引きできます
5.IPを書き換える
色んな方法があるだろうけど今回はsshでddns鯖にあるスクリプト実行するのをcronで走らせることにした
まず、こんなスクリプトを用意
https://gist.githubusercontent.com/silenvx/15d58473c201f1b7a2563cb2a09a3059/raw/ee826c7b0f1eb0a5caa02a219b6f08633d7835b1/hoge.sh
#!/bin/sh GLOBAL_IP=` echo $SSH_CONNECTION|cut -f1 -d " "` HOST_NAME="sub.noter.jp" TTL="3600" echo $GLOBAL_IP|grep -E '^((([0-1]?[0-9]|2[0-4])?[0-9]|25[0-5])\.){3}(([0-1]?[0-9]|2[0-4])?[0-9]|25[0-5])$' > /dev/null if [ $? -eq 0 ];then echo " server 127.0.0.1 update delete $HOST_NAME update add $HOST_NAME $TTL A $GLOBAL_IP send "|nsupdate fi
これでやってるのはsshで接続してきた奴のglobal ipを取得してnsupdateで情報書き換えてる
自分用にいじるのはHOST_NAMEとTTLの値で、HOST_NAMEは自分の割り当てたいサブドメイン
TTLはzonefileに書いてるアレ
後はssh経由でこのスクリプトを実行するだけ
# ssh ユーザー名@鯖名 hoge.sh
これでできたら後はcron書いたり更にセキュアにするためにchrootにしたりとかするだけ