基於nodejs的阿里雲DDNS服務,支援多網路卡繫結

新房客發表於2022-02-26

前段幾天寫的,自用。 想著也許有和我一樣需求的同學,所以開源發出來了。

提供阿里雲的DDNS設定,支援多網路卡多域名繫結。

特性

  • 支援阿里雲DDNS設定
  • 支援針對多個線路多個網路卡單獨設定域名
  • 支援IPv4,IPv6
  • 支援Docker

說明

每次執行時,會列印本地介面卡資訊,推薦根據網路卡名繫結域名

必須在阿里雲後臺建立域名,記錄值填寫什麼無所謂。

阿里雲AccessKey開通:https://help.aliyun.com/document_detail/38738.html

必要許可權:UpdateDomainRecord,DescribeDomainRecords

node版本>=16

多網路卡有什麼用, 一些裝置有可能接入多條線路,如:電信、聯通、移動、海外線等,對每條線提供一個獨立的域名很有必要~。

安裝方式

npm i -g ddns-ali 

命令執行方式

引數之間只能有一個空格, 如果是win環境需要在powershell中執行。

網路卡檢視命令 ifconfig,一般為en0,en1等,選擇有本地IP,如192.168.xx.xx的的進行繫結

多網路卡繫結多域名方式:

ddns-ali -e true -AccessKey 123 -AccessKeySecret 123 -Domain 'eth0&eth0.xxx.com,eth1&eth1.xxx.com'

單域名方式
不指定網路卡,會根據你當前的外網IP動態繫結,如果支援IPv6,會優先繫結

ddns-ali -e true -AccessKey 123 -AccessKeySecret 123 -Domain 'eth0.xxx.com'

指定IPv6方式

ddns-ali -e true -ip 6 -AccessKey 123 -AccessKeySecret 123 -Domain '網路卡名&eth0.xxx.com'

程式引入方式

import { IConfig, mian, logConfig, getArgv, getDomain, log } from 'ddns-ali';

// logConfig.debug = true;// 是否輸出日誌資訊

async function init(){
    const config = {} as IConfig;
    config.AccessKey = getArgv('AccessKey') as string;
    config.AccessKeySecret = getArgv('AccessKeySecret') as string;
    config.IPVersion = getArgv('ip') as any || '4';
    config.DomainObj = getDomain(getArgv('Domain'));
    config.Domain = config.DomainObj.domain;
    config.Ethernets = config.DomainObj.ethernet;

    const r = await mian(config);
    if(r) {
        log('---成功---');
    }else{
        log('---失敗---');
    }
}

引數

  • -e true或false true是命令列執行
  • -Domain '網路卡名1&域名1,網路卡名2&域名2', 網路卡名與域名通過‘&’進行連線,多個域名使用','分割
  • -ip 4或6 指定要繫結的的ip型別

定時執行

程式不包含定時執行,現在各種系統都有定時任務。沒必要在多此一舉。節省系統資源。

  1. 編寫一個run.sh命令檔案
#!/bin/bash
ddns-ali -e true -AccessKey 123 -AccessKeySecret 123 -Domain 'eth0&eth0.xxx.com,eth1&eth1.xxx.com'
# read
  1. win 計劃任務中新增 run.sh ,mac/linux 可以在crontab中新增 run.sh

相關文章