← 回測試報告中心
P322 智財局 ・ 卡米爾維運固定 IP 出口 ・ 建置實錄與驗收|2026-07-27 19:00–23:30 · 建置者 CYC
結論:出口主機建置完成並驗證通過,Mac 端已可用 ── 待兩平台加入白名單即全面生效
行動辦公也能滿足「限制 IP 連線」的資安要求:人在任何網路,連平台的來源 IP 永遠是同一個

一句話:智財局要求平台只接受指定 IP 連線,但我們同仁多是行動辦公(手機熱點、在外連線),本來就沒有固定 IP。這次在 GCP 台灣機房自建了一台 WireGuard 出口主機,讓連往指定平台的流量都從同一個固定位址出去,其餘上網完全不受影響。

🎯 要解決什麼問題

需求來源:智財局資訊室要求 tipo.botrun.ai(美波)與 tipo-agent.botrun.ai(波特玩)限縮來源 IP,只接受本局與卡米爾的位址連線(p322_tipo#7)。
衝突點:限縮上線後,卡米爾夥伴用行動網路、在外辦公、出差在國外,來源 IP 每次都不一樣,一律會被擋在門外。
本次解法:自建一個「永遠不變的出口」。人在哪裡不重要,連平台的流量統一從這個固定位址出去;其他所有上網照走自己的網路。

🧭 架構:只有平台流量走公司出口

  你的 Mac / iPhone
  (家中 Wi-Fi、手機熱點、出差飯店、國外…)
        │
        ├──── 連 tipo / tipo-agent 的流量 ──→ 〔GCP 台灣機房 · 固定 IP〕──→ 平台(白名單放行)
        │
        └──── 其他所有上網(私人瀏覽、串流、購物)──→ 直接走你自己的網路
                                                      (不經過公司主機)

這叫 split-tunnel(分流模式):把「公私分離」做在架構層,不靠自律。私人流量從來不經過公司的任何設備,所以隧道整天開著也沒有代價——實際設定上就讓它自動啟用,使用者不必記得開關。

🧱 建置成果

全部建在 P322 專案既有的 GCP 專案內,但放進獨立的虛擬網路,與正式主機的網段完全隔離。

資源內容用意
虛擬私有雲網路
wireguard-net
自訂模式、子網段 10.99.0.0/24與正式主機網段(10.140.0.x)天生不相通,出口主機萬一被攻破也進不了正式環境
固定外部 IP
wireguard-static-ip
asia-east1(台灣彰化)靜態保留位址全案交付物。主機重開、重建、換可用區,這個位址都不變,白名單永遠不用改
主機
wireguard-server
e2-micro/Ubuntu 24.04 LTS/約 US$8 月只跑 WireGuard,是可拋棄的消耗品;30 分鐘可重建
防火牆規則
wireguard-allow-51820
只開 UDP 51820,對準標記 wireguard 的主機攻擊面只有一個 UDP 埠
客戶端金鑰cyc-macbookpro(已建)一人一裝置一把金鑰,可單獨停權、可稽核
建立獨立虛擬網路
建立獨立內網 wireguard-net:自訂子網段 10.99.0.0/24,防火牆只勾 SSH
虛擬網路建立完成
建立完成:與 RD 的 default 網路各自獨立,互不相通
主機設定總覽
主機送出前的總覽:e2-micro、Ubuntu 24.04 LTS、網路掛在 wireguard-subnet

防火牆的部分只新增一條規則、不動任何既有規則:來源不限、但只開 UDP 51820,而且只對貼了 wireguard 標記的那台主機生效——換句話說,這條規則的作用範圍就是我們自己那台機器。

✅ 驗收

#檢查項目怎麼驗結果
CP1伺服器運作主機上查 WireGuard 狀態🟢 通過(wg0 介面存在、監聽 51820)
CP2隧道握手客戶端連上後查伺服器是否收到🟢 通過(handshake 成立、雙向皆有流量)
CP4分流正確隧道開啟時查詢自己的對外 IP🟢 通過(顯示個人網路位址,證明私人流量沒繞道)
CP3平台放行開隧道連兩平台⏸ 待白名單(p322_tipo#8/#9)
CP5關閉即被拒關隧道再連同一平台⏸ 待白名單
CP6重開機 IP 不變主機停止再啟動後比對⏸ 待辦(IP 為靜態保留,理論上必然不變)

CP1/CP2 的實際輸出(位址已部分遮蔽):

$ sudo wg show
interface: wg0
  listening port: 51820

peer: (公開金鑰略)
  endpoint: (個人網路位址略)
  allowed ips: 10.66.66.2/32
  latest handshake: 28 seconds ago
  transfer: 692 B received, 604 B sent

CP4 的意義值得多說一句:隧道開著的時候查「我的 IP」,顯示的是你自己網路的位址而不是公司出口——這正是分流模式的證明,代表私人瀏覽完全沒有經過公司設備。這與一般 VPN 的預期相反,驗收時別誤判成失敗。

🧠 四個關鍵決策

決策建在既有專案,但放進獨立虛擬網路
取捨
原本打算另開專案徹底分家,實地發現該專案是正式環境(裡面有平台的入口位址)後一度翻案。最終判斷:平台尚未對客戶正式啟用、屬草創期,且組織扁平,就地建置可接受——但必須用獨立虛擬網路把內網隔開,並訂出行為守則。
守則
自建資源一律 wireguard- 開頭;名字不是這個開頭的一律只看不碰;破壞性按鈕(釋出位址/刪除/停止)按下前先唸出該列名稱確認。清單頁與詳細頁都是唯讀,看不會壞事。
決策維持 e2-micro,不用免費方案
比較
GCP 免費層(US$0)只限美國機房:連線多 130–150ms 延遲,而且白名單裡會出現一個美國位址,對政府客戶的觀感與說明成本都是負擔。Spot VM(US$2)會被 Google 無預警回收,「穩定」不成立。
結論
US$8/月 ≈ 台幣 250 元,買的是「台灣位址+隨時在線+不會被回收」。這台主機是進出政府案平台的唯一門票,不在門票上省咖啡錢。(穩定運行一個月後可申請一年期承諾折扣,降到約 US$4.5,那才是無代價的省法。)
決策分流模式,且讓它自動啟用
問題
「我會忘記打開怎麼辦?」
解答
分流模式下隧道開著沒有任何代價:私人流量不經過公司主機、不影響速度、不產生額外流量費。既然開著沒代價,就不該要求使用者記得開關——設定成連上網路即自動啟用即可。
唯一要知道的副作用:主機若故障,症狀會是「只有那兩個平台連不上、其他網路都正常」,這個症狀本身就是最好的診斷提示。
決策不做快照;真正該備份的是客戶端設定檔
理由
這台主機上沒有任何不可再生的資料(作業系統+WireGuard+金鑰,30 分鐘可重建),而真正的資產——固定 IP——是獨立於主機的資源,主機砍掉重建位址照樣不變。快照要保護的東西在這裡不存在,排程還要花錢與維護。
真正該備份的是客戶端的 .conf 設定檔(存密碼管理器)——它在使用者手上,不在主機上。

⚠️ 給後人的六個地雷

這些都是這次首度實作實際踩到的,原始手冊沒有寫。完整教學(含 31 張逐步截圖)在 p322_tipo_timeless/fixed-ip/

地雷安裝腳本猜的對外位址是錯的(最容易整套白做)
現象
腳本第一題 IPv4 or IPv6 public address 會自動帶入主機看到的內網位址(10.99.0.2)。因為雲端主機自己看不到外部位址——外部位址掛在網路層做轉送,這是雲端通例,不是設定錯誤。
後果與修法
照按 Enter 的話,客戶端設定檔裡的連線目標會是一個外面根本連不到的內網位址,整套設定形同白做。必須手動刪掉、改填固定 IP。
安裝腳本第一題
三行指令跑完後停在第一題——畫面上的 10.99.0.2 是錯的,要改成固定 IP
地雷腳本的連線埠是隨機的,和防火牆規則對不上
現象
安裝腳本不是用慣例的 51820,而是隨機產生一個埠號(本次給了 50867)。但防火牆規則只開了 51820,兩邊不一致=封包全被擋,而且症狀是「什麼都設好了就是連不上」,很難聯想到原因。
一行驗證
裝完立刻檢查客戶端設定檔的連線目標,必須是「固定 IP:51820」;兩個值有一個不對就要修。
地雷中文輸入法讓選單完全沒反應(卡關十分鐘)
現象
腳本選單打「4」卻一直重複提問,像當機。原因是中文輸入法打出來的是全形數字,腳本只認半形,收到就當無效輸入。方向鍵也不吃(會產生逃脫字元)。
對策
操作終端機選單前先切成英文輸入法;卡住時按 Ctrl+C 離開。更可靠的做法是繞過選單、直接下指令修改設定檔——對非工程師反而更穩。
選單無反應
打了 4 卻一直重問,以及方向鍵產生的逃脫字元
地雷「啟用了卻沒有握手」是正常的,不是故障
說明
分流模式下,WireGuard 只在真的有封包要走隧道時才握手。沒有連平台就沒有流量要走,隧道會靜靜待命。全流量模式才會一啟用就握手——用錯的心智模型驗收,會誤判成失敗。
觸發法
對隧道內的伺服器位址送幾個封包(ping),再回頭查伺服器狀態,握手與流量就會出現。
地雷兩個看似無關的選項會害你多繞路
① 作業系統別選 Minimal 版
精簡版砍掉了下載工具,安裝腳本的第一行指令就會失敗,得先自己補裝。省下的空間對這個用途毫無意義。
② 設定檔不在文件寫的位置
網路上多數教學說設定檔在系統管理員家目錄,實際上這版腳本放在執行者自己的家目錄。找不到檔案時別急著重裝,先確認路徑。
地雷中文版介面的名詞和英文教學對不上
說明
雲端主控台中文版把「VPC 網路」翻成「虛擬私有雲網路」、「保留靜態位址」寫成「預留外部 IP」、「區域性」寫成「單一地區」。照英文教學操作的人會在選單裡找不到路。
寫教學的鐵律
手把手文件裡的按鈕名、選單名,必須和操作者實際看到的畫面文字一字不差——用詞對不上就是教學的 bug。這次的教學是邊做邊照截圖校正出來的。

📌 下一步

項目負責狀態
把固定 IP 加入美波 tipo.botrun.ai 白名單(p322_tipo#8)panda已發單,截止 7/29
把固定 IP 加入波特玩 tipo-agent.botrun.ai 白名單(p322_tipo#9)seba已發單,截止 7/29
白名單生效後補驗 CP3/CP5(開隧道可登入、關隧道被拒)CYC待前兩項完成
建立 iPhone 金鑰、金鑰登記表、預算警示CYC已寫成接關筆記
本文的定位:這是一次「非工程師依教學親手完成雲端基礎建設」的實作紀錄。價值不只在那個固定位址,更在於把可複製的方法與六個地雷留成文件——同一套流程可以直接套用在其他需要限制 IP 連線的機關案子上。完整教學文件(含逐步截圖與可貼上的指令)在 p322_tipo_timeless/fixed-ip/
安全性說明:本頁不揭露固定位址的完整數值、金鑰、個人網路位址;需要完整資訊請看內部 issue p322_tipo#8/#9。