透過 Google GCP 架設 VPN 伺服器

Server

操作影片

建立 Google 帳號以及於 GCP 建立一個 instance

  1. GCP 提供了三個月內 300 美元內免費使用的 quota,所以先建立一個 Google 帳號,過程略。
  2. 前往 GCP console,輸入基本資料以及簽帳卡/信用卡資料告訴 GCP 你不是機器人,除非之後有開啟自動扣款,否則 GCP 不會主動扣款
  3. 在 GCP console 左邊的選單選項中找到 computer engine,建立一個 vm instance,選擇你要的地區,過程略,詳見操作影片。

參考配置

  • 地點:你想要連線的地區,若距離與使用者太遠超過大半個地球將會有很嚴重的延遲
  • 機器類型:N1
    • 自訂核心數:1
    • 自訂記憶體容量:2
  • 架構: x86/64
  • OS:UBUNTU 20.04
  • 硬碟容量: 75 GiB
  • HTTPS:
    • HTTP traffic: On
    • HTTPS traffic: On
    • Allow Load Balancer Health checks: On

建立 VPN 伺服器

安裝 docker

  1. 與主機建立 ssh 連線
  2. 為 APT 倉庫加入 docker,輸入以下指令
    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add the repository to Apt sources:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    
  3. 從 APT 倉庫下載 docker
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. 用 hello-world 容器測試 docker 是否成功安裝,這是 docker 官方提供用來驗證 docker 是否已經妥善安裝的容器,輸入下列指令之後若終端機顯示「Hello from Docker! This message shows that your installation apprars to be working correctly」表示已經成功安裝 docker
    sudo docker run --rm hello-world
    

參考 docker 官方網站

建立 openvpn 容器

  1. 運行容器
    sudo docker run -d --name openvpn-as --cap-add=NET_ADMIN -p 943:943 -p 8443:443 -p 1194:1194/udp -v ~/docker/openvpn-as:/openvpn openvpn/openvpn-as
    
  2. 進入容器
    sudo docker exec -it openvpn-as /bin/bash
    
  3. 使用容器中的 sacli 工具重設密碼,用新密碼取代指令中的your_password
    sacli --user openvpn --new_pass <your_password> SetLocalPassword
    
  4. 更新設定
    sacli start
    
  5. 離開容器
    exit
    

參考 openvpn 官方文件

在 GCP 防火牆開啟 Port 943 8443 1194

  1. 點擊網路介面名稱(通常是 nic0),在裡面任何一個類別中加入 943 8443 1194,這是一個白名單,將想要開放的 port 寫進清單中就能開啟該 port 的對外服務。其中,943 是管理的網頁登入頁面

進入管理頁面

  1. 在網址欄位輸入 https://<主機的IP>:943/admin,會顯示連線不安全的頁面,點開進階並且點擊最下面的繼續前往,進入管理登入頁面
  2. 帳號:openvpn, 密碼:輸入你更改的密碼
  3. 登入之後在左側選單找到 User Management,點擊下面的 User Permissions,並增加一位新的使用者。你可以為這個使用者命名,我將其命名為 user,並記得開啟 Allow auto login,最後記得保存設定
  4. 在剛剛找到的 User Permissions 下方找到 User Profiles,你會找到 user 這個使用者,點擊 New Profile 選擇自動登入後產生密鑰文件。這份密鑰文件/設定檔包含了所有的設定,在連線之前我們會對修正該文件當中的設定。
  5. 使用文件編輯器(如: vscode、notepad++、記事本…),開啟該設定檔
  6. 找到 push-peer-info 這一行,於是其下方增加兩行
    dhcp-option DNS 8.8.8.8
    dhcp-option DNS 8.8.4.4
    
  7. 將文件中所有的 「172.17.0.x」的所有 IP 地址替換成主機 IP。
  8. 將文件中所有的 「443」替換為「8443」

下載 openvpn

  1. https://openvpn.net/community-downloads/ 下載符合自己所持有設備架構的安裝檔
  2. 安裝完成之後將設定檔匯入到程式中就能夠透過 VPN 連線了