【免費 DDNS 自架】拒絕不安全連線!GCP Nginx 反向代理 + SSL 免費憑證 (Ep.2)

目錄

歡迎回到 免費 DDNS 自架 系列教學!在 [Ep.1 環境架設篇] 中,我們成功在 GCP 永久免費主機上部署了 Python 核心程式,並完成了 Argon2 密碼雜湊與 AES 設定檔加密。

但目前的系統還有兩個致命傷:

  1. 手動運作:如果您關閉 SSH 視窗或主機重開機,服務就會停止。
  2. 連線不安全:目前使用的是 http:// 明文傳輸。這意味著當您在咖啡廳登入管理後台時,您的密碼可能會被駭客攔截。

這不是我們要的「企業級」系統!

本篇教學 (Ep.2) 將帶您完成最後一哩路:設定 Systemd 自動啟動,並配置 Nginx 反向代理Let’s Encrypt SSL 憑證,讓您的中控台擁有綠色安全鎖頭。


步驟一:設定 Systemd 自動啟動 (讓服務永不掉線)

我們要將 Python 程式註冊為 Linux 的系統服務,這樣即使 GCP 主機因維護而重啟,DDNS 中控台也會自動復活。

1. 建立服務設定檔

我們已為您準備好標準範本。請使用編輯器建立服務檔案:

sudo nano /etc/systemd/system/ddns.service

2. 填入設定內容

請複製以下內容,並將 YOUR_USERNAME 修改為您的實際使用者名稱 (GCP 預設通常是您的 Google ID):

[Unit]
Description=Clone SecureDDNS Server v2.0
After=network.target

[Service]
Type=simple
# ⚠️ 請將 YOUR_USERNAME 替換為您的 Linux 使用者名稱
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/ddns-server
ExecStart=/home/YOUR_USERNAME/ddns-server/venv/bin/python ddns_management_server.py
Restart=always
RestartSec=10

# 安全性強化 (禁止修改系統核心與讀取其他目錄)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/YOUR_USERNAME/ddns-server

[Install]
WantedBy=multi-user.target

編輯完成後,按 Ctrl+X,輸入 Y,然後按 Enter 存檔。

免費DDNS

3. 啟用服務

執行以下指令,讓服務生效並立即啟動:

# 重新載入設定
sudo systemctl daemon-reload

# 設定開機自動啟動
sudo systemctl enable ddns.service

# 立即啟動服務
sudo systemctl start ddns.service

# 檢查狀態 (應顯示 Active: active (running))
sudo systemctl status ddns.service

步驟二:安裝 Nginx 反向代理

為了讓 免費 DDNS 自架 系統更安全且效能更好,我們不讓 Python 直接面對外網,而是透過高效能的 Web 伺服器 Nginx 來轉發流量。

1. 安裝 Nginx

sudo apt install -y nginx

2. 設定 Nginx 轉發規則

建立一個新的網站設定檔:

sudo nano /etc/nginx/sites-available/ddns

複製以下內容,請務必將 server_name 修改為您的網域 (Ep.1 中設定的那個):

server {
    listen 80;
    # ⚠️ 請修改為您的網域,例如: ddns.example.com
    server_name ddns.您的網域.com;

    # 一般請求轉發
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 即時日誌串流 (Server-Sent Events) 支援
    location /logs {
        proxy_pass http://127.0.0.1:8080/logs;
        proxy_http_version 1.1;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding off;
    }
}

3. 啟用設定

建立連結並測試設定是否正確:

# 建立連結
sudo ln -s /etc/nginx/sites-available/ddns /etc/nginx/sites-enabled/

# 測試 Nginx 設定檔語法 (應顯示 successful)
sudo nginx -t

# 重新載入 Nginx
sudo systemctl reload nginx

步驟三:申請 SSL 憑證 (掛上綠色鎖頭)

這是 免費 DDNS 自架 最重要的一步!我們使用 Certbot 來自動申請與安裝 Let’s Encrypt 的免費 SSL 憑證。

1. 安裝 Certbot

sudo apt install -y certbot python3-certbot-nginx

2. 自動申請憑證

執行以下指令,Certbot 會自動驗證網域並修改 Nginx 設定:

sudo certbot --nginx -d ddns.您的網域.com

過程中系統會詢問是否要強制將 HTTP 轉導向 HTTPS,請務必選擇 Redirect (輸入 2),確保連線永遠加密。

Certbot

步驟四:最終驗證與安全性測試

恭喜!您已經完成了伺服器端的所有架設工作。

1. 開啟瀏覽器測試

DDNS

在網址列輸入 https://ddns.您的網域.com

  • 檢查鎖頭:確認網址列旁是否有「鎖頭」圖示,代表 SSL 加密已生效。
  • 登入測試:輸入 Ep.1 設定的管理員帳號密碼,確認能順利進入儀表板。

2. 測試即時日誌 (v2.0 獨家功能)

在管理介面點擊 「顯示即時日誌」。由於我們在 Nginx 正確設定了 SSE 支援,您應該能看到系統運作的即時狀態,這對於除錯非常有用。


結語與下集預告

經過 Ep.1 與 Ep.2 的努力,您現在擁有一台:

  1. GCP 永久免費 的高效能主機。
  2. 企業級資安 (Argon2 + AES) 的 Python 核心。
  3. 全自動運作 且具備 HTTPS 加密 的 Web 中控台。

這已經比市面上 90% 的付費 DDNS 服務還要強大了!

但這套系統目前還是「空」的,因為還沒有任何設備連上來。 在最後一篇 【Ep.3:客戶端串接實戰篇】,我們將教您如何將家中的 ASUS 路由器Synology NAS 或是 OpenWrt 設備,透過簡單的設定串接到這個中控台,徹底擺脫 No-IP 的束縛!

請準備好您的路由器,我們下集見!

技術交給我們,專注你最擅長的事

從網站、網路到資料安全,無論是創業者、工作室或企業,我們都給你最全方位的 IT 支援。