環境準備
- 作業系統:CentOS 7.8
- OpenVPN server: 2.4.11
- easy-rsa:3.0.8
1、安裝準備
1.1 系統優化
關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
修改系統參數:
cat /etc/sysctl.d/99-net.conf
# 二層的網橋在轉發包時也會被iptables的FORWARD規則所過濾
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 關閉嚴格校驗資料包的反向路徑,預設值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# 設定 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576
# 端口最大的監聽隊列的長度
net.core.somaxconn=21644
# 打開ipv4資料包轉發
net.ipv4.ip_forward=1
# TCP FastOpen
# 0:關閉 ; 1:作為用戶端時使用 ; 2:作為伺服器端時使用 ; 3:無論作為用戶端還是伺服器端都使用
net.ipv4.tcp_fastopen=3
# 修改limits參數:
cat /etc/security/limits.d/99-centos.conf
* - nproc 1048576
* - nofile 1048576
2、安裝openvpn
安裝epel源:
yum -y install epel-*
更新軟體:
yum makecache
yum update -y
安裝openvpn及easy-rsa:
yum -y install openvpn easy-rsa
3、服務端證書配置
複制檔案:
# 拷貝easy-rsa的檔案到/etc/openvpn下
cp -r /usr/share/easy-rsa/3.0.8 /etc/openvpn/easy-rsa
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars
修改/etc/openvpn/easy-rsa/vars配置:
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Zhe Jiang"
set_var EASYRSA_REQ_CITY "Hang Zhou"
set_var EASYRSA_REQ_ORG "test"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "openvpn"
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 365000
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_CERT_RENEW 180
set_var EASYRSA_CRL_DAYS 60
初始化PKI和CA
切換目錄:
cd /etc/openvpn/easy-rsa
建立PKI
./easyrsa init-pki
建立CA
./easyrsa build-ca nopass
建立伺服器證書
方式一:
./easyrsa build-server-full openvpn-server nopass #自動簽發公鑰和私鑰
方式二:
./easyrsa gen-req openvpn-server nopass # 建立伺服器密鑰
./easyrsa sign-req server openvpn-server # 用CA憑證簽署密鑰
建立用戶端證書
方式一:
./easyrsa build-server-full openvpn-client nopass
方式二:
./easyrsa gen-req openvpn-client nopass # 建立伺服器密鑰
./easyrsa sign-req client openvpn-client # 用CA憑證簽署密鑰
建立DH證書
./easyrsa gen-dh # 根據在頂部建立的vars配置檔案生成密鑰
建立ta.key
openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
生成CRL密鑰:
./easyrsa gen-crl
拷貝證書
mkdir -p /etc/openvpn/pki
cp /etc/openvpn/easy-rsa/pki/ca.crt \
/etc/openvpn/easy-rsa/pki/dh.pem \
/etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt \
/etc/openvpn/easy-rsa/pki/private/openvpn-server.key \
/etc/openvpn/pki/
ln -sv /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/pki/crl.pem
chown -R root:openvpn /etc/openvpn/pki
# 複制ca證書,ta.key和server端證書及密鑰到/etc/openvpn/server檔案夾裡
cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-server.key /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/server/
# 複制ca證書,ta.key和client端證書及密鑰到/etc/openvpn/client檔案夾裡
cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-client.crt /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-client.key /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/client/
# 複制dh.pem , crl.pem到/etc/openvpn/client檔案夾裡
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/client/
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/client/
4、OpenVPN服務端配置
檔案建立
建立日志目錄:
mkdir -p /var/log/openvpn
chown -R openvpn:openvpn /var/log/openvpn
建立用戶端配置目錄
mkdir -p /etc/openvpn/client/{config,user}
chown -R root:openvpn /etc/openvpn/client/{config,user}
配置檔案建立
cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server/
cat /etc/openvpn/server/server.conf
# 路徑根據實際情況修改,一般情況下服務啟動失敗都是因為證書的原因
# 監聽位址
#local 0.0.0.0
# 監聽端口
port 1194
# 通信協定
proto udp
# TUN模式還是TAP模式
dev tun
# 證書
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/openvpn-server.crt
key /etc/openvpn/pki/openvpn-server.key
dh /etc/openvpn/pki/dh.pem
crl-verify /etc/openvpn/pki/crl.pem
# 禁用OpenVPN自定義緩沖區大小,由作業系統控制
sndbuf 0
rcvbuf 0
# TLS rules “client” | “server”
#remote-cert-tls "client"
# TLS認證
tls-auth /etc/openvpn/pki/ta.key 0
# TLS最小版本
#tls-version-min "1.2"
# 重新協商資料交換的key,預設3600
#reneg-sec 3600
# 在此檔案中維護用戶端與虛拟IP位址之間的關聯記錄
# 如果OpenVPN重新開機,重新連接配接的用戶端可以被配置設定到先前配置設定的虛拟IP位址
ifconfig-pool-persist /etc/openvpn/ipp.txt
# 配置client配置檔案
client-config-dir /etc/openvpn/client/config
# 該網段為 open VPN 虛拟網卡網段,不要和内網網段沖突即可。
server 10.7.0.0 255.0.0.0
# 配置網橋模式,需要在OpenVPN服務添加啟動關閉腳本,将tap裝置橋接到實體網口
# 假定内網位址為192.168.0.0/24,内網網關是192.168.0.1
# 配置設定192.168.0.200-250給VPN使用
#server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.250
# 給用戶端推送自定義路由
#push "route 192.168.0.0 255.255.255.0"
# 所有用戶端的預設網關都将重定向到VPN
push "redirect-gateway def1 bypass-dhcp"
# 向用戶端推送DNS配置
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"
# 允許用戶端之間互相通路
client-to-client
# 限制最大用戶端數量
max-clients 100
# 用戶端連接配接時運作腳本
#client-connect ovpns.script
# 用戶端斷開連接配接時運作腳本
#client-disconnect ovpns.script
# 保持連接配接時間
keepalive 20 120
# 開啟vpn壓縮
comp-lzo
# 允許多人使用同一個證書連接配接VPN,不建議使用,注釋狀态
duplicate-cn
# 運作使用者
user openvpn
#運作組
group openvpn
# 持久化選項可以盡量避免通路那些在重新開機之後由于使用者權限降低而無法通路的某些資源
persist-key
persist-tun
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
# 顯示目前的連接配接狀态
status /var/log/openvpn/openvpn-status.log
# 日志路徑,不指定檔案路徑時輸出到控制台
# log代表每次啟動時清空日志檔案
# log /var/log/openvpn/openvpn.log
# log-append代表追加寫入到日志檔案
log-append /var/log/openvpn/openvpn.log
# 日志級别
verb 6
# 忽略過多的重複資訊,相同類别的資訊隻有前20條會輸出到日志檔案中
mute 20
explicit-exit-notify 1
5、防火牆配置
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --add-interface=tun0 # vpn網卡名
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.7.0.0/8 -o ens33 -j MASQUERADE # IP位址為vpn網卡監聽的網段,ens33指的是你伺服器上網的網卡名稱
firewall-cmd --reload
6、服務端啟動
systemctl enable openvpn-server@server # 開機啟動
systemctl start openvpn-server@server # 本次啟動
systemctl status openvpn-server@server # 檢視狀态
netstat -tlunp | grep openvpn
7、用戶端配置
# 複制配置檔案模闆
cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf /etc/openvpn/client/
# 修改後的内容如下
[root@localhost client]# cat client.conf |grep '^[^#|^;]'
client
dev tun
proto udp
remote 192.168.43.138 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert openvpn-client.crt
key openvpn-client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 6
# 更改client.conf檔案名為client.ovpn
mv /etc/openvpn/client/client.conf /etc/openvpn/client/client.ovpnmv client/client.conf client/client.ovpn
# 打包client檔案夾
[root@localhost openvpn]# tar -zcvf client.tar.gz client/
# 安裝lrzsz工具,通過sz指令把 client.tar.gz傳到客戶機上面
[root@localhost openvpn]# yum -y install lrzsz
# 将用戶端檔案複制到需要使用的機器上即可
8、用戶端使用openvpn指令連接配接服務端
openvpn --daemon --cd /root/client/ --config client.ovpn --log-append /var/log/openvpn/openvpn-status.log --auth-nocache
--daemon:背景運作
--cd:切換路徑
--config: 指定配置檔案
--log-append:指定日志
--auth-nocache:自動認證