1. 程式人生 > 其它 >雲伺服器搭建Virtual Private Network服務端並配置連線Windows、Android、iOS三端客戶端

雲伺服器搭建Virtual Private Network服務端並配置連線Windows、Android、iOS三端客戶端

本次主要是為了使部分客戶端以連線VPN的方式,改變訪問Web Server的IP地址,設定Web對其的重定向,訪問指定的頁面;

環境:

  使用的軟體為 openvpn;

  服務端為 CentOS7 騰訊雲伺服器;

  客戶端中,Windows端為win10系統主機,Android端為一加5手機,iOS端使用 iPad。

  (win10就不說了,win7也沒問題,Android是我個人手機,版本是通用的,一些版本可能會造成閃退或不能安裝(我的手機比較舊,都3年了,新手機可能就沒有此問題了),iOS為公司提供的測試用平板,手機端操作相同)

內容索引:---> 1、雲伺服器安裝部署openvpn服務端;

---> 2、Windows客戶端安裝並連線到服務端;

---> 3、Android客戶端安裝並連線到服務端;

---> 4、iOS客戶端安裝並連線到服務端;

雲伺服器安裝部署openvpn服務端

**由於openvpn自己的官方頁面正常情況下根本訪問不了,需要出去才能訪問,所以服務端下載,我們直接使用 yum 的方式進行安裝即可;

**客戶端方面就不太容易了,可能需要自己探索了,但是我也提供了一個正常可行的方法;

GitHub - OpenVPN/openvpn: OpenVPN is an open source VPN daemon

(有服務端,沒找到客戶端)

http://openvpn.net/(這是官網,一般情況下白扯)

https://www.techspot.com/downloads/5182-openvpn.html(這個網路較好的情況是可以正常訪問的,若你的網路運營商不行,那就是不行了,電腦可以嘗試用手機4G網路熱點,我的就是這樣,條件有限了,哈哈)

安裝軟體及依賴

    ##使用yum來安裝服務端以及各種需要的依賴軟體包
