2017-09-04

在 Raspberry Pi 樹莓派上實作 PiVPN 個人 OpenVPN 伺服器

在台灣被稱作樹莓派(官方名稱:Raspberry Pi )的開發用單板電腦其實有很多種用法,從低成本電腦到各類物聯網( IoT )裝置的基礎系統都可以,當然也有很多開發者把它當作小型伺服器來使用,運行 FTP/SFTP 伺服器做本地備份端,或是運行本地端的 Proxy Server、印表機伺服器等等,甚至也有人把它當作網頁伺服器來使用,安裝 Apache HTTP Server 跟其他必須軟體套件就好

之前是有買過一次樹莓派,不過是拿來當桌上的超小型迷你電腦,只要安裝小螢幕跟客製機殼,插上電源、連接鍵盤滑鼠就是一台小型桌上電腦,缺點就是那螢幕的解析度實在是慘不忍睹(HiRES+, 480 x 320 ),但看在 Waveshare 的螢幕這麼便宜,還有電阻式觸控的功能,就別計較了吧,之後大概會把它改裝成天氣顯示器

這次則是再額外買了一片樹莓派,不過這次打算讓他運行 OpenVPN 伺服器,讓使用公共無線熱點的裝置可以使用加密連線,強化安全性,當然這也是私人 OpenVPN 伺服器的優點之一,另一個優點是在學術網路或企業對外網路那種網路連線會被管制的地方可以方便做一些操作


2017_09_02_170854
Raspberry Pi 3 Model B,內建 10/100Mbps 乙太網介面,而非前代是用內建 USB 通道轉接
2017_09_02_170830
在主要晶片上都黏貼散熱片,要讓樹莓派長時間運作還是安裝散熱片比較妥當
2017_09_02_170800
這款自行採購的黑色散熱片面積比晶片大,所以使用官方的塑膠機殼時要稍微切一下
2017_09_02_170652
蓋上蓋子,蓋子跟機殼間是有設計通風孔的
2017_09_02_231950
在俗稱小烏龜的中華電信 vDSL 數據機旁邊用 PP 瓦楞板做了一個支架給樹莓派,注意有留燈號跟電源的開口

在這邊來額外分享一下自製的數據機散熱方案

雖然說自從升級到光世代 100M/40M 而換成 vDSL 數據機( 使用光纖到交換機的 FTTE 模式,所以不是光纖數據機)之後,數據機熱到當機這個情況沒遇過,但有鑑於以前 ADSL 時代真的遇過熱到當機,所以一直有注意數據機散熱的問題,在之前整理線材而把數據機移動到家具櫃裡面時就做了主動式散熱

而這次則是趁著把樹莓派安裝到數據機旁邊時做了一些小改裝,並重新整理一下網路線與電源線

使用工具是繞線管、束帶、黏貼式固定座,而整線邏輯不外乎注意立體交錯順序、線材角度、綑綁鬆緊度


2017_09_02_231950
剛安裝好樹莓派時,數據機散熱方案還是用一次性束帶固定風扇
2017_09_06_005428
把之前使用一次性束帶的風扇改用螺絲、螺母與墊片固定
2017_09_06_005444
風扇架後方有強化用的、不同走向的加強條
2017_09_06_011344
將冷空氣從上方吹入數據機上方的開口,達成強制冷卻的效果
2017_09_06_011334
故意選用較長的螺絲是方便固定風扇護網、之後也可以換成金屬材質的護罩
2017_09_06_011408
風扇架一側使用魔鬼氈膠條,方便打開風扇架清理積塵或調整網路線
2017_09_09_111716
電源線與數據線隔離,後面走樹莓派與風扇的電源線,網路線走前面,vDSL 的銅纜與接線盒在頂部
2017_09_04_125022
紅色是中華電信 MOD 專線,灰色連接 AirPort Extreme 的 WAN,藍色是樹莓派,白色是 Apple TV,綠色是分享器橋接

硬體部分差不多就是這樣,再來是軟體的部分,AirPort Extreme 上要作傳輸埠指定,樹莓派則要安裝必須的軟體才能上線服務

DHCP/NAT 的傳輸埠指定可以將特定的傳輸埠開放到網路( WAN )上、並轉發給內部網路( LAN )的指定裝置,藉由傳輸埠指定可以讓使用者從外部連線回到內部網路,在這裡就是讓樹莓派可以從遠端操作,並讓 OpenVPN 服務可以運作

而 AirPort Extreme 的傳輸埠指定需要與設定 DHCP 保留,這樣樹莓派的內部網路位址才不會亂跳而讓傳輸埠指定失效

在這邊要強調的是,管理者密碼一定要設定為強密碼,因為一開啟 SSH 連線功能後,幾乎是立刻會被網路上的惡意程式試探登入,在安裝好系統之後一定要設定好強密碼再開啟 SSH 連線功能,否則在設定傳輸埠指定後你的樹莓派幾乎是在網路上裸奔


首先是環境準備

安裝 fail2ban

接著是網路設定的部分



首先設定 DHCP 保留,通常用 MAC 位址去綁定,DHCP 保留設定依照各家廠商而不同

接著設定給 SSH 加密傳輸的傳輸埠指定,埠號 22,指定到你剛剛保留給樹莓派的內部網路位址去

接著安裝 PiVPN

記得把在安裝過程中設定給 OpenVPN 的傳輸埠指定到你剛剛保留給樹莓派的內部網路位址去



如果剛剛用預設的 UDP 1194,就這樣設定

沒意外的話在 Windows/Mac 上都可以正常使用

再來是如何增加新使用者

基本上到這裡應該就沒問題了,但人生總是會有一堆意外,跟一堆狗屎相容性問題

我自己在 Windows / macOS 上是使用付費的第三方 VPN 管理軟體 Viscosity,而 iOS 上則是使用 OpenVPN 官方的應用程式

而官方的應用程式件在匯入 PiVPN 的設定檔後會在連線時提示異常而無法使用

PolarSSL: error parsing config private key : PKCS5 - Requested encryption or digest alg not available

這是不同廠商或是開源社群在實作 OpenVPN 時在加密演算法的相容性問題,在使用行動裝置上 OpenVPN 官方提供的管理套件時可能會有點問題,主要是行動裝置支援的加密演算法有限

接著開始找解法,有的解法是說是說直接改金鑰字串的檔頭跟檔尾,但實作去嘗試是失敗的,會跑另外一個 PEM 的錯誤訊息

看了一堆外國社群的解法後,發現最佳解法是在 Reddit 論壇上的樹莓派開發社群,只能說想出這個解法的真的是個天才




在 OpenVPN 官方發行的行動裝置客戶端上請用上面的解法

沒有留言:

張貼留言