天天看點

圖解把雲伺服器和辦公環境伺服器組成區域網路

最近機關疊代一個平台,功能跟微信公衆号有關聯,要開發API接口受理微信調用。平台測試伺服器在内網,一開始我覺得這事很容易,在機關路由器上做虛拟伺服器就行了。沒想到試了好幾次都不成功,找營運商技術支援一問才知道,我們用的是5G上網,營運商不給開放通路端口,我也真是醉了。

後來想到:測試伺服器能上公網,機關也有雲伺服器,如果把兩者通過VPN組成一個區域網路,然後在雲伺服器上用iptables把端口指向到測試伺服器,應該就能解決問題了。

具體連接配接方式如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

确定方案之後就開始搭建VPN伺服器,我使用的是開源的OpenVPN服務。首先要制作證書,從 https://github.com/OpenVPN/easy-rsa/tree/release/2.x 可以下載下傳證書制作工具,下載下傳後是easy-rsa-release-2.x.zip。把easy-rsa-release-2.x.zip解壓縮之後上傳到VPN伺服器/root目錄。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

進入/root/easy-rsa-release-2.x/easy-rsa/2.0/,咱們制作證書的所有指令都在這個目錄裡。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

在目錄裡有vars檔案,可以配置制作證書的參數。編輯這個檔案 vim vars ,咱們隻要調整下面這些配置的值就可以了。

export KEY_COUNTRY="CN"

export KEY_PROVINCE="BeiJing"

export KEY_CITY="HaiDian"

export KEY_ORG="XXXXXX"

export KEY_EMAIL="[email protected]"

export KEY_OU="Beijing XXXXXXX Technology Co.,Ltd."

其他的都不用修改。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

vars改好之後儲存,執行 source vars 使vars配置生效。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下面執行 ./clean-all 指令,執行後系統會在目前目錄下自動建立一個keys目錄,用來存放咱們生成的證書、私鑰、連接配接檔案等。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

接下來開始生成根證書和密鑰,執行 ./build-ca 指令。因為咱們之前已經在vars檔案裡把參數都配置好了,是以現在一直按回車就可以。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

執行完成後,在keys目錄下會生成根證書檔案ca.crt和跟密鑰檔案ca.key。目錄下的其他檔案暫時用不上,忽略就行。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下面生成服務端證書和密鑰,執行 ./build-key-server server 指令,指令中後面紅色的server是服務端密鑰的名稱,可以根據自己的情況随意起名。執行指令後一路回車,遇到[y/n]就直接y。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

執行完成後可以看到,keys目錄下多了服務端證書檔案server.crt、服務端私鑰檔案server.key和服務端請求檔案server.csr。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下一步咱們制作用戶端證書和密鑰,執行 ./build-key client 指令。指令中後面紅色的client是用戶端密鑰的名稱,可以根據自己的情況随意起名。執行指令後一路回車,遇到[y/n]就直接y。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

執行完成後可以看到,keys目錄下多了用戶端證書檔案client.crt、用戶端私鑰檔案client.key和用戶端請求檔案client.csr。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下面制作密鑰交換檔案,執行 ./build-dh 指令。這個執行時間比較長,耐心多等一會。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

執行完成後,會在keys目錄下出現密鑰交換檔案dh2048.pem。到此咱們要用到的所有證書就已經制作完成了,下面開始安裝配置OpenVPN的伺服器端。

在VPN伺服器上,執行 yum -y install openvpn 指令,我安裝的是2.4.12版本。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

安裝完成後,會在 /etc 下出現openvpn目錄,裡面有server和client兩個子目錄。我們執行 mkdir /etc/openvpn/keys 指令建立一個新的keys目錄用來放置要用的各種證書和密鑰檔案。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

接下來把要用到的證書和密鑰檔案複制到這個keys目錄中。執行:

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/server.crt /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/server.key /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/ca.crt /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/dh2048.pem /etc/openvpn/keys/

執行完成後,/etc/openvpn/keys/中有四個檔案。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

然後咱們複制openvpn的配置檔案,執行 cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/ 指令。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

接下來編輯server.conf 配置檔案。先修改咱們前面複制到 /etc/openvpn/keys/ 目錄下四個檔案的位置:

ca keys/ca.crt

cert keys/server.crt

key keys/server.key

dh keys/dh2048.pem

如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

然後再修改VPN虛拟IP擷取的網段,server 10.0.1.0 255.255.255.0 。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

接下來增加允許路由的網段,push "route 10.0.1.0 255.255.255.0" 。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下一步修改拒絕服務攻擊證書檔案的位置,tls-auth keys/ta.key 0 。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

最後修改vpn的加密模式,cipher AES-256-GCM 。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

上面幾項都修改完成後儲存配置檔案,啟用路由轉發功能。

執行 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 指令;

然後再執行 sysctl -p 指令,使路由轉發配置生效。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

接下來制作拒絕服務攻擊證書。先進入 /etc/openvpn/keys 目錄,執行 openvpn --genkey --secret ta.key 指令。執行完成後會在 /etc/openvpn/keys 目錄下出現ta.key檔案。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下一步啟動openvpn服務,

進入/etc/openvpn目錄,執行 openvpn --daemon --config server.conf 指令;

然後再執行 lsof -i:1194 指令。如果1194端口被openvpn監聽,就說明服務已經成功啟動了。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

到此,咱們VPN服務端的工作就全部完成了,接下來咱們先檢查一下iptebles的配置。VPN是udp協定,是以要把iptables上1194端口的udp協定開放。如果雲伺服器有防火牆,也要開放1194的udp協定。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下面開始配置用戶端。首先是在用戶端上安裝openvpn服務,安裝過程跟服務端一樣。在VPN用戶端上執行 yum -y install openvpn 指令。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

安裝成功後進入 /etc/openvpn/client 目錄:

把VPN伺服器端生成的:ca.crt、client.crt、client.key和ta.key,這四個檔案傳送到目前目錄下;

把用戶端伺服器 /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf 也複制到/etc/openvpn/client 目錄下;

如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

下面修改 client.conf 配置檔案,先修改證書檔案的目錄:

ca client/ca.crt

cert client/client.crt

key client/client.key

tls-auth client/ta.key 1

如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

再修改VPN加密方式:

cipher AES-256-GCM

如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

最後修改VPN服務端的IP位址和端口:

       remote XXX.XXX.XXX.XXX 1194

圖解把雲伺服器和辦公環境伺服器組成區域網路

上面幾項都修改完成後,儲存檔案。然後啟動用戶端服務:

在 /etc/openvpn 目錄下執行 openvpn --daemon --config client/client.conf --log-append /var/log/openvpn.log

如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

可以看一下 /var/log/openvpn.log 這個日志檔案,如果顯示 Initialization Sequence Completed 就可以了。也可以在用戶端執行 ifconfig 指令。如果有虛拟網卡,IP是10.0.1.X,就說明正常了。   如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

現在VPN服務端和用戶端已經連接配接起來了,服務端的虛拟IP是10.0.1.1,用戶端的虛拟IP是10.0.1.6。下面在服務端執行:

echo 1 >/proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 10.0.1.6:8081

把服務端的8081端口指向到VPN用戶端伺服器10.0.1.6:8081上。用浏覽器通路服務端的公網IP,能夠正常傳回。如下圖:

圖解把雲伺服器和辦公環境伺服器組成區域網路

大功告成!