皆さんこんにちは、動的ドメイン名解決は皆さんにとって馴染み深いものだと思います。多くのルーターは ddns 動的ドメイン名解決サービスを統合していますが、Huawei のドメイン解決サービスはないため、私たちはスクリプトを使って API を呼び出し、Huawei のドメイン解決を行う必要があります。
ここで、ルーターを管理するためのソフトウェアWinSCP ツールをお勧めします。これは百度網盤に置いてあります。
このソフトウェアがあれば、多くの操作をコードを打たずに行うことができ、scp プロトコルを使って簡単にログインできます。
1、準備作業
始める前に、いくつかの必要なパラメータを取得する必要があります。まず、自分のクラウドコントロールパネルにログインし、iam アカウントを作成します。管理者アカウントではうまくいかないようで、私がデバッグしているときにエラーが出ました。統一認証サービスの中で。
作成が完了したら、コントロールパネルのドメイン解決の変更画面を開き、複数のドメインのうちの 1 つを個別に開きます。このドメインの zone_id を取得できます。各ドメインには個別の zone_id があります。以下の図のように、ドメイン zone_id を抽出しておきます。
2、recordset_id の取得
各ドメインの下には多くの解析記録があり、各解析記録には recordset_id があります。Huawei の API デバッグツールを開いて、ドメインの下の各解析記録の id を確認する必要があります。API デバッグにアクセスするには、Huawei アカウントにログインする必要があります。画面は以下の通りで、zone_id のところに先ほど取得した文字列を入力します。
zone_id を入力してデバッグをクリックし、右側の画面で必要な解析を行うドメインの recordset_id を選択します。最上部のものですので、間違えないように注意してください。私の設定は ipv6 の解析、つまり AAAA です。
3、最後に必要なデータは以下の通りです:
adminname='hw123456789' 管理者アカウント
username='123456' 新規作成したアカウント
password='123456' 新規アカウントのパスワード
zoneid='ff80808287asdadadasd7d1b56243'
recordsetid='ff80808287asdasdad3b1d031404c4'
domain='jxyblog.top' 変更する必要のあるドメイン、私は直接ルートドメインを使用します。
4、まずルーターのポート IP アドレスを取得するデバッグを行います
そうしないと、後でスクリプトを実行するとエラーが発生します。
ssh でルーターのインターフェースにログインし、以下のコマンドを実行して wan ポートの ipv6 アドレスが正常に取得できるか確認します。私のは pppoe ダイヤルアップです。
ifconfig pppoe-pppoe | grep 'inet6' | grep 'Globa' | awk '{print $3}' | cut -d'/' -f1
ip -6 addr show pppoe-pppoe | grep 'inet6' | grep 'dynamic'| grep -oE 'inet6 [0-9a-fA-F:]+(/[0-9]+)?' | awk '{print $2}' | cut -d'/' -f1
上記の 2 つのコマンドで wan ポートの IP を取得できます。最初のものはシステムに付属の ifconfig コマンドを使用し、2 番目のものは上でインストールした curl を使用しています。
正常であれば、以下の画像のように、単独の完全な IP が表示されます。IP を表示する方法はいくつかありますので、grep コマンドを研究してみてください。
もしそうでない場合は、まず ifconfig を入力してすべてのポートを確認します。私のは pppoe-pppoe です。その後、inet6 を含む行だけを表示するようにフィルタリングし、NR==1 で最初の行を表示し、print $3 で 3 列目を表示します。自分で少しずつ変更し、単独の ipv6 アドレスをデバッグできれば大丈夫です。
5、ルーターにインストールする必要があるソフトウェア、ルーターのソフトウェアパッケージ画面を開いて以下の 2 つのソフトウェアをインストールします
curl
デバッグツール
bash
スクリプトツール
以上のステップが準備できれば、スクリプトを実行できるようになります。
6、以下はスクリプトコードです
#!/bin/bash
adminname='hw123456789' #この部分は上で説明した通り、正常に入力すれば大丈夫です
username='123456'
password='123456'
zoneid='ff8080828732b7946445465b56243'
recordsetid='ff80808654665156173b1d031404c4'
domain='jxyblog.top'
token=$(curl -L -k -s -D - -X POST 'https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens' \
--header 'Content-Type: application/json;charset=UTF-8' \
--data-raw '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"'$adminname'"},"name":"'$username'","password":"'$password'"}}},"scope":{"domain":{"name":"'$adminname'"}}}}' | grep X-Subject-Token | awk '{print $2}')
wanip=$(ifconfig pppoe-pppoe | grep inet6 | awk 'NR==1{print $3}' | cut -d'/' -f1) #ここは以前にデバッグしたIPが正常に取得できるか確認した部分です。もしできなければ変更してください。
curl -i --location --request PUT 'https://dns.myhuaweicloud.com/v2.1/zones/'$zoneid'/recordsets/'$recordsetid'' \
--header 'Content-Type: application/json;charset=UTF-8' \
--header 'X-Auth-Token: '$token'' --data-raw '{"name":"'$domain'.","type":"AAAA","ttl":300,"records":["'$wanip'"]}'
拡張子が.sh のファイルを作成し、ルーターに保存します。例えば、私は /mnt に保存します。以下のコードを実行します。
/bin/bash /tmp/ddns.sh
正常に戻れば、以下の画像のようになります。
ここで、サーバー上の解析記録が更新されました。
7、解析記録を定期的に更新するか、IP の変化を定期的に検出して解析記録を更新する設定を行います。
例えば、ルーターの中で 12 時間ごとにスクリプトを実行するように設定します。以下の図のように
0 */12 * * * /bin/bash /mnt/ddns1.sh
もし 10 分ごとに IP の変化を検出してドメイン解析を行うように設定する場合、前の記事で IP の変化を検出するスクリプトを投稿しました。スクリプトは以下の通りで、詳細は以前の記事リンクを参照してください:
【詳細チュートリアル】Openwrt のパブリック IP アドレスの変動を自動メール通知(IPv4、IPv6 両方可)【転載再整理】
#!/bin/bash
current_ipv6=$(ip -6 addr show br-lan | grep -oE 'inet6 [0-9a-fA-F:]+(/[0-9]+)?' | awk '{print $2}')
if [ ! -f /tmp/wan_ip.txt ]; then
echo "$current_ipv6" > /tmp/wan_ip.txt
echo -e "Subject: OpenWRT WAN IP\n\n初回スクリプトを実行した際、WAN IPv6 アドレスは: $current_ipv6" | msmtp -a default [email protected]
fi
saved_ip=$(cat /tmp/wan_ip.txt)
if [ "$current_ipv6" != "$saved_ip" ]; then
echo -e "Subject: OpenWRT WAN IP Changed\n\nWAN IPv6 が変更されました: $current_ipv6\n以前の IP アドレスは: $saved_ip" | msmtp -a default [email protected]
echo "$current_ipv6" > /tmp/wan_ip.txt
/bin/bash /mnt/ddns1.sh #ここで直接ドメイン解析スクリプトを挿入し、IPが変化したら直接ddnsを行います
fi
これで終了です。皆さんの役に立てれば本当に嬉しいです。