使用 Systemd 定時器可靠地執行 ownCloud 後台作業
將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。
範例場景: Maya 在咖啡館工作時,使用 Debian 12 VPS 作為個人 VPN 端點。她的筆記型電腦應透過加密的 WireGuard 隧道連接到該 VPS,並將 IPv4 網路流量透過該伺服器發送。此範例並非實際測試報告;下方顯示的公用 IP 位址、金鑰和終端輸出均為佔位符或範例。
此配置為點對點 VPN:一個客戶端連接到一個伺服器。它使用 Debian 自帶的 WireGuard 工具,採用單對等節點、IPv4 轉送和 IPv4 NAT。此設定假設 VPS 具有公網或已連接埠轉送的 IPv4 位址,您可以使用 sudo 對其進行管理,並且可以透過 UDP 連接埠 51820 存取它。本教學不涉及配置路由 IPv6 或 VPS 後端的私有網路。
此範例10.8.0.0/24使用 VPN,10.8.0.1伺服器端和10.8.0.2Maya 的第一個用戶端都配置了 VPN。請使用與用戶端 Wi-Fi、辦公室網路或雲端網路不重疊的子網路。即使握手成功,衝突也可能導致流量走錯路徑。
WireGuard 使用公鑰認證。伺服器需要客戶端的公鑰,客戶端也需要伺服器的公鑰;每個私鑰都保存在其所屬裝置上。 Debian 的 WireGuard 文件介紹了軟體包和對等節點的配置,而 WireGuard 的快速入門指南則介紹了金鑰產生和 keepalive 機制。請參閱Debian WireGuard 文件和WireGuard 快速入門指南。
更新軟體包索引並安裝 WireGuard 和 nftables,這將提供範例 IPv4 位址偽裝規則。在 VPS 上執行以下命令:
sudo apt update
sudo apt install wireguard nftables
Debian 透過wireguard元軟體包及其工具打包了 WireGuard。如果伺服器已在使用防火牆管理器(例如 UFW、firewalld 或提供者管理的規則),請在新增任何內容之前確定其活動規則集。請勿使用此範例取代現有的防火牆配置。

查詢路由表,了解 Debian 使用哪個介面來存取外部 IPv4 位址:
ip route get 1.1.1.1
範例中,路由使用 `<route_name> eth0`。您的 VPS 可能顯示不同的名稱,例如ens3`<route_name>` 或 ` enp1s0<route_name>`;稍後在 NAT 規則中使用您輸出的名稱。另請注意伺服器的公網 IPv4 位址或 DNS 名稱。如果伺服器位於路由器之後,請將來自該路由器的 UDP 51820 連接埠轉送至 Debian 主機。
要建立完整的隧道,需要啟用 IPv4 轉送。請立即啟用並使其在重新啟動後仍然有效:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
sysctl net.ipv4.ip_forward
最後一條命令應該會報告結果net.ipv4.ip_forward = 1。此設定允許封包轉送;但它本身並不會開啟防火牆或提供NAT功能。

在 Debian 主機上建立伺服器金鑰,並設定嚴格的檔案權限:
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
盡可能在客戶端設備上產生客戶端金鑰對。在wireguard-tools已安裝以下軟體的 Linux 用戶端上:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
對於手機,請在官方 WireGuard 應用程式中建立新的隧道,並讓它產生個人資料金鑰。僅將客戶端的公鑰複製到伺服器。務必client.key妥善保管,切勿將其貼到伺服器配置中或在聊天中發送。 Debian Bookwormwg(8)手冊詳細記錄了關鍵命令和介面欄位。
/etc/wireguard/wg0.conf按照以下結構建立密鑰。將每個大寫佔位符替換為對應的真實密鑰。使用 `getServerPrivateKey()` 指令在本機上讀取伺服器私鑰sudo cat /etc/wireguard/server.key;將客戶端公鑰放入 peer 部分。
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
請保護該文件,因為它包含私鑰:
sudo chown root:root /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
AllowedIPs = 10.8.0.2/32為該對等方指派一個 VPN 位址,並阻止其他對等方聲明該位址。為每個額外的設備10.8.0.3/32分配單獨的金鑰對和不同的位址,例如 123. ...

