penink·vpn
v1.0.0 MIT 其他

penink·vpn

一款基於 Kotlin 與 Jetpack Compose 的 Android 自研 VPN 應用。透過 WebSocket TLS 隧道安全連接家庭網路,支援多節點管理與一鍵連線。伺服器端採用 Docker 容器與 Cloudflare Tunnel 部署,實現開機自動復活,適合個人家庭網路存取需求。

penink-vpn.pages.dev
下載完整原始碼(ZIP)
AndroidVPNKotlinSelf-hosted

作 品 介 紹

名 稱 : penink·vpn ・ Android VPN App

類 型 : Android 應用程式(Kotlin / Jetpack Compose)

線 上 : https://penink-vpn.pages.dev

技 術 : Kotlin / Jetpack Compose / Room / WebSocket(TLS)

部 署 : Cloudflare Pages 下載站 + Docker 伺服器(Colima)

一、這是什麼

一款 Android VPN App,透過「WebSocket(TLS) 隧道」安全連回

自己家裡的網路。手機安裝 App 後,填入伺服器節點資訊,

按一下大圓按鈕就能一鍵連線,人不在家也能跟在家一樣

存取家中的裝置與服務。

核心特色

  • 純自建隧道:不走第三方 VPN 服務,通道與伺服器完全自管
  • 一鍵連線:主畫面大圓按鈕,首次允許「VPN 連線」後即通
  • 節點管理:新增/保存多組伺服器節點(位址、連接埠、密鑰)
  • TLS 加密:連線全程加密,密鑰為敏感資料、不外傳
  • 伺服器一鍵復活:Mac 開機自動拉起 Docker 容器+隧道

二、製作過程

開發一個「自己家的 VPN」:Android 端用 Kotlin 與 Jetpack

Compose 寫 App 介面(含 Room 保存節點設定);伺服器端把

Node.js WebSocket(TLS) 伺服器跑在 Docker 容器(Colima

Linux VM)裡,再用 Cloudflare Tunnel 反向代理曝光、由

開機自動化接管,Mac 重開機後一切自動復活。

技術筆記

  • Android App 完整開源(Android 8.0+,需允許安裝未知來源)
  • WebSocket(TLS) 443 埠,避免被牆/被攔
  • deploy.sh 一條指令:建 APK → 上傳網站 → 部署 → 推 GitHub
  • enable-ci.sh 可選用 GitHub Actions 自動建置 CI

三、使用教學

① 下載 App

從 https://penink-vpn.pages.dev 下載 penink-vpn-v3.apk,

傳到手機安裝(Android 8.0+,需允許「安裝未知來源」)。

② 設定節點

開啟 App → 節點管理 → 新增節點,填入名稱、位址(Host)、

連接埠(通常 443)、密鑰,並啟用 TLS。

③ 一鍵連線

回主畫面按下大圓按鈕 → 允許「VPN 連線」系統視窗 →

顯示「已連線」即完成。

四、注意事項

  • 位址與密鑰需向伺服器管理員索取,屬敏感資料
  • 密鑰請勿轉傳給不相干的人
  • 除家內自用外,使用時請遵守當地法規

五、保存資訊

本資料夾即專案原始碼(android/ App 專案、release/ APK、

deploy.sh 部署腳本),可直接在本機建置:

./deploy.sh 建置 APK → 上傳網站 → 部署 → 推 GitHub

./enable-ci.sh 啟用 GitHub Actions 自動建置 CI

下載網站: https://penink-vpn.pages.dev

原始碼: https://github.com/penink-WH/penink-vpn

問小墨 AI