我可能不是第一個這樣做的人,但我需要使用 NO-IP 的動態 DNS 服務,這樣我就可以在我離開時輕鬆配置設備和電腦來存取 LAN 上的資源。對於不太熟悉 NO-IP 的人來說,它是一項免費的動態 DNS 服務。大多數家庭和小型辦公室的 Internet 連線都具有動態 IP,這意味著每次建立來自路由器的連線時,IP 位址都會發生最大的變化。通常,網域名稱需要靜態 IP 位址才能運作。動態 DNS 允許網域名稱(即 subdomain.example.com)在 IP 位址變更時透過新的 IP 位址更新 NO-IP 來使用動態 IP。然後,NO-IP 將該 IP 與網域名稱相關聯,以便可以針對該網域而不是更改的 IP 設定服務。這使得配置變得更加容易。
許多路由器都有內建的 NO-IP 用戶端,但我的路由器不支援 NO-IP,而且出於某種原因,我永遠無法讓 NO-IP 推薦用於 Linux 主機的客戶端工作。我下載了原始程式碼並按照說明進行編譯,它似乎正在運行,但它從未更新我的 IP 位址。控制台或日誌檔案沒有輸出來診斷我能找到的問題,所以我決定自己編寫,使用 bash 腳本和一些簡單的實用程式來做到這一點並不難在我的 Linux 機器上。這是我的設定指南和文件。我正在運行 Ubuntu 伺服器,所以我使用 apt 和 nano,但這應該適用於任何基於 POSIX 的系統,例如 Mac OS X、BSD、任何風格的 Linux——甚至是 Raspberry Pi。
該腳本可以作為帶有命令列參數的單一實例運行、作為守護程序、使用 crontabs(按計劃運行程序的實用程式)或作為 Linux 服務運行。
該腳本有一個依賴項,即 wget。大多數 Linux 和 BSD 發行版上通常都會預設安裝它,但如果沒有,請使用套件管理器來安裝它。
sudo apt-get install wget
-或者-
sudo yum install wget
no-ip.sh -u=username -p=password -h=host.sample.com -d=true -l=/path/to/logfile.log
參數:
-u, --username
登入 no-ip.com 的使用者名稱。
-p, --password
登入 no-ip.com 的密碼。
-h, --hostname
要更新的網域。
-d, --detectip
讓腳本偵測您的外部 IP 位址。這優先於 -i。
-i, --ip
手動設定要更新的 IP 位址。如果 -d 或 -i 均未指定,則 no-ip 將使用它偵測到的 IP 位址。
-n, --interval
當將腳本作為守護程序/服務運行時(請參閱安裝),這將每 n 分鐘更新一次 no-ip。
-l, --logfile
設定日誌檔案的路徑。該文件必須是可寫的。
-c, --config
設定設定檔的路徑。該文件必須可讀。設定檔參數優先於命令列參數。
no-ip.sh
使用預設位置 /etc/no-ip/no-ip.conf 中的設定檔中的設定運行腳本
no-ip.sh -u=username -p=password -h=host.sample.com -d=true -l=/path/to/logfile.log
進行一次性更新、檢測 UP 並記錄結果
no-ip.sh -c=/home/username/no-ip.conf
使用設定檔中的設定運行腳本。
no-ip.sh /dev/null 2>&1 &
使用預設位置 /etc/no-ip/no-ip.conf 中的設定檔中的設定將腳本作為守護程式運行。
設定檔使用簡單的語法來定義參數。任何命令列參數(除了--config)也可以在設定檔中指定。與命令列參數相同的規則適用於設定檔參數(即,如果兩者都指定,「Detectip」將覆寫「ip」)。
例子:
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
interval=10
detectip=true
在安裝腳本之前,將檔案下載並解壓縮到本機。這些說明假定您位於 no-ip-master 資料夾中。
cd ~
wget https://github.com/theonemule/no-ip/archive/master.zip
unzip master.zip
cd no-ip-master
方法一:定時任務
Crontabs 允許您指定執行腳本的計劃,而且它也會以配置 crontab 的使用者身分執行腳本。確保使用者俱有腳本的執行權限、設定檔的讀取權限以及日誌檔案的寫入權限。 Crontabs 將按計劃運行腳本,因此無需指定時間間隔。
以下是如何以 root 身分執行腳本。
1.) 在etc中建立一個資料夾。
sudo mkdir /etc/no-ip
2.) 建立一個設定檔。
sudo touch /etc/no-ip/no-ip.conf
3.) 使用您喜歡的編輯器設定參數。我用奈米。有關詳細信息,請參閱上面的配置文件部分。
sudo nano /etc/no-ip/no-ip.conf
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
detectip=true
4.) 將 no-ip.sh 複製到 /usr/sbin
sudo cp no-ip.sh /usr/sbin/no-ip.sh
5.) 使腳本可執行
sudo chmod +x /usr/sbin/no-ip.sh
6.) 以 root 身分登入
sudo -i
7.) 編輯 root 的 crontab
crontab -e
8.) 將條目加入底部。 */10 告訴 crontab 每次目前時間能被 10 整除時執行腳本,或每 10 分鐘執行一次並儲存 crontab。
*/10 * * * * /usr/sbin/no-ip.sh
方法 2:Linux 服務(為基於 Debian 的發行版編寫。這將因其他發行版而異)
確保 root 具有腳本的執行權限、設定檔的讀取權限以及日誌檔案的寫入權限。
1.) 在/etc 中建立一個資料夾。
sudo mkdir /etc/no-ip
2.) 建立一個設定檔。
sudo touch /etc/no-ip/no-ip.conf
3.) 使用您喜歡的編輯器設定參數。我用奈米。有關詳細信息,請參閱上面的配置文件部分。
sudo nano /etc/no-ip/no-ip.conf
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
interval=10
detectip=true
4.) 將 no-ip.sh 複製到 /usr/sbin
sudo cp no-ip.sh /usr/sbin/no-ip.sh
5.) 使腳本可執行
sudo chmod +x /usr/sbin/no-ip.sh
6.) 將 no-ip-service 複製到 init.d
sudo cp no-ip-service /etc/init.d/no-ip-service
7.) 使 no-ip-service 可執行
sudo chmod +x /etc/init.d/no-ip-service
8.) 啟動服務
sudo service no-ip-service start
9.) 新增啟動時啟動的服務。
update-rc.d no-ip-service defaults