參考資料
Softether VPN Server
- 安裝:
- 下載 binary file,解壓縮放至套件預設目錄 /usr/local,成 /usr/local/vpnserver/
- 首先,於該目錄下執行 sudo make
- 接著,擁有者及權限都設為 root。此後都以 sudo 身份執行。
- sudo chown -R root:root *
- sudo chmod -R 600 *
- sudo chmod 700 vpnserver
- sudo chmod 700 vpncmd
- 就醬,可說安裝好了。下一步,檢查一下其可用性;以下省略 sudo。
- ./vpncmd
- 選 3
- 執行 VPN Tools> check
- 便會提示可用與否的結果。
- 接著離開。
- 下一步,啟停設定,我們將其設為一個 service,內容如下:
[Unit]
Description=SoftEtherVpn VPN Server
After=network.target systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service
[Service]
Type=forking
ExecStartPre=/bin/sleep 1
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
- 將此檔置於 /lib/systemd/system/softethervpn_server.service
- systemctl daemon-reload
- systemctl restart softethervpn_server.service
- systemctl enable softethervpn_server.service
- systemctl status softethervpn_server.service
- 以上就全設定完成並啟用之了。
- 啟動後,
- 須特別注意,它自動生成 http 的網頁使得可透過 http 80/443/5555 進入 vpn server 的組態設定頁面。請自行去取消或,
- 而不要忘了,有預設的管理員帳號,login: administrator,password: 空白。我們更改密碼(註:可連上此網頁的方式試過可行有二,https://mysite:5555/ 及 http://localhost:5555/):
- ./vpncmd
- 選 1 管理伺服器或橋接,按兩次 enter 表示設定本地伺服器。而若此時出現錯誤,則將本地伺服器輸入成 localhost:5555 或 myip:5555 或 mysite:5555 應就可成功了。
- VPN Server> ServerPasswordSet
- 設定密碼
- 註:此時就算已有 subdomain name,也必會自動配置一條 DDNS subdomain,可由 DynamicDnsGetStatus 查詢。並且此 DDNS 是有租期的。若 server offline,且當租期到會被 ping,ping 不到將會取消此 DDNS,上線後重新索求指定(新的/不同的)DDNS。不過,當有不同的 DDNS requests APs 同時 request ddns 時,例如 noip & softether,系統做了 reboot 則只有一條 DDNS 會成功指定。
- 接著,我們要創建 virtual hub,其已既存一個名為 DEFAULT。及啟用 NAT 等相關應用設定。
- 創建 virtual hub,指定此新 hub 的名稱:
- ./vpncmd
- > 1
- VPN Server> HubCreate <The_VPN_VHub_name>
- 並會提示設定密碼給這個 Hub。而這個密碼用在何處,縱觀下筆者尚未知。
- 請善用 HELP,可更彈性地設定;例如我們輸入 HubList 可查看當前既存的 hubs,UserList 查看 users。
- 接著選擇這個 hub,並啟用 NAT:
- VPN Server> Hub <The_VPN_VHub_name>
- VPN Server/<The_VPN_VHub_name>> SecureNatEnable
- (註:它會同時打開 nat and dhcp。而有此一說只要打開 dhcp 就好,因 nat 打開會徒增流量)
- 接著,新增可以使用此 hub 的使用者(使用者都綁在 hub 之下的):
- VPN Server/<The_VPN_VHub_name>> UserCreate <The_username1>
- 設定此 user 以密碼登入如下,
- VPN Server/<The_VPN_VHub_name>> UserPasswordSet <The_username1>
- 而可以設定 user 由其他方式登入:UserAnonymousSet,UserRadiusSet,UserCertSet,UserSignedSet。
- 以上就配置好 server 端了。
- 補充:
- 若要啟用 SSTP 連線,則如下設定:
- VPN Server/<The_VPN_VHub_name>> ServerCertRegenerate <ddns or FQDN or ip>
- 其中,ddns 由 DynamicDnsGetStatus 命令查看。
- VPN Server/<The_VPN_VHub_name>> ServerCertGet <將此憑證匯出至某路徑>
- VPN Server/<The_VPN_VHub_name>> SstpEnable yes
- 若要啟用 L2TP/IPSec:
- VPN Server/<The_VPN_VHub_name>> IPsecEnable
- 因在用戶端要使用此 protocol 登入,softether 規定使用 user-name@vhub-name 的形式,故設定中會有輸入預設的 vhub name,當然我們就輸入此 vhub 以避免用戶端以只使用 user-name 的形式則將會自動附加。
- 若要使用既存的 SSL cert 由例如 openssl 産生的:
- VPN Server/<The_VPN_VHub_name>> ServerCertSet
Softether VPN Client
- 安裝:下載 binary file,解壓縮放至套件預設目錄 /usr/local,成 /usr/local/vpnclient/
- 首先,於該目錄下執行 sudo make
- 接著,擁有者及權限都設為 root。此後都以 sudo 身份執行。
- sudo chown -R root:root *
- sudo chmod -R 600 *
- sudo chmod 700 vpnclient
- sudo chmod 700 vpncmd
- 就醬,可說安裝好了。
- 下一步,檢查一下其可用性;以下省略 sudo。
- ./vpncmd
- 選 > 3
- 執行 VPN Tools> check
- 便會提示可用與否的結果。接著離開。
- 同理,service 的創建如前述。並啟用之。
- 如同 server 端需要創建 virtual hub,client 端則亦需創建 virtual nic:
- vpncmd 選 2
- VPN Client> NicCreate <The_VPN_VNic_name>
- 接著新增一個 account 表示使用此 VPN service,並會與 server 上的 virtual hub 與服務建立連結:
- VPN Client> AccountCreate <The_Account_name>
- 其所使用的 password 是在 server 端所設定的 user 的 password。
- 註:此 account 看似可設任意字串,但我嘗試的結果似乎只能使用在 server 所設定的 user name,否則 client 的連線無法建立/卡在 dhcp assignment。需再次嘗試看看(結果應是無此問題)。
- 接著需指定 destination host name and port。port 預設都是 443。由於我們 server active 時,會自動被 assign ddns,故我們可以於 server 端,如下查詢:
- VPN Server> DynamicDnsGetStatus 而得到 hostname
- 及需指定 virtual hub,user,nic
- 連線:
- VPN Client> AccountPasswordSet <The_Account_name>
- VPN Client> 指定 standard
- VPN Client> AccountConnect <The_Account_name>
- 便與 Server VPN 建立 VPN 連線了。
- 但若做了重啟,並不會自動連線,需致能 AccountStartupSet。AccountStartupRemove 則是取消之。
- VPN Client> AccountStatusGet <The_Account_name> 查看連線狀態。
- 而最後,我們透過 sudo dhclient virtual_nic 取得 dhcp ip。
總結
- 以上建立了 VPN 通道,不過慚愧的是,我還不知道怎麼運用。可能是 client 端便納入了 server 端的 LAN。例如我把 client 其他的 nic 都關閉,只留 vpn,那應該就會透過此連線連上 internet 吧;想想也不對,全關怎麼連線,應說是對外連線就透過 VPN server 吧。
- 因為進入到了 server,所以必須慎用 password 或憑證了。
- bridge 和 nat 若同時啟用,曾發生會有 cpu high loading 的狀況,現況不知是否已修正,但就避用為佳。
補述
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.4.1 0.0.0.0 UG 0 0 0 enp1s0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 enp1s0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.30.1 0.0.0.0 UG 0 0 0 vpn_thenic01
100.100.100.100 192.168.4.1 255.255.255.255 UGH 0 0 0 enp1s0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 enp1s0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
192.168.30.0 0.0.0.0 255.255.255.0 U 0 0 0 vpn_thenic01