jxyblog

jxyblog

email

openwrtルーターはスクリプトを使用してHuaweiドメインAPIを介してWANポートのドメイン解決を自動更新します

皆さんこんにちは、動的ドメイン名解決は皆さんにとって馴染み深いものだと思います。多くのルーターは ddns 動的ドメイン名解決サービスを統合していますが、Huawei のドメイン解決サービスはないため、自分でスクリプトを使って API を呼び出して Huawei のドメイン解決を行う必要があります。
ここでは、ルーターを管理するためのソフトウェアWinSCP ツールをお勧めします。百度のネットワークドライブに置いてあります。
このソフトウェアを使えば、多くの操作をコードを打つことなく、scp プロトコルで簡単にログインできます。

1、準備作業
始める前に、いくつかの必要なパラメータを取得する必要があります。まず、自分のクラウドコンソールにログインし、iam アカウントを作成します。管理者アカウントではうまくいかないようで、私がデバッグしているときはずっとエラーが出ていました。統一認証サービスの中で。

1111
作成が完了したら、コンソールのドメイン解決の変更画面を開き、複数のドメインがある場合はそのうちの一つを個別に開きます。そこでこのドメインの zone_id を取得できます。各ドメインには個別の zone_id があります。以下の図のように、ドメイン zone_id を抽出しておきます。

22222

2、recordset_id の取得
各ドメインの下には多くの解決記録があり、それぞれの解決記録には recordset_id があります。Huawei の API デバッグツールを開いて、ドメインの下の各解決記録の id を確認する必要があります。API デバッグにアクセスするには、Huawei アカウントにログインする必要があります。画面は以下の通りで、zone_id のところに先ほど取得した文字列を入力します。

333
zone_id を入力してデバッグをクリックし、右側の画面で必要な解決を行うドメインの recordset_id を選択します。最上部のものですので、間違えないように注意してください。私の設定は ipv6 の解決、つまり AAAA です。

44444
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 コマンドを自分で研究してみてください。

5555

もしそうでない場合は、まず 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
正常に戻れば、以下の画像のようになります。

666
ここでサーバー上の解決記録が更新されました。

7、解決記録の定期更新または IP 変化の定期検出による解決記録の更新を設定します。
例えば、ルーター内で 12 時間ごとにスクリプトを実行するように設定します。以下の図のように。

0 */12 * * * /bin/bash /mnt/ddns1.sh

777

もし 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

これで終了です。皆さんのお役に立てれば本当に嬉しいです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。