--- title: 「Open VPN Connection Tool」專案企劃書 (Team A) tags: proposal, project, vpn description: 1. title 請改為 [專案名稱]企劃書 2. tag 請刪去template,加上專案內容類型或名稱 3. 下方會議記錄請使用會議記錄範本 4. 加上"{%hackmd BkVfcTxlQ %}"意為套用黑色模板 --- {%hackmd BkVfcTxlQ %} # ***「Open VPN Connection Tool」企劃書 (Team A)*** :::info > 專案負責人聯絡資訊: > 黃丰嘉 / 手機:0908-303-576 / Email:bessyhuang1@gmail.com / LINE ID: fengjia111 * 專案參與成員: 黃丰嘉、黃子軒、許至齊 共計 3人 [name=企劃書撰寫:黃丰嘉] ::: > [TOC] > *** ## **專案資訊** * 專案時期: [time=] 2022/10/12 ~ 2022/11/19 * 專案客戶資訊: * 夜珞 * 公司:Project Abyss 深淵計畫 * 職稱:專案經理 * 主要聯絡方式:Email (working0.0.orz@gmail.com) > 由於平日上班時間因為個人原因不太方便回信,因此若非必要則會是在非工作時間進行此次專案相關的討論。 * 專案預期對象: [name=] 「Project Abyss 深淵計畫」公司內部成員 * 專案交付內容: * 軟體工具 * [GitHub Repository: OVCT](https://github.com/Project-Abyss/OVCT) * 程式碼 * `README.md`:英文。 * 書面文件 * 簡報 * 簡報內容:中、英文皆可。 * 專案交付當日,甲方要求進行簡報報告。 * 結案報告書 * 結案報告書內容:中文。 * 書面結案報告書為「企劃書」完善後的結果。 --- ### *專案概述* 製作一個使用 Python 撰寫的「 Open VPN Connection Tool 」,允許運行於 Ubuntu Linux、Windows 和 MacOS 作業系統環境。 透過 Python 爬蟲方法,從 [VPN Gate 網站](https://www.vpngate.net/en/) 爬取符合 OpenVPN protocol 的 public VPN 清單後,提供甲方選擇並驅動 OpenVPN 軟體協助掛載。 --- ### *預期目標* * 本專案提供的 Open VPN Connection Tool,預設功能與設定如下: * 預設讀取由敝團隊事先提供並通過連線驗證的 public VPN 清單(.csv),該清單來源自 [VPN Gate 網站](https://www.vpngate.net/en/) 中符合 OpenVPN 協定的 public VPN。 * 預設針對 public VPN 清單採「無篩選」模式。 * 預設優先使用 TCP,如若無 TCP 才改以直接使用 UDP 連線。 * 本專案提供的 Open VPN Connection Tool 能夠自動辨識當前的作業系統來作為執行環境,提供國籍、IP、Hostname、連線速度等 VPN 的詳細資訊,讓客戶經檢視後自行輸入 ISP hostname 來選擇特定 Public VPN。一旦客戶完成 ISP hostname 輸入,本工具會自動匯入該 Public VPN 相關資料至 OpenVPN 軟體中,客戶再自動/手動執行掛載即可完成 Public VPN 連線。 --- ## **專案內容** ### *環境* * 作業系統 * Ubuntu 20.04 * Windows 10 * MacOS 13.0.1 * Python 3.8+ ### *系統架構* ![](https://i.imgur.com/3o6b9ND.png) ### *技術簡介* #### *功能性概述* 本專案的 Open VPN Connection Tool 提供三種作業系統的執行環境、兩種 Public VPN 清單取得方式,以及三種針對 Public VPN 清單的進階篩選模式,簡述如下: 1. 三種作業系統的執行環境 * 本工具能夠自動辨識當前的作業系統來作為執行環境,其支援的作業系統包含 Ubuntu Linux、Windows 和 MacOS。 2. 兩種 Public VPN 清單取得方式 * 本工具能夠選擇讀取由敝團隊事先提供並通過連線驗證的 public VPN 清單(.csv),或是即時爬取來源自 [VPN Gate 網站](https://www.vpngate.net/en/) 中符合 OpenVPN 協定的 public VPN 清單。 3. 三種針對 Public VPN 清單的進階篩選模式 * 「國家 Country」模式:允許客戶選擇位於哪個實體國家範圍內的 Public VPN。 * 「連線速度 Speed」模式:允許客戶選擇高於特定連線速度(Mbps)的 Public VPN。 * 「無篩選 Without filtering」模式:允許客戶不經篩選,直接取得所有 Public VPN 清單。 #### *Public VPN 清單檔案內容概述* * 採 Python Web Crawling 技術爬取目標網站提供的 Public VPN 清單,亦即爬取 [VPN Gate 網站](https://www.vpngate.net/en/) 目標網站中的 [CSV List](http://www.vpngate.net/api/iphone/),並且另存為 csv 檔案格式於本機端。 * 爬取五個欄位,如表格所示。 | 欄位名稱 | 欄位說明 | 舉例 | | -------- | -------- | -------- | | `#HostName` | 中譯為「主機名稱」,指的是提供 Public VPN 的主機名稱。 | public-vpn-65 | | `CountryLong` | 中譯為「國家」,該欄位表示提供 Public VPN 的實體位置位於哪個國家範圍內。 | Japan | | `IP` | 中譯為「網際網路協定地址」,指的是提供 Public VPN 的主機在網際網路的門牌位址。 | 219.100.37.82 | | `Speed` | 中譯為「連線速度」,單位為 bps,亦即每秒鐘可以傳輸多少百萬位元(Million bits per second, Mbps)。 | 203.939928 | | `OpenVPN_ConfigData_Base64` | 中譯為「Base64 編碼的 OpenVPN 連線設定檔」,該欄位會經過編碼轉換後儲存為 `.ovpn` 檔案,以便後續將特定 Public VPN 相關資料匯入至 OpenVPN 軟體中,讓 OpenVPN 軟體能夠連線掛載所選擇之 Public VPN。 | IyMjIyMjIyMjIyMjIy ... | #### *驅動 OpenVPN 連線掛載流程概述* 讀取 Public VPN 清單內容後,客戶可選擇三種進階篩選模式來取得期望的篩選結果,而後顯示於 command line 介面以及匯出成 `csv` 檔案格式提供客戶於本機端檢視。 接著,本工具會提示客戶輸入「 ISP hostname 」來選擇特定 Public VPN,以便將 Public VPN 相關資訊匯入 OpenVPN 軟體中。 鑑於 OpenVPN 軟體於 Ubuntu Linux、Windows、MacOS 系統環境的 Public VPN 連線掛載操作上有著些許不同,故分別敘述如下: 1. Ubuntu Linux * 在 Ubuntu Linux 作業系統環境下,本工具會將 Public VPN 相關資訊(ovpn file)匯入 OpenVPN 軟體中,並且「自動」驅動 OpenVPN 軟體連線掛載(無需點擊 OpenVPN 的 GUI 應用程式進行連線掛載)。 * ovpn file 路徑: `/etc/openvpn/client/[ovpn_file].ovpn` 2. Windows * 在 Windows 作業系統環境下,本工具會將 Public VPN 相關資訊(ovpn file)匯入 OpenVPN 軟體中。不過,仍需「手動點擊連線」OpenVPN 的 GUI 應用程式才能驅動 OpenVPN 軟體連線掛載至所選 Public VPN。 ![](https://i.imgur.com/ylrYO8Z.png) * ovpn file 路徑: `C:\Users\[user_name]\OpenVPN\config\[ovpn_file].ovpn` 3. MacOS * 在 MacOS 作業系統環境下,本工具會將 Public VPN 相關資訊(ovpn file)匯入 OpenVPN 軟體中。不過,仍需「手動點擊連線」OpenVPN 的 GUI 應用程式才能驅動 OpenVPN 軟體連線掛載至所選 Public VPN。 ![](https://i.imgur.com/xsTX9Gc.png =300x500) * ovpn file 路徑: `/Applications/OpenVPN Connect/OpenVPN Connect.app/Contents/MacOS/OpenVPN Connect` --- ## **專案安排** ### *專案工作* * 專案經理(Project Manager, PM) * 黃丰嘉 * 專案管理與規劃 * 與甲方溝通窗口 * 文件管理與撰寫 * 研發工程師(Research & Development, RD) * 許至齊 * Python 爬取 Public VPN 清單資訊 * Programming * [GitHub Repository](https://github.com/Project-Abyss/OVCT) `README.md` 撰寫 * 黃子軒 * 驅動 OpenVPN 軟體掛載 Public VPN * Programming * [GitHub Repository](https://github.com/Project-Abyss/OVCT) `README.md` 撰寫 --- ## **備註與附件** * 操作文件 * [OVCT 操作說明(簡報版)](https://docs.google.com/presentation/d/1-NqxlG_Wrww4HI_UcszatF2Wa37-hQDpPG8zaiEjPUw/edit?usp=sharing) * 專案成果報告 * [OVCT 專案成果報告(簡報版)](https://docs.google.com/presentation/d/1ZZj8-i1imRh6-WmUJuUGJT2HMPmpOEWqcDNZZK-Zydg/edit?usp=sharing) ### *會議紀錄* * 與甲方專案會議紀錄 * [Team A 啟動會議 會議紀錄 (20221012)](https://hackmd.io/@4by55/Hy4drcQmi) * [Team A 與甲方的第二次會議 會議紀錄 (20221018)](https://hackmd.io/@4by55/H1OSfJhXo) * Team A 內部會議紀錄 * [Team A Sync 專案資訊 會議紀錄 (20221013)](https://hackmd.io/@4by55/HJB32dHmo) * [Team A 內部會議1 會議紀錄 (20221018)](https://hackmd.io/@4by55/Syj0SM2Qj) * [Team A 內部會議2 會議紀錄 (20221028)](https://hackmd.io/@4by55/BkRz5LKVs) * [Team A 內部會議3 會議紀錄 (20221108)](https://hackmd.io/OTwRlWX7S2aU98OoV0PYHg)