VPN是virtual private network (虛擬私人網路),參考維基百科上的說明,可將專用網路延伸到公用網路上,讓使用者在共享或公共的網路上,直接存取專用網路的資料和資源。(更多資訊請看維基百科)
由於本人不是很了解VPN實際的作用,只常聽到VPN可以用來作為跳板翻牆、可隱藏目前真實的IP或是來源、可安全的存取家裡的NAS,雖然我沒上述功能的需求,不過到是有ssh回家裡主機的需求,所以嘗試來自架VPN server。
先說明目前的網路架構,WAN → WiFi Route (PPPoE撥號、DHCP server、Port Forwarding) → PC、Server、Wifi device,Server上跑Proxmox VE,架了Web server(VM)、Pi-Hole(LXC),並以Pi-Hole作為DNS server (Router內的DNS指向PiHole server),
先在PVE上起一個新的Ubuntu LXC,VPN選擇評價不錯的WireGuard, 一開始參考其他人的安裝教學,直接以apt install的方式安裝WireGuard,但是失敗(後來,第二次參考另一位youtuber的教學,以script方式安裝,簡單多了,較為簡單,但如果想較了解WireGuard的方式可以手動安裝。
- PVE開一個Ubuntu LXC
創LXC的部份參考Proxmox VE官網OpenVPN的教學,官網是創Debian LXC,Ubuntu差異不大,或是自已用web界面自行創立,要注意是創完先別啟動,先修改設定檔,新增”/dev/net/tun” (下圖1),如下圖(截取自官網教學),下圖2的”123.conf”需修改為您創立的LXC ID,將下圖3的兩行指令,加入設定檔,並依下圖4修改/dev/net/tun權限,修改完conf,即可啟動LXC,後續教學文件安裝OpenVPN部份不需要做。

- 安裝與設定WireGuard
安裝為了方便,使用Github上Nyr寫好的sheel script,先進到剛創建的LXC shell,以root身份執行以下指令,下載同時執行script檔
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

設定WireGuard server的hostname,如果有DDNS或已有網域可以設在這,沒有的話可以隨便打

Port預設51820,可以自訂,並記下來,設定Port Fowarding及防火牆會用到;Name設定此VPN連線的名稱,client設定檔也會以這個Name為檔名,可自訂

DNS server依需求選擇,我希望使用VPN時,同時也可以用內網Pi Hole檔廣告,所以選擇1 (內網的DNS已設為Pi Hole)

同意BoringTun安裝及automatic update,再按任意鍵繼續

安裝完成,會自動show出QR code,client端設備(手機或平板)需安裝WireGuard app來掃描,即可自動完成VPN設定;
同時QR code下方會告知設定檔是”/root/iphone.conf”;
如果要再新增另一個VPN連線,直接在/,bash wireguard-install.sh

先看一下剛建好的設定檔案,要注意的是Endpoint的部份,這是設定WireGuard Server Domain Name或是ip,以及port,如果安裝前輸入的Domain Name不存在或不是指向您的server,可以直接將它改為server的IP (真實IP,非區網IP)

iPhone先到App Store下載官方的app

開啟app,按新增通道

選擇”從QR code中建立”,並掃描Server上的QR code

輸入這個通道的名稱,然後儲存

允許加入VPN設定

點連線名稱進入設定內容

由於我的Server Domain Name是假的,所以將Endpoint改為Server的真實IP

測試VPN是否能正常運作,先不開啟VPN,如果手機有連到wifi,也先將wifi關閉,
開啟手機的瀏覽器,連上https://whoer.net,可以看到目前手機的連線資訊,
在未開啟VPN前,是使用ISP的網路,以我為例是亞太電信,

WireGuard app開啟vpn

回到瀏覽器,重新整理whoer.net網頁,可看到IP變成WireGuard Server的IP,由於DNS Server有改成內網Pi Hole,因此DNS也是顯示WireGuard Server的IP,確定VPN通道有正常運作

其他需注意的事項
- 如果您的主機是在router後,請設定Port Forwarding
- 因為WireGuard Server有開啟對外的port,為加強安全性,仍有設定防火牆及Fail2ban
- 修改WireGuard Clinet端設定檔,要重新產生QR code,
可以下指令”qrencode -t ansiutf8 < FILENAME” (FILENAME改為設定檔路徑檔名) - 其他OS clinet端軟體,可以從官網下載