目录
一、搭建环境
二、OpenVPN服务端部署
三、OpenVPN客户端部署
一、搭建环境
注意:如果采用虚拟机桥接方式搭建,不适用,net模式正常使用
1、添加epel yum源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、下载证书生成工具easy-rsa
yum -y install easy-rsa
3、创建证书环境目录
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
4、修改vars配置文件,取消下面配置的注释
vi /opt/easy-rsa/vars
set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "GuangDong" set_var EASYRSA_REQ_CITY "GuangZhou" set_var EASYRSA_REQ_ORG "IT" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_NS_SUPPORT "yes"
5、初始化,创建pki目录用于存储证书(以下都在/opt/easy-rsa目录下操作)
cd /opt/easy-rsa/ ./easyrsa init-pki
6、创建根证书,根证书用于ca对之后生成的server和client证书签名时使用
./easyrsa build-ca
7、创建server端证书和密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)
./easyrsa gen-req server nopass
8、给server端证书签名
./easyrsa sign server server
9、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法
./easyrsa gen-dh
10、创建client端证书和密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)
./easyrsa gen-req client nopass
交互界面默认回车
11、给client端证书签名
./easyrsa sign client client
二、OpenVPN服务端部署
1、安装open
yum install -y open
2、创建TLS认证密钥
open --genkey --secret /etc/open/ta.key
3、创建新的配置文件/etc/open/server.conf
vi /etc/open/server.conf
#监听本机端口 port 1194 #指定采用的传输协议,可选tcp或udp proto tcp #指定创建的通信隧道类型,可选tun或tap dev tun #指定CA证书的文件路径 ca ca.crt #指定服务器端的证书文件路径 cert server.crt #指定服务器端的私钥文件路径 key server.key #指定迪菲赫尔曼参数的文件路径,也就是交换证书 dh dh.pem #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同 server 10.8.0.0 255.255.255.0 #允许客户端访问内网网段,填写自己内网 push "route 10.66.17.0 255.255.255.0" #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP" ifconfig-pool-persist ipp.txt #存活时间,10秒ping一次,120如未收到响应则视为断线 keepalive 10 120 #最多允许100个客户端连接 max-clients 100 #日志记录位置 status open-status.log #open版本 verb 3 #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接 client-to-client #open日志记录位置 log /var/log/open.log #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-key #检测超时后,重新启动VPN,一直保持tun是linkup的.否则网络会先linkdown然后再linkup persist-tun #开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1 tls-auth /etc/open/ta.key 0 #开启多人同时登录 duplicate-cn #允许使用自定义脚本 script-security 3 #脚本路径 auth-user-pass-verify /etc/open/check.sh via-env #用户密码登陆方式验证:加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录 username-as-common-name #绑定客户端IP client-config-dir /etc/open/ccd
4、配置密码启动脚本和和密码本
vi /etc/open/check.sh
#!/bin/sh ########################################################### PASSFILE="/etc/open/openpass" LOG_FILE="/var/log/open-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
echo "user password" >>/etc/open/openpass echo "ifconfig-push 10.8.0.25 10.8.0.26" >>/etc/open/ccd/user
增加执行权限
chmod 755 /etc/open/check.sh
ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点,必须取下面的集合之一:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]
5、拷贝证书到open主配置文件目录下
cp -a /opt/easy-rsa/pki/ca.crt /etc/open/ cp -a /opt/easy-rsa/pki/issued/server.crt /etc/open/ cp -a /opt/easy-rsa/pki/private/server.key /etc/open/ cp -a /opt/easy-rsa/pki/dh.pem /etc/open/
6、启动服务端
systemctl start open@server systemctl status open@server
开机自启
systemctl enable open@server
三、OpenVPN客户端部署
1、win10安装,默认安装(open客户端需要.net支持,网络正常会自动安装)
2、拷贝服务端生成的证书到open客户端安装目录的config目录下
可以先拷贝到client中,最后下载到config目录下
cp -a /opt/easy-rsa/pki/ca.crt /etc/open/client cp -a /opt/easy-rsa/pki/issued/client.crt /etc/open/client cp -a /opt/easy-rsa/pki/private/client.key /etc/open/client cp -a /etc/open/ta.key /etc/open/client
3、在客户端open安装目录的config目录下,新建一个client.o文件,写入配置
#指定当前VPN是客户端 client #使用tun隧道传输协议 dev tun #使用udp协议传输数据 proto tcp #open服务器IP地址端口号,转发的填写公网IP 加对应转发端口 remote 10.5.10.202 1194 #断线自动重新连接,在网络不稳定的情况下非常有用 resolv-retry infinite #不绑定本地特定的端口号 nobind #指定CA证书的文件路径 ca ca.crt #指定当前客户端的证书文件路径 cert client.crt #指定当前客户端的私钥文件路径 key client.key #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细 verb 3 #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-key #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup persist-tun #使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1 tls-auth ta.key 1 #账号密码认证 auth-user-pass
可以在config目录下建立文件夹
启动Open VPN客户端软件,连接成功OpenVPN的图标会变成绿色
注:客户端要想跟内网通讯还需要open服务端开启内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p #并且添加防火墙方式访问内部网络 systemctl start firewalld firewall-cmd --add-masquerade --permanent firewall-cmd --add-service=open --permanent firewall-cmd --add-port=1194/tcp --permanent firewall-cmd --reload