Windows使用阿里雲RAM訪問控制API實現自建DDNS動態域名解析

前言

因爲最近將家裏的電信寬帶換成了公網IP,在二手魚上面淘了點破爛,搭建了一些服務(比如NAS)。而電信的公網IP並不是固定的,要想持續穩定的訪問到搭建的服務,我們可以使用固定的域名訪問,這就需要DDNS,每次IP變化後,將域名動態的解析到新的公網IP上。

一開始準備使用路由自帶的DDNS功能,家裏用的小米路由器,小米路由器自帶的DDNS服務商有下面幾家:

  • 花生殼(oray.com
  • 公雲(3322.org
  • Dyndns.com
  • No-ip.com

一般可能用花生殼的比較多一點,但是免費的域名畢竟又長又cuo(免費的還要啥自行車),不便於記憶。

正好我有幾個域名正在使用,而且都已經備案過,所以我覺得使用自己的域名比較方便,遂決定使用阿里雲的API實現自建的DDNS服務。

本次服務我是將軟件部署到下載機(一臺7*24在線的Windows電腦)裏的,後面嘗試將該服務直接部署到小米路由器裏,這樣適用於沒有7*24在線機器的情況。

更新:後來發現小米路由器有插件Misstar Tools,安裝後直接使用裏面的Ali DDNS模塊即可。
非小米路由可以使用這個開源項目:AliDDNSBash,跑的是shell腳本。

一、實現方式

1.使用到的資源

  • 域名服務商:阿里雲
  • 軟件:NewFuture/DDNS,Github開源項目,網址:點我

2.基本流程

architecture

二、阿里雲配置

(一)前置條件

首先,默認你已經擁有域名並且已經備案(不備案解析時會被阿里雲阻斷)。

(二)添加RAM訪問控制

1.添加子用戶

登錄阿里雲,點擊右上角用戶頭像,選擇訪問控制

access

阿里雲會有下面的提示:

child_account

意思這個全局AccessKey權限太高,知道這個等於就擁有你賬號所有權限,牆裂建議你使用RAM子用戶去進行API調用。所有爲了安全,我們點擊使用子用戶AccessKey。

進去後點擊左側的人員管理-用戶,添加一個用戶,比如叫shangyexin.com-dns,訪問方式選擇編程訪問,因爲你使用API去修改DNS解析,並不需要去WEB上使用這個用戶:

create_account

2.爲子用戶添加權限

創建好後點擊創建的用戶名,然後選擇添加權限爲這個子用戶添加修改DNS解析的權限:

add_access

一般一開始調試時建議先添加系統策略,在搜索框裏搜索dns,然後選擇添加AliyunDNSFullAccess權限,也就是擁有你該賬戶下的所有域名DNS解析權限,點擊確定即可(只有操作DNS權限,沒有對你賬號下除DNS外其他資源的權限)。

後面步驟調試通後,可以添加更加細粒度的權限,比如只可以修改指定的域名。

可以選擇新建策略權限,然後添加該權限。比如本文中添加了下面這樣的權限:

  • 所有域名的查詢主域名權限,因爲不添加後面步驟中使用的軟件無法查詢二級域名的主域名
  • shangyexin.com域名的所有權限
{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "alidns:GetMainDomainName"
            ],
            "Resource": "acs:alidns:*:*:domain/*",
            "Effect": "Allow"
        },
		{
            "Action": "*",
            "Resource": "acs:alidns:*:*:domain/yasin.store",
            "Effect": "Allow"
        }
    ]
}

更多詳情可以參考阿里雲官方文檔:
點我

3.創建新的AccessKey

用戶和權限都已經創建好後,我們就可以添加AccessKey,點擊用戶名後,點擊最下面的AccessKey,會出現下面的提示:

請及時保存或發送 AccessKey 信息至對應員工,彈窗關閉後將無法再次獲取該信息,但您可以隨時創建新的 AccessKey 。

意思這個AccessKey只能在創建時被看到,後面無法看到,所以我們需要將創建得到的的AccessKey保持下來,以給下面的軟件使用。