[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum install -y openvpn easy-rsa lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel

設定網路轉發

[root@localhost ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p

配置路由轉發

    ##使用iptables設定路由轉發,設定全部轉發
    ##檢視記得 -t 選項,若不加只能看到防火牆的規則,我們可以看到最後一條是我們設定的路由轉發
[root@localhost ~]# iptables -t nat -A POSTROUTING -j MASQUERADE
[root@localhost ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0

    ##儲存iptables的設定,否則在伺服器重啟後沒有轉發規則,VPN設定會出現問題
[root@localhost ~]# service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
    ##注意,這裡若是也出現同樣的報錯,那證明你還沒有安裝iptables的服務,不能儲存設定,我們要向下執行一些命令,若直接“OK”完成了就不需要執行了

    ##報錯執行
    ##安裝iptables服務並儲存設定
[root@localhost ~]# yum install iptables-services -y
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]


    ##若設定錯誤,刪除方法是執行下面的命令,這裡我們安裝就別執行啦
[root@localhost ~]# iptables -t nat -D POSTROUTING 1

複製建立初始配置檔案

    ##安裝完畢後預設是沒有配置檔案的,需要我們複製模板檔案到指定的配置目錄下,注意安裝的版本號可能不一樣,根據實際情況 tab 鍵補全路徑
[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server.conf

配置初始化資訊

[root@localhost 3.0.8]# cd /usr/share/easy-rsa/3.0.8
[root@localhost 3.0.8]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example vars
[root@localhost 3.0.8]# vim vars
    ##國家
95 set_var EASYRSA_REQ_COUNTRY "CN"
##省份 96 set_var EASYRSA_REQ_PROVINCE "liaoning"
##城市 97 set_var EASYRSA_REQ_CITY "shenyang"
##組織 98 set_var EASYRSA_REQ_ORG "masses"
##郵箱 99 set_var EASYRSA_REQ_EMAIL "[email protected]"
##擁有者 100 set_var EASYRSA_REQ_OU "My openVPN"
##長度,無需更改 108 set_var EASYRSA_KEY_SIZE 2048
##演算法,無需更改 117 set_var EASYRSA_ALGO rsa

初始化配置檔案目錄

[root@localhost 3.0.8]# ./easyrsa init-pki

Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3.0.8/pki

建立ca認證檔案

    ##密碼兩次,自定(我們實驗就設定123456吧),再一項是檔名稱,回車預設即可
[root@localhost 3.0.8]# ./easyrsa build-ca

Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017

Enter New CA Key Passphrase:  ##輸入密碼123456
Re-Enter New CA Key Passphrase:  ##輸入密碼123456
Generating RSA private key, 2048 bit long modulus
.........................+++
...........................+++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:  ##預設,回車即可

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/share/easy-rsa/3.0.8/pki/ca.crt

建立server端的認證檔案

    ##密碼同上輸入
[root@localhost 3.0.8]# ./easyrsa build-server-full server

Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
...........................................+++
........................................+++
writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-1790.Iw09WJ/tmp.tqGRVz'
Enter PEM pass phrase:    ##輸入密碼123456
Verifying - Enter PEM pass phrase:    ##輸入密碼123456
-----
Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-1790.Iw09WJ/tmp.OvINKF
Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key:    ##輸入密碼123456
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Aug  8 12:48:20 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated


    ##該步驟還有另外一個方法,結尾新增 nopass 引數是生成一個無密碼證書,不帶此引數需要自己再設定輸入密碼,這一塊和上面選擇一個就好,重複建立server的認證金鑰檔案,會提示已經存在,若是要跟換的話,可以根據提示刪除3個檔案,然後重建即可
[root@localhost 3.0.8]# ./easyrsa build-server-full server nopass

Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
....................................................................................................+++
........................+++
writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-1993.Ja69Dt/tmp.1GB3zh'
-----
Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-1993.Ja69Dt/tmp.02BLR0
Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key:    ##這裡輸入一次之前ca證書的密碼即可,密碼它還是123456
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Aug  8 12:51:30 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

執行加密

    ##需要一些等待時間,不要中斷
[root@localhost 3.0.8]# ./easyrsa gen-dh
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...
    ... ...
    ... ...
...+*

DH parameters of size 2048 created at /usr/share/easy-rsa/3.0.8/pki/dh.pem

建立client端認證檔案

    ##客戶端認證使用者名稱是自己定的,是區別不同使用者使用的,密碼可以相同,我們還使用之前使用的密碼,或者直接回車,實際情況要避免密碼混亂,自己都記不清就不好了
    ##這裡我們假設為使用者 老四(laosi)建立一套證書
[root@localhost 3.0.8]# ./easyrsa build-client-full laosi

Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
................................................+++
.......................................................................................................................+++
writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-2082.DHvWGP/tmp.9EsvSt'
Enter PEM pass phrase:  ##輸入密碼123456
Verifying - Enter PEM pass phrase:  ##輸入密碼123456
-----
Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-2082.DHvWGP/tmp.nzO0oV
Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key:  輸入密碼123456
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'laosi'
Certificate is to be certified until Aug  8 12:57:25 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

客戶端檔案提醒:所有平臺的客戶端配置檔案是一樣的,一份配置檔案多平臺通用;

客戶端需要的檔案均為下列:

ca.crt、ta.key、客戶端認證使用者名稱.key、客戶端認證使用者名稱.crt、客戶端認證使用者名稱.ovpn

用我們目前實驗的例子,就需要:
ca.crt、ta.key、laosi.key、laosi.crt、laosi.ovpn

其中 .ovpn是配置檔案,是需要自己建立的;其他檔案是命令生成,目錄與server端在一起,下面檢視檔案中有;

.ovpn配置檔案

    ##我們在根目錄下編輯一個 .ovpn 配置檔案,之後要將他同證書及金鑰檔案一同傳到客戶端裝置中
[root@localhost ~]# cd
[root@localhost ~]# vim laosi.ovpn
    ##證明是客戶端
client

    ##下面兩項要同服務端配置檔案的相同,不同不能連線
dev tun
proto tcp

    ##我們是雲伺服器來進行部署,這個IP地址,要是你雲伺服器的公網IP地址,埠就是服務端配置的,記得開安全組
remote 伺服器公網IP地址 埠號
resolv-retry infinite
nobind
;user nobody
;group nobody
persist-key
persist-tun

    ##這裡我們使用相對路徑
ca ca.crt
cert 客戶端認證使用者名稱.crt
key 客戶端認證使用者名稱.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
compress lz4-v2
verb 3
;mute 20

建立ta.key檔案

    ##此檔案是提高安全性的,設定後服務端與客戶端均需要此檔案才能進行認證,服務端引數為0,客戶端引數為1
    ##執行後沒有提示,生成的檔案會出現在執行命令時的當前目錄下,ls 即可檢視到
[root@localhost 3.0.8]# openvpn --genkey --secret ta.key

檢視生成的檔案

[root@localhost 3.0.8]# ll
total 100
-rwxr-xr-x 1 root root 76946 Sep 10  2020 easyrsa
-rw-r--r-- 1 root root  4616 Sep 10  2020 openssl-easyrsa.cnf
drwx------ 8 root root   300 May  5 20:57 pki
-rw------- 1 root root   636 May  5 20:59 ta.key
-rw-r--r-- 1 root root  8917 May  5 20:35 vars
drwxr-xr-x 2 root root   122 May  5 20:21 x509-types


[root@localhost 3.0.8]# cd pki/
[root@localhost pki]# ls -l ca.crt 
-rw------- 1 root root 1172 May  5 20:37 ca.crt


[root@localhost pki]# cd private/
[root@localhost private]# ll
total 12
-rw------- 1 root root 1766 May  5 20:37 ca.key
-rw------- 1 root root 1834 May  5 20:57 laosi.key
-rw------- 1 root root 1704 May  5 20:51 server.key


[root@localhost private]# cd ../issued/
[root@localhost issued]# ll
total 16
-rw------- 1 root root 4431 May  5 20:57 laosi.crt
-rw------- 1 root root 4547 May  5 20:51 server.crt

認證檔案移動到需要的目錄

    ##我們一共需要5個檔案,ca.crt、server.key、server.crt、dh.pem、ta.key,統一放到 /etc/openvpn/server/ 目錄下
[root@localhost issued]# cd /usr/share/easy-rsa/3.0.8/pki
[root@localhost pki]# cp -a {ca.crt,private/server.key,issued/server.crt,dh.pem,../ta.key} /etc/openvpn/server/

[root@localhost pki]# cd /etc/openvpn/server
[root@localhost server]# ll
total 24
-rw------- 1 root root 1172 May  5 20:37 ca.crt
-rw------- 1 root root  424 May  5 20:41 dh.pem
-rw------- 1 root root 4547 May  5 20:51 server.crt
-rw------- 1 root root 1704 May  5 20:51 server.key
-rw------- 1 root root  636 May  5 20:59 ta.key

配置主配置檔案

[root@localhost server]# cd /etc/openvpn/
    ##配置檔案可以在原文中修改,也可以全部刪除只寫入生效項,其他沒有寫入的,會被執行預設設定,行的開頭 ; 是來註釋,該行配置不生效
[root@localhost openvpn]# vim /etc/openvpn/server.conf
    ##若是在雲伺服器上,這個地址要改為伺服器所在內網的地址,不要寫公網地址
    ##如果你的伺服器只有一個網絡卡,那麼這一項也可以不新增,刪除或 ; 註釋掉
local 192.168.1.100

    ##埠,正常情況下都是需要更換的,雲伺服器記得為埠開安全組設定,這個埠號是和客戶端檔案配置的埠一樣的
port 埠號

    ##這裡我選擇的是tcp,也可以選擇udp,根據需要選擇,而且要注意雲伺服器的安全組設定開的是tcp還是udp
proto tcp
;proto udp

    ##使用隧道,tun是三層路由IP隧道,我們選擇這個;tap是二層乙太網隧道
;dev tap
dev tun

    ##設定我們建立的各個認證檔案
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem

    ##啟動openvpn後會生成一個虛擬網絡卡,並形成一個地址池,來為接入的客戶端分配虛擬IP地址,服務端預設是網段第一個可用IP地址
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

    ##設定路由轉發的網段,我們是需要讓外網接入的客戶端可以訪問我們的內網,或其他網段,均在這裡設定,多個網段設定多條 push 即可
push "route 192.168.1.0 255.255.255.0"
    ##閘道器設定,不要多寫,這個設定可以保證你的客戶端既可以連線VPN訪問內網,還可以繼續訪問外網,其他設定可能會造成只能訪問內網,而外網不能訪問
push "redirect-gateway"
    ##這個是內網的DNS,檢視伺服器的 /etc/resolv.conf 進行填寫
push "dhcp-option DNS xxx.xxx.xxx.xxx"

    ##允許客戶端互相可見
client-to-client

    ##簡介檢測,10秒ping一次,120秒沒有收到資訊則中斷
keepalive 10 120

    ##設定認證,這裡設定是我們建立的ta.key檔案,引數服務端為0
tls-auth /etc/openvpn/server/ta.key 0

    ##加密模式
cipher AES-256-CBC

    ##服務端啟用lz4壓縮功能
compress lz4-v2
push "compress lz4-v2"

    ##客戶端最大連線數
max-clients 100
    ##服務程序使用的使用者及組,若不取消註釋則會使用root使用者執行,Linux建議去掉註釋開啟
user nobody
group nobody
    ##重連或重啟vpn後,使用之前的金鑰檔案並保持tun連線狀態
persist-key
persist-tun

    ##連線資訊記錄檔案
status openvpn-status.log

    ##日誌檔案,其中log是引數,表示每次覆蓋之前的日誌內容,可以替換為 log-append,表示每次日誌是追加形式記錄
log openvpn.log

    ##日誌級別
verb 3

啟動服務

    ##啟動服務
[root@localhost openvpn]# systemctl start [email protected]
[root@localhost openvpn]# systemctl status [email protected]
[email protected] - OpenVPN Robust And Highly Flexible Tunneling Application On ser
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disa
   Active: active (running) since Wed 2021-05-05 21:22:47 CST; 5s ago
 Main PID: 2210 (openvpn)
   Status: "Initialization Sequence Completed"
   CGroup: /system.slice/system-openvpn.slice/[email protected]
           └─2210 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf

May 05 21:22:47 localhost.localdomain systemd[1]: Starting OpenVPN Robust And Highly Flexi
May 05 21:22:47 localhost.localdomain systemd[1]: Started OpenVPN Robust And Highly Flexib

    ##設定開機啟動
[root@localhost openvpn]# systemctl enable [email protected]
Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].

    ##檢視網絡卡,會出現一個tun0的網絡卡,是我們服務的虛擬網絡卡
[root@localhost ~]# ip a
    ... ...
    ... ...
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::dfb8:349f:73ed:e75c/64 scope link flags 800 
       valid_lft forever preferred_lft forever

--返回目錄--


Windows客戶端安裝並連線到服務端

http://openvpn.net/(這是官網,科技)或

https://www.techspot.com/downloads/5182-openvpn.html

直接下載安裝程式即可,雙擊安裝,一路“下一步”

安裝完成我們需要配置客戶端所需的檔案,將生成的客戶端檔案都放到windows端主機中,選擇 FILE -->BROWSE 然後選擇 .ovpn 的配置檔案;

提醒一下,我的配置檔案寫的均是相對路徑,winodws端的即是所有檔案放在同一個目錄下,這樣 .ovpn 配置檔案就可以找到其他所需的檔案了;

當配置檔案正確匯入之後會出現一個連線專案(十分尷尬,windows端的截圖刪錯了,不過還好,與Android端的相似,是這麼個意思吧,哈哈)

輸入連線的名稱,然後下面兩項可以都勾選上,Save Private Key Password 是儲存密碼,Connect after import 是儲存後直接進行連線;

之後點選右上角的 ADD,這樣就開始連線了

--返回目錄--


Android客戶端安裝並連線到服務端

http://openvpn.net/(這是官網,科技)或

https://www.techspot.com/downloads/5182-openvpn.html

這裡說一下,Android端可以是到谷歌商店去下載,直接下載需要連線裝置,個人不會整,我自己是用網頁地址提取下載的APK安裝包;

我這裡也使用了這個地址下載:OpenVPN 2.5.2 Download | TechSpot;點選相應的系統版本之後進入下一個網頁就不要再點了(全是廣告),會自己觸發下載,看網路狀態,會延遲些許才開始下載

下載的APK傳到手機裡,配置檔案及證書也一起傳過來,使用Windows的檔案即可,無需修改,軟體安裝即可;

這裡要注意以下,我在安裝的時候最開始的版本閃退,是由於其安裝版本不同,比如需要選擇 x86_64;

開啟APP,會看到FILE,在其中新增我們的客戶端配置檔案;

新增成功後就和windows端的一樣,進行連線的一些設定,輸入密碼, ADD新增就可以連線了;

--返回目錄--


iOS客戶端安裝並連線到服務端

由於本人沒有裝置,公司裝置設定好之後就沒拿過,沒有圖,但是整體步驟和操作方式是一樣的,這裡簡單說一下;

我之前水果的裝置是一點沒用過,完全不懂,需要電腦下一個軟體進行連線然後把檔案放到裝置中(我是沒找到 iOS 平板的檔案移動功能..);

這裡描述一下客戶端的安裝:

  水果自己的商店還是有 openvpn connect 這個軟體的,你搜索的時候下拉框直接就有提示,但是,沒什麼卵用,我們這邊是不能安裝使用的,是遵守了相關的法律法規的,

那我們並不是出於不正經的目的,而是正經的辦公使用怎麼辦,沒辦法,你也不能讓人家單獨給你開許可權了。目前我找到的唯一辦法就是註冊一個新的ID,然後轉到美國,登入

商店,你就可以下載安裝了(不像Android一樣,下一個apk傳到手機裡就直接安裝了,水果不能..),之後就可以去匯入證書及金鑰了,不過還是不同於其他平臺裝置可以直接

匯入的情況,看下面吧;

這裡描述一下客戶端檔案的匯入過程及問題:

  客戶端配置檔案和證書同樣可以使用之前Windows和Android用過的即可,均不需要修改,唯一的問題是,配置檔案中證書及金鑰檔案都是相對路徑,是相對於配置檔案的;

在Windows與Android中使用配置檔案後直接可以識別同路徑下的證書及金鑰檔案,而iOS會提示你找不到檔案;解決方法即是使用工具,將證書及金鑰放入openvpn的安裝目錄

下,然後長按你的客戶端配置檔案,共享給openvpn這個軟體APP,即可完成客戶端配置匯入,之後輸入你的密碼(我們實驗是123456),就可以進行連線了;

--返回目錄--