anpanman
Published on

OpenVPN 備份與還原流程 - OpenVPN Access Server(AWS Marketplace 版)

步驟一:在源 EC2 上備份數據庫

1. 把 key 傳到要執行備份的那台 EC2

scp -i ./staging-key/openvpn-key-5users.pem /tmp/openvpn_backup_*.tar.gz openvpnas@ec2-57-181-116-160.ap-northeast-1.compute.amazonaws.com:/tmp/

2. 創建備份目錄並打包數據庫文件

# 創建備份目錄
sudo mkdir -p /tmp/openvpn_backup

# 複製所有數據庫文件到備份目錄
sudo cp /usr/local/openvpn_as/etc/db/*.db /tmp/openvpn_backup/

# 也可以備份整個 etc 目錄以防萬一
sudo cp -r /usr/local/openvpn_as/etc /tmp/openvpn_backup/

# 打包備份文件
sudo tar -czf /tmp/openvpn_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /tmp openvpn_backup

# 查看打包結果
ls -la /tmp/openvpn_backup_*.tar.gz

步驟二:傳輸備份文件到目標 EC2

使用 SCP 傳輸文件

# 語法:scp 源文件 用戶名@目標IP:目標路徑
scp /tmp/openvpn_backup_*.tar.gz ec2-user@目標EC2的IP:/tmp/

# 例如:
scp /tmp/openvpn_backup_20250703_143000.tar.gz ec2-user@10.0.2.100:/tmp/

如果使用 SSH 金鑰

# 使用私鑰進行 SCP 傳輸
scp -i /path/to/your-key.pem /tmp/openvpn_backup_*.tar.gz ec2-user@目標EC2的IP:/tmp/
scp -i ./staging-key/openvpn-key-5users.pem /tmp/openvpn_backup_20250708_070732.tar.gz openvpnas@ec2-57-181-116-160.ap-northeast-1.compute.amazonaws.com:/tmp/

步驟三:在目標 EC2 上還原數據庫

1. 解壓備份文件

# 切換到 /tmp 目錄
cd /tmp

# 解壓備份文件
tar -xzf openvpn_backup_*.tar.gz

# 查看解壓結果
ls -la openvpn_backup/

2. 停止目標 EC2 的 OpenVPN Access Server

# 停止服務
sudo systemctl stop openvpnas

3. 備份現有配置(可選但建議)

# 備份現有的數據庫目錄
sudo cp -r /usr/local/openvpn_as/etc/db /usr/local/openvpn_as/etc/db_original_backup_$(date +%Y%m%d_%H%M%S)

4. 還原數據庫文件

# 確保目標目錄存在
sudo mkdir -p /usr/local/openvpn_as/etc/db/

# 刪除原本的 db 檔
cd /usr/local/openvpn_as/etc/db
rm -f certs.db cluster.db config.db config_local.db log.db notification.db userprop.db


# 複製數據庫文件到正確位置
sudo cp /tmp/openvpn_backup/*.db /usr/local/openvpn_as/etc/db/

# 如果需要還原整個 etc 目錄
# sudo cp -r /tmp/openvpn_backup/etc/* /usr/local/openvpn_as/etc/db/

# 設置正確的文件權限
sudo chown -R openvpn_as:openvpn_as /usr/local/openvpn_as/etc/db/
sudo chmod 600 /usr/local/openvpn_as/etc/db/*.db

5. 驗證文件已正確複製

# 查看數據庫文件
ls -la /usr/local/openvpn_as/etc/db/

# 檢查文件權限
ls -la /usr/local/openvpn_as/etc/db/*.db

步驟四:重新啟動目標 EC2 的 OpenVPN Access Server

1. 啟動服務

# 重新啟動服務
sudo systemctl restart openvpnas

# 或者分別執行停止和啟動
sudo systemctl stop openvpnas
sudo systemctl start openvpnas

2. 檢查服務狀態

# 檢查服務狀態
sudo systemctl status openvpnas

# 檢查進程是否運行
ps aux | grep openvpn

# 檢查端口是否監聽
sudo netstat -tlnp | grep openvpn

3. 查看服務日誌(如有問題)

# 查看最近的日誌
sudo journalctl -u openvpnas -f

# 查看 OpenVPN Access Server 的日誌
sudo tail -f /usr/local/openvpn_as/etc/log/openvpnas.log

步驟五:驗證還原結果

1. 通過 Web 界面測試

  • 訪問 https://目標EC2的IP:943/admin
  • 使用原有管理員帳戶登入
  • 確認所有設定和用戶資料都已正確還原

2. 測試 VPN 連接

  • 嘗試使用現有的客戶端配置文件連接
  • 確認所有用戶都能正常連接

清理工作

清理臨時文件

# 在源 EC2 上清理
sudo rm -rf /tmp/openvpn_backup*

# 在目標 EC2 上清理
sudo rm -rf /tmp/openvpn_backup*

重要數據庫文件說明

文件名用途
config.db主要配置數據庫
config_local.db本地配置數據庫
certs.db證書數據庫
userprop.db用戶屬性數據庫
log.db日誌數據庫
notification.db通知數據庫
cluster.db集群配置數據庫

故障排除

如果服務啟動失敗

# 檢查詳細錯誤日誌
sudo journalctl -u openvpnas --no-pager

# 檢查配置文件語法
sudo /usr/local/openvpn_as/scripts/sacli --key "config_file" ConfigQuery

# 重置權限
sudo chown -R openvpn_as:openvpn_as /usr/local/openvpn_as/

注意事項

⚠️ 重要提醒

  • 確保兩台 EC2 之間的網路連通性
  • 備份前務必停止源 EC2 的 OpenVPN 服務
  • 還原前務必停止目標 EC2 的 OpenVPN 服務
  • 確保目標 EC2 上已安裝相同版本的 OpenVPN Access Server
  • 檢查文件權限和擁有者設定
  • 還原後務必進行完整的功能測試
  • 建議在維護時間窗口內執行此操作