今天帶大家學(xué)習(xí)一下,用OpenVPN輕松實現(xiàn)內(nèi)網(wǎng)穿透,打造專屬安全遠程訪問通道。
# 安裝openvpn
yum install openvpn |
1、用于生成openVPN所需的密鑰,服務(wù)端和客戶端所需的證書和密鑰
# 下載Easy RSA源碼包
1、下載地址:
https://github.com/OpenVPN/easy-rsa/releases
2、下載源碼包
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.2/EasyRSA-3.1.2.tgz
3、移動到固定位置
mv EasyRSA-3.1.2 /etc/openvpn/easy-rsa |
2、修改配置文件
1、把vars.example樣例文件重命名為vars,然后編輯
2、搜索 set_var EASYRSA_CA_EXPIRE 設(shè)置證書有效期一年
3、搜索 set_var EASYRSA_CERT_EXPIRE 設(shè)置服務(wù)有效期 |
3、使用Easy RSA在服務(wù)端生成私鑰和證書

1、使用easyrsa清理原有證書和私鑰:
./easyrsa clean-all
2、生成CA根證書:./easyrsa build-ca
這里輸入兩個根密碼,第三次回車即可
3、證書生成位置
/etc/openvpn/easy-rsa/pki/ca.crt |
4、為OpenVPN服務(wù)端生成server證書和私鑰
1、使用nopass參數(shù)設(shè)置不需要密碼,那么在啟動OpenVPN服務(wù)的時候就不提示輸入密碼
./easyrsa build-server-full server nopass
2、證書和密鑰的位置
服務(wù)端證書路徑:/etc/openvpn/easy-rsa/pki/issued/server.crt
服務(wù)端私鑰路徑:/etc/openvpn/easy-rsa/pki/private/server.key
3、生成Diffie-Hellman算法需要的密鑰文件:
./easyrsa gen-dh
4、生成tls-auth Key用于防止DDOS和TLS攻擊:
openvpn --genkey --secret ta.key
5、ta.key路徑
/etc/openvpn/easy-rsa/ta.key |
1、創(chuàng)建修改服務(wù)端配置文件
1、配置文件位置:/etc/openvpn/server/server.conf
vim /etc/openvpn/server/server.conf
====================================== BEGIN ===========================================
port 1194 #端口
dev tun #采用路由隧道模式tun
ca ca.crt #ca證書文件位置
cert server.crt #服務(wù)端公鑰名稱
key server.key #服務(wù)端私鑰名稱
dh dh.pem #交換證書
auth SHA1
proto tcp
server 10.8.0.0 255.255.255.0 #給客戶端分配地址池,注意:不能和VPN服務(wù)器內(nèi)網(wǎng)網(wǎng)段有相同
push "route 10.0.8.2 255.255.252.0" #允許客戶端訪問內(nèi)網(wǎng)10.0.8.2網(wǎng)段,我這里填了服務(wù)器內(nèi)網(wǎng)IP和子網(wǎng)掩碼
client-to-client
verb 3 #openvpn版本
persist-key #通過keepalive檢測超時后,重新啟動VPN,不重新讀取keys,保留第一次使用的keys。
persist-tun #檢測超時后,重新啟動VPN,一直保持tun是linkup的。否則網(wǎng)絡(luò)會先linkdown然后再linkup
keepalive 10 120 #存活時間,10秒ping一次,120 如未收到響應(yīng)則視為斷線
max-clients 200 #最多允許200個客戶端連接
ifconfig-pool-persist ipp.txt #地址池記錄文件位置 維持客戶端和virtual ip的對應(yīng)表,以便客戶端重連接連接也是相同IP
duplicate-cn #和keys連接VPN,一定要打開這個選項,否則只允許一 個人連接VPN
script-security 3 #支持密碼認證-允許使用自定義腳本
auth-user-pass-verify /etc/openvpn/check.sh via-env #支持密碼認證-指定認證腳本
username-as-common-name #支持密碼認證-用戶密碼登陸方式驗證
====================================== END ===========================================
2、編寫用戶認證腳本文件
1、腳本文件位置:/etc/openvpn/check.sh
vim /etc/openvpn/check.sh
====================================== BEGIN 寫入下面內(nèi)容 ===========================================
#!/bin/bash
PASSFILE="/etc/openvpn/openvpnfile" #密碼文件 用戶名 密碼明文
LOG_FILE="/var/log/openvpn-password.log" #用戶登錄情況的日志
TIME_STAMP=`date "+%Y-%m-%d %T"`
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\",password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
====================================== END ===========================================
2、給腳本可執(zhí)行權(quán)限
chmod +x /etc/openvpn/check.sh
3、創(chuàng)建用戶密碼
1、文件密碼存儲文件位置:/etc/openvpn/openvpnfile 2、內(nèi)容格式:每行對應(yīng)一個賬號密碼 koten 1 |
4、移動相關(guān)密鑰文件啟動服務(wù)
1、拷貝私鑰、公鑰和證書等文件到server.conf同級目錄/etc/openvpn/server/下
注:需要拷貝的文件包括ca.crt、ca.key、server.crt、server.key、dh.pem、ta.key
cp /etc/openvpn/easy-rsa/pki/ca.crt
cp /etc/openvpn/easy-rsa/pki/private/ca.key
cp /etc/openvpn/easy-rsa/pki/issued/server.crt
cp /etc/openvpn/easy-rsa/pki/private/server.key
cp /etc/openvpn/easy-rsa/pki/dh.pem
cp /etc/openvpn/easy-rsa/ta.key
2、啟動服務(wù):使用--config path 指定配置文件
openvpn --config server.conf
到這里我們的服務(wù)端就搭建好了,使用ifconfig可以看到我們的服務(wù)端已經(jīng)給自己分配了一個10.8.0.1的虛擬IP

