天天看點

centos7安裝openVPN

1、前期準備

1.1、 基礎包安裝

yum install -y wget vim net-tools epel-release
           

1.2 、時間同步

時間同步處理,即為重要,要不然證書會有問題

yum -y install ntp ntpdate
ntpdate 0.asia.pool.ntp.org
           

0.asia.pool.ntp.org --為時間伺服器,不是固定的。

1.3、openVPN和easy-rsa源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
           

2、easy-rsa安裝和證書生成

2.1、easy-rsa安裝

yum -y install easy-rsa
           

2.2、證書環境準備

mkdir -p /opt/easy-rsa
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars
           

2.3、vars檔案修改

找到下列配置去掉注釋,且修改對應的值。

set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Shanghai"
set_var EASYRSA_REQ_CITY        "Shanghai"
set_var EASYRSA_REQ_ORG         "test"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_NS_SUPPORT      "yes"
           

2.4、easy-rsa初始化

/opt/easy-rsa/easyrsa init-pki
           
centos7安裝openVPN

2.5、建立根證書ca.crt

根證書用于ca對之後生成的server和client證書簽名時使用,檔案路徑

/opt/easy-rsa/pki/ca.crt

/opt/easy-rsa/easyrsa init-pki
           
centos7安裝openVPN

2.6、server端證書

2.6.1、建立server端證書和私鑰檔案

nopass表示不加密私鑰檔案,生成過程中直接回車預設

/opt/easy-rsa/easyrsa gen-req server nopass
           
centos7安裝openVPN

2.6.2、server證書簽名

/opt/easy-rsa/easyrsa sign server server
           
centos7安裝openVPN

2.7、建立Diffie-Hellman檔案,秘鑰交換時的Diffie-Hellman算法

/opt/easy-rsa/easyrsa gen-dh
           
centos7安裝openVPN

2.8、client證書簽名

2.8.1、建立client端證書和私鑰檔案

nopass表示不加密私鑰檔案,生成過程中直接回車預設

/opt/easy-rsa/easyrsa gen-req client nopass
           
centos7安裝openVPN

2.8.2、client證書簽名

/opt/easy-rsa/easyrsa sign client client
           
centos7安裝openVPN

3、openVPN安裝

3.1、安裝

yum -y install openvpn 
           

3.2、配置檔案

cat >> /etc/openvpn/server.conf << EOF
port 1194 #端口
proto udp #協定
dev tun #采用路由隧道模式tun
ca ca.crt #ca證書檔案位置
cert server.crt #服務端公鑰名稱
key server.key #服務端私鑰名稱
dh dh.pem #交換證書
server 10.8.0.0 255.255.255.0 #給用戶端配置設定位址池,注意:不能和VPN伺服器内網網段有相同
push "route 172.16.1.0 255.255.255.0" #允許用戶端通路内網172.16.1.0網段
ifconfig-pool-persist ipp.txt #位址池記錄檔案位置
keepalive 10 120 #存活時間,10秒ping一次,120 如未收到響應則視為斷線
max-clients 100 #最多允許100個用戶端連接配接
status openvpn-status.log #日志記錄位置
verb 3 #openvpn版本
client-to-client #用戶端與用戶端之間支援通信
log /var/log/openvpn.log #openvpn日志記錄位置
persist-key #通過keepalive檢測逾時後,重新啟動VPN,不重新讀取keys,保留第一次使用的keys。
persist-tun #檢測逾時後,重新啟動VPN,一直保持tun是linkup的。否則網絡會先linkdown然後再linkup
duplicate-cn
EOF
           

3.3、證書拷貝

cp -a /opt/easy-rsa/pki/ca.crt /etc/openvpn/
cp -a /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp -a /opt/easy-rsa/pki/private/server.key /etc/openvpn/
cp -a /opt/easy-rsa/pki/dh.pem /etc/openvpn/
           

3.4、openVPN啟動

systemctl -f enable [email protected]
systemctl start [email protected]
           

4、用戶端安裝連接配接測試

4.1、安裝

openVPN用戶端安裝,這個點點點就不綴續了

4.2、證書拷貝

将下列證書拷貝到C:\Program Files\OpenVPN\config或者C:\Users\對應使用者\OpenVPN\config安裝路徑下

/opt/easy-rsa/pki/ca.crt 
/opt/easy-rsa/pki/issued/client.crt
/opt/easy-rsa/pki/private/client.key
           

4.3、用戶端配置檔案

在C:\Program Files\OpenVPN\config或者C:\Users\對應使用者\OpenVPN\config安裝路徑下建立client.ovpn檔案

client #指定目前VPN是用戶端
dev tun #使用tun隧道傳輸協定
proto udp #使用udp協定傳輸資料
remote 10.10.10.70 1194 #openvpn伺服器IP位址端口号
resolv-retry infinite #斷線自動重新連接配接,在網絡不穩定的情況下非常有用
nobind #不綁定本地特定的端口号
ca ca.crt #指定CA憑證的檔案路徑
cert client.crt #指定目前用戶端的證書檔案路徑
key client.key #指定目前用戶端的私鑰檔案路徑
verb 3 #指定日志檔案的記錄詳細級别,可選0-9,等級越高日志内容越詳細
persist-key #通過keepalive檢測逾時後,重新啟動VPN,不重新讀取keys,保留第一次使用的keys
persist-tun #檢測逾時後,重新啟動VPN,一直保持tun是linkup的。否則網絡會先linkdown然後再linkup
           

4.4、轉發和防火牆設定

4.4.1、轉發設定

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf 
           

4.4.2、防火牆

systemctl start firewalld
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-service=openvpn --permanent
firewall-cmd --reload
           

4.5、測試

輕按兩下安裝好後的OpenVPN軟體,然後右鍵點選連接配接。

連接配接成功後,在托工作列位置的OpenVPN圖示會變綠色,則說明OpenVPN已經連接配接成功。

centos7安裝openVPN

5、賬号密碼驗證

5.1、配置檔案修改

服務端修改

cat >> /etc/openvpn/server.conf << EOF
script-security 3              #允許使用自定義腳本
auth-user-pass-verify /etc/openvpn/check.sh via-env
username-as-common-name         #使用者密碼登陸方式驗證
EOF
           

ps:如果加上client-cert-not-required則代表隻使用使用者名密碼方式驗證登入,如果不加,則代表需要證書和使用者名密碼雙重驗證登入!

5.2、檢測腳本

cat >> /etc/openvpn/check.sh << EOF
#!/bin/sh
###########################################################
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
EOF
           

腳本增加執行權限

chmod +x /etc/openvpn/check.sh 
           

5.3、使用者密碼檔案建立

echo "test 123456" >> /etc/openvpn/openvpnfile
           

5.4、重新開機openVPN

systemctl restart [email protected]
           

5.5、用戶端配置

在C:\Program Files\OpenVPN\config或者C:\Users\對應使用者\OpenVPN\config安裝路徑下client.ovpn檔案中增加

5.6、連接配接測試

輸入Username:test Password:123456,點選ok。結果如第二張圖則為正常

centos7安裝openVPN
centos7安裝openVPN
參考連接配接

繼續閱讀