一個典型的AccessKey(已失效)如下:

AccessKey ID LTAI4Fc4Rresd6uUdgt9w9Cq
AccessKeySecret 40wgnfmCWVxcTXQT2xgP86hz5Y9dSe

三、DDNS軟件配置

(一)軟件介紹

這裏使用的是這個開源軟件,項目地址:https://github.com/NewFuture/DDNS

原因是支持多平臺和多服務商,下面是feature的簡介:

  • 兼容和跨平臺:
    • 可執行文件(無需 python 環境)
    • 多系統兼容 cross platform
    • python2 和 python3 支持 PyPI - Python Version
    • PIP 安裝 在這裏插入圖片描述
  • 域名支持:
    • 多個域名支持
    • 多級域名解析
    • 自動創建新記錄
  • IP 類型:
    • 內網 IPv4 / IPv6
    • 公網 IPv4 / IPv6 (支持自定義 API)
    • 自定義命令(shell)
    • 正則選取支持(@rufengsuixing)
  • 網絡代理:
    • http 代理支持
    • 多代理自動切換
  • 服務商支持:
  • 其他:
    • 可設置定時任務
    • TTL 配置支持
    • 本地文件緩存(減少 API 請求)

(二)軟件使用

1.配置與運行

我這次機器裝的是Windows系統,所有使用的是exe程序,下載後直接運行即可。

如果下載較慢的話可以使用下面的地址,是2.9.2版本:

下載地址:https://yasin.store/index.php/s/7PGRWFBqxGietnN

可以直接雙擊運行,但是建議使用Windows系統的cmd命令,在命令窗口手動輸命令運行,這樣可以看到打印的日誌。

首次運行會在同級目錄自動生成一個名爲config.json的模板配置文件。我們需要將裏面的內容改成我們自己的配置,因爲這次使用的是阿里雲,參考配置如下:

{
  "$schema": "https://ddns.newfuture.cc/schema/v2.8.json",
  "debug": false,
  "dns": "alidns",
  "id": "LTAI4Fc4Rresd6uUdgt9w9Cq",
  "index4": "public",
  "index6": "default",
  "ipv4": [
    "test.shangyexin.com"
  ],
  "ipv6": [
  ],
  "proxy": null,
  "token": "40wgnfmCWVxcTXQT2xgP86hz5Y9dSe",
  "ttl": null
}

記得將id
token替換爲上一步你在阿里雲上保存的AccessKeyAccessKeySecretipv4替換爲你自己需要解析使用的域名。

出現錯誤時建議將debug選項調爲true以獲取更多信息,config.json更詳細的配置可以參考Github上的項目說明。

配置後直接運行軟件(配置文件選擇你自己的實際路徑):

ddns -c path/to/config.json

如果配置正確的話,你就可以登錄阿里雲控制檯,發現新的域名已經添加成功。

2.定時任務

①bat腳本

下載 create-task.bat於相同目錄,以管理員權限運行。

因爲文件很小,我們可以直接新建一個txt,將後綴名改爲bat,添加下面的內容並保存:

create-task.bat腳本

@ECHO OFF
REM https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb736357(v=vs.85).aspx

SET RUNCMD="%~dp0ddns.exe" -c "%~dp0config.json" >> "%~dp0run.log"

SET RUN_USER=%USERNAME%
WHOAMI /GROUPS | FIND "12288" > NUL && SET RUN_USER="SYSTEM"

ECHO Create task run as %RUN_USER%
schtasks /Create /SC MINUTE /MO 5 /TR "%RUNCMD%" /TN "DDNS" /F /RU "%RUN_USER%"

PAUSE

意思每5分鐘檢查運行一下程序,這樣如果IP變化的話,就會更新DNS解析。

停止定時任務delete-task.bat:

ECHO delete task DDNS

schtasks /delete /TN "DDNS" /f
②Windows計劃任務

也可以右鍵我的電腦,選擇管理-->任務計劃程序-->創建任務自定義更詳細的計劃任務,這裏不多做解釋。

四、END

Enjoy it now.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章