刚好这段时间需要用到openvpn,搭建起来也是遇到很多问题,所以在这里记录一下。
openvpn:OpenVPN是受欢迎的开源虚拟专用网络的软件包之一,它是一个全功能的SSL虚拟专用网络。它使用行业标准SSL/TLS协议实现OSI第2层或第3层安全网络扩展,支持基于证书、智能卡、用户名密码等多种的客户端身份验证方法,并将防火墙规则应用于虚拟接口,从而实现对用户或组的访问控制策略控制。
我的环境信息:我主要是记录搭建过程,所以都在虚拟机里面搭建,centos7一台(NAT模式,IP地址为192.168.110.200/24),win10一台(NAT模式,自动获取),由于我的环境,win10 本身就是跟centos 是互通的, 所以就不做后面的vpn连接后内网互通测试验证了。(仔细一点把,配置文件一点内容错,openvpn 就会各种问题都有。)
centos7 (前提保证能上网):
epel源
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
安装openvpn、Easy-rsa
yum -y install openvpn easy-rsa
在/etc/openvpn文件夹下面创建easy-rsa文件夹,并把openvpn相关文件复制进去
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cp -p /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars
我们将创建CA密钥,server端、client端密钥,DH和CRL PEM, TLS认证钥匙ta.key。
cd /etc/openvpn/easy-rsa/
初始化并建立CA证书(nopass 代表不需要密码)
./easyrsa init-pki
./easyrsa build-ca nopass #(回车)
创建服务器密钥名称为 server.key
./easyrsa gen-req server nopass #(回车)
用CA证书签署server1密钥
./easyrsa sign-req server server #输入yes
创建客户端密钥
创建客户端密钥名称为 client.key
./easyrsa gen-req client nopass #回车
用CA证书签署client1密钥
./easyrsa sign-req client client 输入yes
创建DH密钥
根据在顶部创建的vars配置文件生成2048位的密钥
./easyrsa gen-dh
创建TLS认证密钥
openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
.生成证书撤销列表(CRL)密钥
CRL(证书撤销列表)密钥用于撤销客户端密钥。如果服务器上有多个客户端证书,希望删除某个密钥,那么只需使用./easyrsa revoke NAME这个命令撤销即可。
生成CRL密钥:
./easyrsa gen-crl
复制证书文件
复制ca证书,ta.key和server端证书及密钥到/etc/openvpn/server文件夹里
cp -p pki/ca.crt /etc/openvpn/server/
cp -p pki/issued/server.crt /etc/openvpn/server/
cp -p pki/private/server.key /etc/openvpn/server/
cp -p ta.key /etc/openvpn/server/
复制ca证书,ta.key和client端证书及密钥到/etc/openvpn/client文件夹里
cp -p pki/ca.crt /etc/openvpn/client/
cp -p pki/issued/client.crt /etc/openvpn/client/
cp -p pki/private/client.key /etc/openvpn/client/
cp -p ta.key /etc/openvpn/client/
复制dh.pem , crl.pem到/etc/openvpn/client文件夹里
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
为服务端编写配置文件
当安装好了openvpn时候,他会提供一个server配置的文件例子,在/usr/share/doc/openvpn-2.3.2/sample/sample-config-files 下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn/下。
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/
编辑配置文件
vim /etc/openvpn/server.conf
local 0.0.0.0 #监听地址
port 1194 #监听端口
proto tcp #监听协议
dev tun #采用路由隧道模式
ca /etc/openvpn/server/ca.crt #ca证书路径
cert /etc/openvpn/server/server.crt #服务器证书
key /etc/openvpn/server/server.key # This file should be kept secret 服务器秘钥
dh /etc/openvpn/server/dh.pem #密钥交换协议文件
server 10.8.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp" #给网关
push "route 192.168.0.0 255.255.255.0" #推送客户端常用路由(根据自己内网网段来写或修改客户端配置添加路由)
push "dhcp-option DNS 8.8.8.8" #dhcp分配dns
client-to-client #客户端之间互相通信
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo #传输数据压缩
max-clients 100 #最多允许 100 客户端连接
tls-auth /etc/openvpn/server/ta.key 0
user openvpn #用户
group openvpn #用户组
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
可以注销
#explicit-exit-notify 1
配置日志路径跟权限
mkdir /var/log/openvpn
chown -R openvpn.openvpn /var/log/openvpn/
chown -R openvpn.openvpn /etc/openvpn/*
iptables 设置nat 规则和打开路由转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33(网卡根据实际情况调整) -j MASQUERADE
iptables -vnL -t nat #查看
vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
sysctl -p
开启openvpn 服务
openvpn /etc/openvpn/server.conf
后台运行-daemon参数表示后台运行,不加该参数前台会被占用,需要开新窗口
openvpn --daemon --config /etc/openvpn/server.conf
(setenforce 0 暂时关闭、firewalld 防火墙记得关掉,或者开放1194端口,)
查看
systemctl -f enable [email protected]
systemctl start [email protected]
ss -nutl |grep 1194
配置windows客户端自动连接vpn(方式1)
下载openvpn客户端(网盘敏感词发不出来,自行去百度下载把,最好找到跟openvpn 同版本的)
配置client 端配置文件
配置文件在服务端/usr/share/doc/openvpn-2.4.11/sample/sample-config-files/下,名称为clent.conf
复制到/root 目录下
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/
修改 client.ovpn文件
vim /root/clent.conf
client
dev tun
proto tcp //改为tcp
remote xxx.xxx.xxx.xxx 1194 //OpenVPN服务器的外网IP和端口,ip和域名都行
resolv-retry infinite
nobind
persist-key
persist-tun
ca 'C:\Program Files\OpenVPN\config\ca.crt'
cert 'C:\Program Files\OpenVPN\config\client1.crt' //client1的证书
key 'C:\Program Files\OpenVPN\config\client1.key' //client1的密钥
comp-lzo
verb 3
修改保存后把后缀名修改为ovpn
cp client.conf laotang6.ovpn
然后上传到win10 客户端, 我这里用的是winscp(没有的自己下载哈)
将服务端(/etc/openvpn/client/这个目录)的ca.crt client.crt client1.key下载到客户端本地的penvpn安装目录的config 目录下('C:\Program Files\OpenVPN\config\)
连接成功
配置windows客户端使用用户名/密码方式连接vpn(方式2)
首先我们需要编写一个用户认证的脚本 (脚本是由openvpn官网提供的)
vim /etc/openvpn/checkpsw.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/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
接下来给脚本执行权限
chmod 755 /etc/openvpn/checkpsw.sh
配置用户密码文件/etc/openvpn/psw-file
vim /etc/openvpn/psw-file #账户密码中间用空格隔开
laotang 123456
abc 123456
还需要修改server.conf 文件
vim /etc/openvpn/server.conf
在最下面添加一些几行
script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #指定用户认证脚本
username-as-common-name
verify-client-cert none
客户端文件也要修改,指定用账户密码连接。
client
dev tun
proto tcp
remote 公网ipxxx.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cipher AES-256-CBC
comp-lzo
verb 3
auth-user-pass #使用用户名密码登录openvpn服务器
auth-nocache
然后把新的客户端文件ovpn 拷贝到win10, 重启启动服务,就需要账户密码才能登陆了
#push "redirect-gateway def1 bypass-dhcp" #这条命令可以重定向客户端的网关,在进行FQ时会使用,
开启此选项客户端出口ip会成为openvpn服务器IP
#push "route 172.17.48.0 255.255.240.0" #向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,
要访问172.17.48.0网段的话,使用这条命令就可以了。
参考文章:https://www.jianshu.com/p/0ce6560b2279
标签:server,centos7,etc,client,key,openvpn,vpn,open,客户端 From: https://blog.51cto.com/laotang6/8806198