1、安裝openVPn
# 安裝openvpn yum install openvpn |
2、在服務(wù)端生成客戶端的證書和私鑰,每個客戶端都要有自己的私鑰
1、在/etc/openvpn/easy-rsa/ 目錄下執(zhí)行
./easyrsa build-client-full client nopass
注??:生成的時候需要輸入CA根證書的密碼
2、生成的證書位置
客戶端證書路徑:/etc/openvpn/easy-rsa/pki/issued/client.crt
客戶端私鑰路徑:/etc/openvpn/easy-rsa/pki/private/client.key
3、將生成的客戶端證書(client.crt)、私鑰(client.key),服務(wù)端根證書(ca.crt)、ta.key打包放到客戶端的 /etc/openvpn/client位置
3、創(chuàng)建/修改OpenVPN客戶端配置文件
1、編輯配置文件
client
dev tun
proto tcp
remote xx.xx.xx.xx 1194
ca ca.crt #指定CA證書的文件路徑
cert client.crt #指定當(dāng)前客戶端的證書文件路徑
key client.key #指定當(dāng)前客戶端的私鑰文件路徑
nobind #不綁定本地特定的端口號
auth SHA1
resolv-retry infinite #斷線自動重新連接,在網(wǎng)絡(luò)不穩(wěn)定的情況下非常有用
verb 3 #指定日志文件的記錄詳細級別,可選0-9,等級越高日志內(nèi)容越詳細
persist-key #通過keepalive檢測超時后,重新啟動VPN,不重新讀取keys,保留第一次使用的keys
persist-tun #檢測超時后,重新啟動VPN,一直保持tun是linkup的。否則網(wǎng)絡(luò)會先linkdown然后再linkup
auth-user-pass pass.txt #用戶密碼驗證
====================================== END ===========================================
4、創(chuàng)建賬號密碼文件
1、/etc/openvpn/client下創(chuàng)建用戶密碼文件pass.txt:格式第一行賬號,第二行密碼,如:
張三
123456 |
5、啟動客戶端
# 啟動客戶端
1、openvpn --config client.conf
觀察下圖:已經(jīng)為我們分配的對應(yīng)的虛擬IP,通過這個IP在這個網(wǎng)段內(nèi)的機器都可以互通了 |

在我們自己的電腦直接使用VPN訪問內(nèi)網(wǎng)
分別配置在Windows和Mac上使用下載地址:https://openvpn.net/client/
1、Windows客戶端下載:
https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.12-I001-arm64.msi
2、Mac客戶端下載
https://swupdate.openvpn.net/downloads/connect/openvpn-connect-3.4.9.4830_signed.dmg
3、以Mac為例
把上面說到的Easy RSA生成的服務(wù)器根證書ca.crt、客戶端私鑰clientpc.key、證書client.crt,和ta.key復(fù)制到一個目錄下面
然后新建一個client.ovpn文件
client
dev tun
proto tcp
remote 41.19.18.17 1194
ca ca.crt #指定CA證書的文件路徑
cert client.crt #指定當(dāng)前客戶端的證書文件路徑
key client.key #指定當(dāng)前客戶端的私鑰文件路徑
nobind #不綁定本地特定的端口號
auth SHA1
resolv-retry infinite #斷線自動重新連接,在網(wǎng)絡(luò)不穩(wěn)定的情況下非常有用
verb 3 #指定日志文件的記錄詳細級別,可選0-9,等級越高日志內(nèi)容越詳細
persist-key #通過keepalive檢測超時后,重新啟動VPN,不重新讀取keys,保留第一次使用的keys
persist-tun #檢測超時后,重新啟動VPN,一直保持tun是linkup的。否則網(wǎng)絡(luò)會先linkdown然后再linkup
auth-user-pass pass.txt #用戶密碼驗證
新建pass.txt 文件,與客戶端的賬號密碼規(guī)則一樣,第一行為賬戶,第二行密碼

點擊導(dǎo)入配置文件



這樣就連上了,觀察本地IP,發(fā)現(xiàn)為我們也分配了一個虛擬IP

在我們本地就可以隨意訪問內(nèi)網(wǎng)網(wǎng)絡(luò)了。
該文章在 2024/8/26 10:27:43 編輯過