分類: Linux

SoftetherVPN 的安裝

No Comments

參考資料

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 的狀況,現況不知是否已修正,但就避用為佳。

補述

  • Server virtual hub 本身 ip 就是指定成 192.168.30.1,但這對於 server 系統是不可見的當透過 ifconfig -a,並且系統自己也 ping 不到 192.168.30.1。不過透過 client 是可以 ping 得到。故,顯而易見,在 server 上新增 client,來與其他 clients 溝通。(再補!在另一台電腦,一樣 client/server 同時啟用,server 192.168.30.1 就不能夠 ping 得到。故,此 ping 不到的這台電腦該查查看。另外,ping 得到的底層物理協定的使用 VPN over UDP with NAT-T (IPv4)RUDP/UDP IPv4 RUDP_Bulk_Ver=2 UDPAccel_Ver=2 ChachaPoly_OpenSSL UDPAccel_MSS=1309。有別於使用 TCP/IP 的這台問題電腦)
  • 以上的設定,是對應到官方文件的第十章 types of VPNs 中的 10.1.1. pc-to-pc VPN,即,所有 clients 都處於同一 LAN 中,故可應用於例如 file sharing among clients;故對應於是個 NFS;但不同的是此 VPN 是經由 port 443 透傳的。而所謂加密屬性,便只限於此 LAN 內。
    因此簡單講,本章設定,就是讓所有參與者處於同一張 virtual local network 網段下。換言之,若要使用 server 端,其所處的實體(虛擬)網段下的其他 services,就必須使用 local bridge,將所有要參與者,虛擬也好實體也好加入其中。
    再論,此思考邏輯是將既成的 clients/services 統合起來建立溝通通道,但反之我們也可使用此 pc-to-pc VPN 的虛擬 ip,設定成既有的 services 可觸及;此僅指例如 reverse-proxy,並且有雙向的可能,例如導引到手機上的 web server。但談到手機,我們又不得不再涉獵一下 L2TP,IPSec 了。
  • L2TP/IPSec 的設定參考:
  • https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/1.Setup_L2TP%2F%2F%2F%2FIPsec_VPN_Server_on_SoftEther_VPN_Server
  • https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/3.Android_L2TP_Client_Setup
  • 再補充,當前試驗的結果,手機連線能順利建立且運作正常。但從另一台電腦 client vpn 到 server,總會一會兒就斷線並自動重連,但再也連不上。後續需將 AccountDisconnect,再終止執行 vpnclient,再用 ps aux | grep dhc.* 將該行程 kill 掉。這很可能就只是 vpn client 的問題,待解。
    可能是還必須設定 route table 吧。但這東西我還不懂,暫先放棄 XD,可參考以下連結。
  • ip forward
  • https://blog.csdn.net/whatday/article/details/106003836
  • routing
  • https://www.netadmin.com.tw/netadmin/zh-tw/technology/3F5D612B541C4D578C10E7DC75697B60?page=1
  • https://vitux.com/how-to-view-the-network-routing-table-in-ubuntu/
  • http://linux-ip.net/html/routing-tables.html
  • https://opensource.com/business/16/8/introduction-linux-network-routing
  • vpn client setup
  • https://askubuntu.com/questions/666484/setting-up-softether-vpn-client
  • https://www.cactusvpn.com/tutorials/how-to-set-up-softether-vpn-client-on-linux/
  • 再展開如下述。
  • 單次啟用 ip forward:sysctl -w net.ipv4.ip_forward=1(查詢:sysctl -n net.ipv4.ip_forward。永久修改 /etc/sysctl.conf,並且下 sysctl -p)
  • 查詢:netstat -rn
  • 假設 client 原始 gateway 是 192.168.4.1,nic 是 enp1s0,vnic 是 vpn_thenic01。server vhub gateway 是 100.100.100.100/32(應是用 server 廣域 ip/32)
  • 從 server dhcp 取得 ip address,假設為 192.168.30.10,那麼,下 ifconfig 可取得 vpn_thenic01 的 gateway 設定:
  • sudo dhclient vpn_thenic01
  • ifconfig
  • 資訊取得後,
  • 加入 table:
  • sudo ip route add 100.100.100.100/32 via 192.168.4.1 dev enp1s0
  • 刪除原始預設:sudo ip route del default via 192.168.4.1
  • 增加新的 default:sudo ip route add default via 192.168.30.1 dev vpn_thenic01
  • 檢查是否成功:
    ping 8.8.8.8 -c4
    wget -qO- http://ipecho.net/plain ; echo
  • 復原:
    sudo ip route del 100.100.100.100/32
    sudo ip route del default via 192.168.30.1
    sudo ip route add default via 192.168.4.1 dev enp1s0
  • 舊的設定(netstat -rn)
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
  • 成功了

Categories: Linux

Tags:

PHP Code Snippets Powered By : XYZScripts.com