對於範例完整 IPv4 隧道,出站封包10.8.0.0/24必須透過具有來源 NAT 的公網路介面發出。在伺服器現有的 nftables 設定或防火牆管理器中新增對應的規則。以下獨立的 nftables 表示例說明了該規則;請將其替換eth0為步驟 2 中發現的介面:
table ip wg_nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.8.0.0/24 oifname "eth0" masquerade
}
}
如果您使用 Debian 系統nftables.service,請將 nftables 表合併到服務啟動時載入的設定中,並sudo nft -c -f /etc/nftables.conf在重新載入之前驗證整個檔案。在應用目前配置之前,請檢查該配置是否會重新整理或取代現有規則。 NAT 本身並不能覆寫丟棄流量的轉送鏈策略:請wg0在您的活動防火牆中允許從 WAN 介面轉送流量,並允許回傳流量。 Debiannft(8)手冊中記錄了 nftables 規則載入和 NAT 語句的相關內容。
在VPS提供者防火牆和任何主機防火牆中,允許入站UDP 51820連接埠。不要為該WireGuard隧道開放TCP 51820埠。變更防火牆策略時,請保持SSH存取規則有效;如果防火牆重新啟動導致連線斷開,請使用提供者控制台或其他復原路徑。

在 WireGuard 用戶端應用程式中建立一個新的隧道,或在 Linux 用戶端上儲存類似這樣的設定。請將私鑰、伺服器公鑰和端點替換為實際值。下面的 TEST-NET 位址只是一個範例,無法連接到真實的伺服器。
[Interface]
Address = 10.8.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0透過隧道路由 IPv4 目標位址,因此它是完整的 IPv4 隧道方案。對於僅到達 WireGuard 伺服器位址的窄分支隧道,請改用10.8.0.0/24其他方案。若要存取伺服器後面的 LAN,請在用戶端的設定中包含該 LAN 的實際子網AllowedIPs,新增回傳路由或適當的 NAT,並允許流量通過伺服器防火牆;這些步驟取決於 LAN 路由器,不在本範例中。
PersistentKeepalive = 25可以幫助位於 NAT 後面的用戶端在空閒一段時間後保持可訪問性。它是可選的;WireGuard 文件指出大多數用戶不需要它,但建議在 NAT 映射必須保持開啟時,25 秒是一個普遍適用的間隔。DNS一些用戶端和基於 的用戶端支援此欄位wg-quick;如果您的應用程式忽略它,請透過該應用程式本身的控制項設定 DNS。

在 Debian 系統中,使用以下命令在啟動時啟動該介面:
sudo systemctl enable --now wg-quick@wg0
sudo wg show
在 UDP 連接埠 51820 可達後,匯入或啟動用戶端設定檔。wg show檢查預期對等方是否出現,以及latest handshake客戶端發送流量後配置是否更新。 Debian wg-quick(8)Bookworm 手冊介紹了 systemd 單元使用的介面設定助手。
握手失敗首先指向可達性問題或金鑰不符:請確認端點位址和連接埠、UDP 防火牆規則、用戶端設定檔中的伺服器公鑰、用戶端公鑰wg0.conf以及正確的系統時間。握手失敗但流量仍然無法正常運作通常指向轉送、NAT、路由重疊或防火牆轉送鏈規則。

用戶端連線成功後,先測試伺服器的隧道位址,然後使用外部 IPv4 位址檢查服務檢查看到的公用 IPv4 位址:
ping -c 3 10.8.0.1
curl -4 https://ifconfig.me
如果允許 ICMP 協議,ping 命令應該可以到達伺服器。對於這種全隧道配置,外部 IPv4 檢查應該顯示 VPS 的公網出口位址。如果公網位址沒有變化,請檢查AllowedIPs轉送設定、NAT 介面名稱以及防火牆的轉送策略。
此範例僅支援 IPv4,AllowedIPs = 0.0.0.0/0不路由 IPv6,因此具有 IPv6 連線的用戶端仍可能將 IPv6 流量傳送至隧道外部。請勿將此配置描述為完整的雙棧隱私隧道。若要透過 WireGuard 承載 IPv6,請為隧道分配和路由 IPv6 位址,啟用 IPv6 轉發,配置相應的防火牆和路由規則,並在::/0端對端路徑正常運作後才新增用戶端。不同服務提供者的支援情況可能有所不同。或者,請謹慎選擇分割隧道策略,並檢查用戶端的 IPv6 行為。


net.ipv4.ip_forward=1NAT 規則使用實際出口接口,且防火牆允許轉送流量。10.8.0.0/24與本地網路或遠端網路重疊。如有必要,請重新編號隧道,同時更新對等節點和防火牆規則。wg-quick@wg0已啟用防火牆和 sysctl 設置,並確保這些設定已透過系統的正常配置保留。在確認設定完成之前,請先驗證伺服器服務是否處於活動狀態,wg show是否報告最近一次握手且傳輸計數器持續增加,客戶端是否可以存取伺服器10.8.0.1,以及 IPv4 出口檢查是否報告了伺服器的公網位址。僅在持久防火牆和轉發設定生效後才能重新啟動伺服器,然後重複上述檢查。對於其他對等節點,請指派單獨的金鑰對和唯一的隧道 IP 位址,然後透過刪除裝置的對等節點條目並重新載入介面來移除該裝置。
將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。
透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。
透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。
透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。
檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。
啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。
使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。
為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。
將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。
配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。