02-openvpn服务部署¶
理论知识篇¶
产品介绍¶
在众多vpn的产品中,OpenVPN无疑是Linux下开源的VPN的先锋,它提供了良好的访问性能和友好的用户GUI。
他的客户端支持windows linux unix mac 安卓 ios系统
VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI,OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。
官方文档推荐:openvpn how-to
通信原理¶
OpenVPN所有的通信都基于一个单一的IP端口(默认为1194),默认使用UDP协议通讯,同时TCP也被支持,OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好的工作。OpenVPN服务端具有向客户端"推送"某些网络配置信息的功能,这些信息包括:IP地址,路由设置等,OpenVPN提供了两种虚拟网络接口,通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据,传送的数据可通过LZO算法压缩,OpenVPN2.0以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN使用通用网络协议(TCP与UDP)的特点使他成为IPSec等协议的理解替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下、
在选择协议的时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上传协议进程重传,效率非常低下,这里建议用TCP协议方式。
OpenVPN的技术核心是虚拟网卡,其次就是SSL协议实现,SSL协议前面已经说过,这里重点对虚拟网卡及其在OpenVPN的中的工作机理进行介绍
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出一个网卡,可以像其他网卡一样进行配置,服务程序可以在应用层打开虚拟网卡,如果应用软件如(IE)想虚拟网卡发送数据,则服务程序可以读取到改数据,如果服务程序写适合的数据到虚拟网卡,应用软件也可以接收得到,虚拟网卡在很多的操作系统下都有相应的实现,这也是OpeVPN能够跨平台一个很重要的理由。
OpenVPN中,如何用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
OpenVPN使用OpenSSL库加密数据与控制信息,他使用了OpenSSL的加密以及验证功能,意味着,他能够使用任何OpenSSL支持的算法,它提供了可选的数据包HMAC功能以提高连接的安全性,此外,OpenSSL的硬件加速也能提高它的性能。
生产环境场景¶
远程拨号访问企业网络或IDC机房
即通过个人电脑远程拨号到企业办公网络
一般为企业内部远程出差,修改或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源,就可以通过VPN拨号到公司内部,此时远程拨号的员工和办公室的员工以及其他拨号的员工之间都相当于一个局域网络内。:例如:访问内部的域控制器,文件服务器,OA系统,HTTP服务,内网聊天软件
对于运维人员就是需要个人电脑远程拨号到企业网站IDC机房,远程维护服务器。
此点是技术人员特别是运维人员在工作中会经常用这个方法维护大量的机房内无外网IP的服务器及网络设备。
企业异地内部网络通过VPN连接成局域网
在公司的分支机构的局域网和公司总部LAN之间的VPN连接,通过公网Internet建立VPN将公司在各地的分支机构的LAN连接到公司总部的LAN,例如:各大超市之间业务结算等,
这是由于地域的原因二产生的VPN的需求,通过VPN让不同地域内的机器可以互相访问,就好像是一个局域网一样,例如:办公室互联协同办公,机房互联数据同步及业务访问等。
互联网公司多IDC机房之间通过VPN连接交换机数据
此处是运维人员需要考虑的问题,不同机房之间业务管理和业务访问,数据流动
企业外部VPN服务
在供应商,合作伙伴的LAN和本公司的LAN之间建立的VPN服务
从技术上将2.3.4的实现都是一样的。
依赖SSL与TLS协议介绍¶
SSL即,安全套结层(Secure sockets Layer SSL)是一种安全协议,诞生的目的是为了网络通信提供安全及数据完整性保障,SSL在传输层中对网络通信进行加密。
SSL采用公开秘钥技术,保证两个应用间通信的保密性可可靠性,是客户与服务器应用之间的通信不被攻击中窃听,他在服务器和客户机两端可以同时被支持,目前已成为互联网上保留通讯的工业标准,现行的Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信,SSL协议其继任者是TLS。
后来IETF(www.ietf.org)将SSL做了标准化,即RFC2246,并将其成为TLS(Transport Layer Security),其最新版本是RFS 5246,版本1.2从技术上讲,TLS1.0与SSL3.0的差异非常微小。
TLS利用秘钥算法在互联网上提供端点身份认证通讯加密,其基础是公钥基础设置(public key infrastruture PKI)不过在实现的典型例子中,只有网络服务被可靠身份验证,其客户端则不一定,这是因为公钥基础设施普遍商业运营,电子签名证书通常需要付费购买,协议的设计在某种程度上能够使主从架构应用程序通讯本身预防窃听,干扰(rampering)和信息伪造。
加密通信原理过程¶
双向证书认证的SSL****握手过程:
以下简要介绍SSL协议的工作方式,客户端要收发几个握手信息:
1.发送一个"ClientHello"信息,内容包括:支持的协议版本,比如TLS1.0版,一个客户端生产的随机数(稍后用户生成"会话秘钥"),支持的加密算法(如RSA公钥加密)和支持的压缩算法。
2.然后收到一个"ServerHello"信息,内容包括:确认使用的加密通信协议版本,比如TLS1.0版本,如果浏览器与服务器支持的版本不一致,服务器关闭加密通信,一个服务器生成的随机数,稍后用于生成"对话秘钥"确认使用的加密方法,比如RSA公钥加密,服务器证书。
3.当双方知道了连接参数,客户端与服务器交换证书(依靠被选择的公钥系统,)这些证书通常基于X。509,不过已有草案支持以OpenPGP为基础的证书。
4.服务器请求客户端公钥,客户端有证书即双向身份认证,没证书时随机生成公钥
5.客户端与服务器通过公钥保密协商公钥的主私钥(双方随机协议),这通过精心谨慎设计的伪随机数功能实现,结果可能使用Diffe-Hellman交换,或简化的公钥加密,双方各自私钥解密,所有其他关键数据的加密均使用这个"主秘钥"
数据传输中记录层(Record layer)用于封装更高层的HTTP协议,记录层数据可以被随意压缩。
**OpenVPN**使用TLS加密是通过使用公开秘钥(非对称秘钥,加密解密使用不同的key,一个成为Public key,另一个是Private key)对数据进行加密的,对于TLS传输的工作原理,这里暂且先不介绍,对于OpenVPN使用TLS mode首先server和client要有相同的CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建议VPN连接,然后使用对方CA把自己目前使用的数据加密方法(类似于秘钥)加密后发送给对方,由于使用对方CA加密的,所以只有对方CA的Rrivate key才能解密该字串,保证了此秘钥的安全性,并且此秘钥定期改变,对于窃听者来说,可能还没有破解出秘钥,通信双方就已经更换秘钥了。
多种身份验证方式¶
OpenVPN提供了多种身份验证方式,用于确认参与连接双方的身份,包括,预想私钥,第三方整数以及用户名/密码组合等,预享秘钥最为简单,但同时它只能用于建议点对点的VPN,基于PKI的第三方整数提供了最完善的功能,但是需要额外的精力去维护一个PKI整数体系,OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端预享秘钥,但是仍有一份服务器CA证书需要被用作加密,比较好的验证方式还是LDAP或域控制器统一验证等。
实践准备环境¶
查看系统环境¶
系统的基础环境介绍:
[root@10-0-192-14 ~]# cat /etc/redhat-release #系统版本
CentOS Linux release 7.2.1511 (Core)
[root@10-0-192-14 ~]# uname -r #系统信息
3.10.0-327.el7.x86_64
[root@10-0-192-14 ~]# uname -m #系统位数
x86_64
配置时间同步¶
修改时区
cp /etc/localtime /etc/localtime.source.bak
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
配置时间同步
安装chrony
yum -y install chrony ntp
编辑chrony配置文件
[root@localhost ~]# vim /etc/chrony.conf
server ntp1.aliyun.com iburst
启动chrony服务
systemctl enable chronyd.service
systemctl start chronyd.service
验证ntp服务客户端是否同步时间正常
[root@localhost ~]# ntpstat
synchronised to NTP server (120.25.115.20) at stratum 3
time correct to within 49 ms
polling server every 64 s
生产环境实战部署(源码)¶
安装准备openvpn¶
建立openvpn软件存放目录
[root@vpnserver ~]# mkdir /home/oldboy/tools/openvpn -p
[root@vpnserver ~]# cd /home/oldboy/tools/openvpn/
上传完毕后的vpn软件如下:
[root@vpnserver openvpn]# ll
total 1476
-rw-r--r-- 1 root root 583045 Nov 16 21:34 lzo-2.06.tar.gz
-rw-r----- 1 root root 911158 May 9 2013 openvpn-2.2.2.tar.gz
提示:稳定版本推荐,lzo-2.02,,openvpn-2.0.9
安装lzo压缩模块
下载地址:http://www.oberhumer.com/opensource/lzo/download/
在安装opnvpn软件我们现在安装下载lzo压缩模块
yum -y install gcc gcc-c++
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar xf lzo-2.06.tar.gz
cd lzo-2.06
./configure
make && make install
开始安装openvpn¶
由于openvpn依赖与openssl这个服务,所以我们需要先检查是否有这个软件
[root@vpnserver openvpn]# yum -y install openssl*
[root@vpnserver openvpn]# rpm -qa openssl
openssl-1.0.1e-48.el6_8.1.x86_64
下载安装openvpn软件
下载地址:https://build.openvpn.net/downloads/releases/
wget https://build.openvpn.net/downloads/releases/openvpn-2.2.2.tar.gz
tar xf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib
make && make install
检查是否有openvpn这个命令,如果有则表示安装成功
[root@vpnserver openvpn]# which openvpn
/usr/local/sbin/openvpn
开始建立CA证书¶
初始化配置命令
cd /home/oldboy/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/
cp vars{,source.bak}
ll vars{,source.bak}
vim vars
#以下为默认配置
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_EMAIL=mail@host.domain
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
将其修改为如下配置
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="Beijing"
export KEY_ORG="oldboy"
export KEY_EMAIL="838997384@qq.com"
export KEY_EMAIL=838997384@qq.com
export KEY_CN=CN
export KEY_NAME=oldboy
export KEY_OU=oldboy
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
修改完vars文件后,执行source命令使其配置文件生效
[root@vpnserver 2.0]# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/oldboy/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/keys
然后根据提示执行
./clean-all 清除所有证书相关
./build-ca 生产CA证书
如遇到以下提示,输入oldboy,其他都是默认回车即可
Common Name (eg, your name or your server's hostname) [CN]:oldboy
最终会生产如下文件,则表示成功
[root@vpnserver 2.0]# ll ./keys/
total 12
-rw-r----- 1 root root 1314 Nov 16 22:04 ca.crt
-rw------- 1 root root 916 Nov 16 22:04 ca.key
-rw-r----- 1 root root 0 Nov 16 22:02 index.txt
-rw-r----- 1 root root 3 Nov 16 22:02 serial
生成服务端证书和秘钥key文件
[root@vpnserver 2.0]# ./build-key-server server
与上一步类似,其中"Common Name"项需要填写VPN服务器的FQDN,其他均可默认是default,还会出现"Sign the certficate[y/n]"和"I out of i certificate requests certified commit[y/n]都输入y然后回车"其他可参照如下
Country Name (2 letter code) [CN]: 国家
State or Province Name (full name) [BJ]: 省名
Locality Name (eg, city) [Beijing]: 城市名
Organization Name (eg, company) [oldboy]: 组织名
Organizational Unit Name (eg, section) [oldboy]: 单元名
Common Name (eg, your name or your server's hostname) [server]: 服务名
Name [oldboy]: 名称
Email Address [838997384@qq.com]: 邮箱默认
A challenge password []: 123456 证书请求的密码
An optional company name []:oldboy 可选的公司名称
Sign the certificate? [y/n]:y 确认你的输入
1 out of 1 certificate requests certified, commit? [y/n]y 是否提交
Write out database with 1 new entries
Data Base Updated
如果生成以下文件,则表示服务端证书生成成功
[root@vpnserver 2.0]# ll keys/server.*
-rw-r----- 1 root root 4002 Nov 16 22:14 keys/server.crt
-rw-r----- 1 root root 769 Nov 16 22:13 keys/server.csr
-rw------- 1 root root 916 Nov 16 22:13 keys/server.key
生成客户端证书和key文件
生成client证书和key文件,若建立多个客户证书,则重复如下步骤即可,只需修改Commom Name项oldboy的名称,
在openvpn中,这种配置方法是每一个登录的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有一个拨上的才能连通网络),所以,如果有多个人,每个人需要建议一份证书(建议一份证书多人使用的情况后面会说)
下面建议2份客户端证书,名称分别为test和ett,操作过程如下
生成一个普通的test用户的证书
[root@vpnserver 2.0]# ./build-key test
Country Name (2 letter code) [CN]: 国家
State or Province Name (full name) [BJ]: 省名
Locality Name (eg, city) [Beijing]: 城市名
Organization Name (eg, company) [oldboy]: 组织名
Organizational Unit Name (eg, section) [oldboy]: 单元名
Common Name (eg, your name or your server's hostname) [server]: 服务名
Name [oldboy]: 名称
Email Address [838997384@qq.com]: 邮箱默认
A challenge password []: 123456 证书请求的密码
An optional company name []:oldboy 可选的公司名称
Sign the certificate? [y/n]:y 确认你的输入
1 out of 1 certificate requests certified, commit? [y/n]y 是否提交
Write out database with 1 new entries
Data Base Updated
如果生成以下文件,则表示客户端端证书生成成功
[root@vpnserver 2.0]# ll ./keys/test.*
-rw-r----- 1 root root 3878 Nov 16 22:21 ./keys/test.crt
-rw-r----- 1 root root 769 Nov 16 22:21 ./keys/test.csr
-rw------- 1 root root 916 Nov 16 22:21 ./keys/test.key
生成一个带密码的用户ett
[root@vpnserver 2.0]# ./build-key-pass ett
Enter PEM pass phrase:123456 设置VPN拨号的密码
Verifying - Enter PEM pass phrase: 确认密码
Country Name (2 letter code) [CN]: 国家
State or Province Name (full name) [BJ]: 省名
Locality Name (eg, city) [Beijing]: 城市名
Organization Name (eg, company) [oldboy]: 组织名
Organizational Unit Name (eg, section) [oldboy]: 单元名
Common Name (eg, your name or your server's hostname) [server]: 服务名
Name [oldboy]: 名称
Email Address [838997384@qq.com]: 邮箱默认
A challenge password []: 123456 证书请求的密码
An optional company name []:ett 可选的公司名称
Sign the certificate? [y/n]:y 确认你的输入
1 out of 1 certificate requests certified, commit? [y/n]y 是否提交
Write out database with 1 new entries
Data Base Updated
如果生成以下文件,则表示客户端端证书生成成功
[root@vpnserver 2.0]# ll ./keys/ett.*
-rw-r----- 1 root root 3877 Nov 16 22:26 ./keys/ett.crt
-rw-r----- 1 root root 761 Nov 16 22:26 ./keys/ett.csr
-rw------- 1 root root 1041 Nov 16 22:26 ./keys/ett.key
生成vpn密钥协议交换文件
生成传输进行秘钥交换时用到的交换秘钥协议文件
./build-dh 不能落下不执行,否则出错
操作过程:
[root@vpnserver 2.0]# ./build-dh
如果生成以下文件,则表示密钥协议交换文件生成成功
[root@vpnserver 2.0]# ll ./keys/dh1024.pem
-rw-r----- 1 root root 245 Nov 16 22:29 ./keys/dh1024.pem
查看生成服务器及客户单的证书文件
生成的证书目录及文件如下:
[root@vpnserver 2.0]# pwd
/home/oldboy/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0 此步没结果是不对的
[root@vpnserver 2.0]# ll keys/
total 84
-rw-r----- 1 root root 4002 Nov 16 22:14 01.pem
-rw-r----- 1 root root 3878 Nov 16 22:21 02.pem
-rw-r----- 1 root root 3877 Nov 16 22:26 03.pem
-rw-r----- 1 root root 1314 Nov 16 22:04 ca.crt
-rw------- 1 root root 916 Nov 16 22:04 ca.key
-rw-r----- 1 root root 245 Nov 16 22:29 dh1024.pem
-rw-r----- 1 root root 3877 Nov 16 22:26 ett.crt
-rw-r----- 1 root root 761 Nov 16 22:26 ett.csr
-rw------- 1 root root 1041 Nov 16 22:26 ett.key
-rw-r----- 1 root root 358 Nov 16 22:26 index.txt
-rw-r----- 1 root root 21 Nov 16 22:26 index.txt.attr
-rw-r----- 1 root root 21 Nov 16 22:21 index.txt.attr.old
-rw-r----- 1 root root 240 Nov 16 22:21 index.txt.old
-rw-r----- 1 root root 3 Nov 16 22:26 serial
-rw-r----- 1 root root 3 Nov 16 22:21 serial.old
-rw-r----- 1 root root 4002 Nov 16 22:14 server.crt
-rw-r----- 1 root root 769 Nov 16 22:13 server.csr
-rw------- 1 root root 916 Nov 16 22:13 server.key
-rw-r----- 1 root root 3878 Nov 16 22:21 test.crt
-rw-r----- 1 root root 769 Nov 16 22:21 test.csr
-rw------- 1 root root 916 Nov 16 22:21 test.key
详解服务器及客户端的证书各文件用途
为防止恶意攻击(如DOS,UDP port flooding),我们生成一个"HAMC firewall"
[root@vpnserver 2.0]# openvpn --genkey --secret keys/ta.key
[root@vpnserver 2.0]# ll keys/ta.key
-rw------- 1 root root 636 Nov 16 22:59 keys/ta.key
生成证书吊销链文件,防止日后有人丢失证书,被非法用户接入VPN
#./make -crl vpncrl.pem(暂无)
大部分服务端的工具已完成,接下来的操作就是包证书拷贝到指定地点了
详解服务器端VPN重要命令
vars脚本是用来创建环境变量,设置所需要的变量的脚本
clean-all 脚本是创建生成ca证书即秘钥文件所需要的文件及目录
build-ca 脚本生成ca证书(需要交互)
build-key-server 脚本生成服务器端秘钥(需要交互)
build-key 脚本生成客户端秘钥(需要交互)
build-key-pass 脚本生成客户端带密码的秘钥(需要交互)
build-dh 脚本生成Diffe-Hellman文件(需要交互)
pkitool 脚本直接使用vars的环境变量设置,直接生成证书(非交互)
详解服务端VPNserver.conf重要参数
1.拷贝key及配置,把所有的keys和配置拷贝到/etc/openvpn目录下:
mkdir -p /etc/openvpn/
cd /home/oldboy/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/
cp -ap keys /etc/openvpn/
cd /home/oldboy/tools/openvpn/openvpn-2.2.2/sample-config-files/
cp server.conf /etc/openvpn/
以下为复制的配置文件
[root@vpnserver ~]# tree /etc/openvpn/
/etc/openvpn/
├── client.conf
├── client.conf.source.bak
├── keys
│?? ├── 01.pem
│?? ├── 02.pem
│?? ├── 03.pem
│?? ├── ca.crt
│?? ├── ca.key
│?? ├── dh1024.pem
│?? ├── ett.crt
│?? ├── ett.csr
│?? ├── ett.key
│?? ├── index.txt
│?? ├── index.txt.attr
│?? ├── index.txt.attr.old
│?? ├── index.txt.old
│?? ├── serial
│?? ├── serial.old
│?? ├── server.crt
│?? ├── server.csr
│?? ├── server.key
│?? ├── ta.key
│?? ├── test.crt
│?? ├── test.csr
│?? └── test.key
└── server.conf
修改默认的配置文件
[root@vpnserver ~]# cp /etc/openvpn/server.conf{,.source.bak}
[root@vpnserver ~]# ll /etc/openvpn/server.conf{,.source.bak}
-rw-r----- 1 root root 10288 Nov 16 23:14 /etc/openvpn/server.conf
-rw-r----- 1 root root 10288 Nov 16 23:14 /etc/openvpn/server.conf.source.bak [root@vpnserver ~]# cd /etc/openvpn/
查看配置文件的内容
[root@vpnserver openvpn]# grep "^[a-Z]" server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
a.生产环境配置server.conf配置键
企业生产环境server.conf配置案例
实际服务器端VPN配置文件server.conf配置
和默认配置相比,企业生产环境的配置改动如下:
[root@m01 ~]# cd /etc/openvpn/
[root@m01 openvpn]#
[root@vpnserver openvpn]# rm -f client.conf*
[root@vpnserver openvpn]# vim server.conf
[root@vpnserver openvpn]# grep "^[a-Z]" server.conf >tmp.log
[root@vpnserver openvpn]# cat tmp.log >server.conf 取消配置文件的注释
[root@vpnserver openvpn]# vi server.conf
#下面是生产环境中的配置
[root@vpnserver openvpn]# cat server.conf
local 42.123.124.113
port 52115
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
push "route 172.16.1.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
client-to-client
duplicate-cn
log /var/log/openvpn.log
调试服务端VPN服务启动环境
a.取消服务器上防火墙iptables对openvpn(默认1192,本例52115)的拦截,以及允许服务器进行内核转发
[root@vpnserver openvpn]# /etc/init.d/iptables status
iptables: Firewall is not running.
b开始内核转发功能CentOS6
sed -i "s#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g" /etc/sysctl.conf
grep "net.ipv4.ip_forward = 1" /etc/sysctl.conf
sysctl -p
开始内核转发功能CentOS7
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf && sysctl -p
检查是否生效
cat /proc/sys/net/ipv4/ip_forward
最好建议关闭防火墙,否则会影响实验。
selinux也需要关闭
启动服务openvpn¶
说明:知道启动openvpn的脚本将其放到/etc/init.d目录下
cd /home/oldboy/tools/openvpn/openvpn-2.2.2/sample-scripts/
cp openvpn.init /etc/init.d/openvpn
chkconfig --add openvpn
chkconfig --list openvpn
chmod +x /etc/init.d/openvpn
/etc/init.d/openvpn start
mv server.conf.source.bak /opt/
检查是否启动成功
[root@vpnserver ~]# netstat -ltnp|grep 52115
tcp 0 0 172.16.1.28:52115 0.0.0.0:* LISTEN 33425/openvpn
提示:如果openvpn目录下*.conf过多会导致启动问题
如何配置静态IP¶
1、OpenVPN对客户端仅支持255.255.255.252这样的子网掩码。在windows客户端下,可以敲
cd D:\Program files\OpenVPN\bin
openvpn.exe --show-valid-subnets
2、On Windows, point-to-point IP support (i.e. --dev tun)
is emulated by the TAP-Windows driver. The major limitation
imposed by this approach is that the --ifconfig local and
remote endpoints must be part of the same 255.255.255.252
subnet. The following list shows examples of endpoint
pairs which satisfy this requirement. Only the final
component of the IP address pairs is at issue.
As an example, the following option would be correct:
--ifconfig 10.7.0.5 10.7.0.6 (on host A)
--ifconfig 10.7.0.6 10.7.0.5 (on host B)
because [5,6] is part of the below list.
[ 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]
3、server.conf增加
client-config-dir ccd
4、/etc/openvpn/ccd/user增加
ifconfig-push 10.11.12.9 10.11.12.10
生产环境实战部署(YUM)¶
参考博文:https://www.jianshu.com/p/637b4123fc92
简单说明一下¶
网上多数的Openvpn例子都是基于客户端密钥认证的,多个客户那就要多个密钥,这样配置服务端或者客户端都非常麻烦。这里使用账号密码认证来配置,可以轻松实现多人登录使用VPN。
软件版本:
Centos - 7.4
easy-rsa - 3.0.6
OpenVPN - 2.4.7
开始安装软件¶
本文使用yum来安装openvpn,openvpn及其依赖的一些包在epel源上,首先先安装epel源。
#安装epel源
yum install -y epel-release
#安装依赖包
yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel
yum install -y easy-rsa
#安装openvpn
yum install -y openvpn
上面我们已经安装好了openvpn了,下面我们对openvpn进行配置
开始配置规划¶
使用路由还是桥接
建议使用路由,除非你有一些需要桥接的特定场景,例如:
- VPN需要能够处理非ip协议,如IPX
- 通过VPN运行应用程序,该VPN依赖于网络广播(如局域网游戏)
- 希望允许跨VPN浏览Windows文件共享,而无需设置Samba或WINS服务器
确定私有子网
Server 与 Client 的VPN通道子网,不要与已有环境的网络冲突即可。
默认:8.8.0.0/24
配置证书密钥¶
我们通过yum方式安装的 easy-rsa 版本是3.0.8,直接从安装路径copy一份工具出来。这里用默认的 easy-rsa 3.0.8 来配置生成证书密钥。
#复制easy-rsa工具
cp -rf /usr/share/easy-rsa/3.0.6 /etc/openvpn/server/easy-rsa
cd /etc/openvpn/server/easy-rsa
#生成证书密钥
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
#下面这步可能要几分钟
./easyrsa gen-dh
openvpn --genkey --secret ta.key
配置 Server 端¶
创建使用的目录
# 日志存放目录
mkdir -p /var/log/openvpn/
# 用户管理目录
mkdir -p /etc/openvpn/server/user
# 配置权限
chown -R openvpn:openvpn /var/log/openvpn
创建Server配置文件
编辑/etc/openvpn/server/server.conf
文件,并写入以下内容:
(也可以复制一份模板文件进行改写,模板文件路径 /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf
)
port 55555
proto tcp
dev tun
user openvpn
group openvpn
#配置证书信息
ca /etc/openvpn/server/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt
key /etc/openvpn/server/easy-rsa/pki/private/server.key
dh /etc/openvpn/server/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/server/easy-rsa/ta.key 0
#配置账号密码的认证方式
#auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
username-as-common-name
script-security 3
verify-client-cert none
client-to-client
duplicate-cn
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf %u"
#配置网络信息
server 8.8.0.0 255.255.255.0
#push "dhcp-option DNS 223.5.5.5"
#push "dhcp-option DNS 114.114.114.114"
push "route 192.168.1.0 255.255.255.0"
compress lzo
cipher AES-256-CBC
keepalive 10 120
persist-key
persist-tun
verb 3
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
创建用户密码文件
格式是用户 密码
以空格分割即可
echo 'chris 123456' >> /etc/openvpn/server/user/psw-file
chmod 600 /etc/openvpn/server/user/psw-file
chown openvpn:openvpn /etc/openvpn/server/user/psw-file
创建密码检查脚本
新建一个shell文件/etc/openvpn/server/user/checkpsw.sh
,内容如下:
#!/bin/sh
PASSFILE="/etc/openvpn/server/user/psw-file"
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
赋予可执行的权限
chmod 700 /etc/openvpn/server/user/checkpsw.sh
chown openvpn:openvpn /etc/openvpn/server/user/checkpsw.sh
防火墙配置¶
需要配置一条NAT的规则,这里我使用的是iptables,下面也有firewalld的示例:
iptables -t nat -A POSTROUTING -s 8.8.0.0/24 -o eth0 -j MASQUERADE
配置内核转发¶
需要默认开启系统的内核转发功能
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
开始启动服务¶
nohup openvpn /etc/openvpn/server/server.conf >/dev/null 2>&1 &
如何配置静态IP¶
1、OpenVPN对客户端仅支持255.255.255.252这样的子网掩码。在windows客户端下,可以敲
cd D:\Program files\OpenVPN\bin
openvpn.exe --show-valid-subnets
2、On Windows, point-to-point IP support (i.e. --dev tun)
is emulated by the TAP-Windows driver. The major limitation
imposed by this approach is that the --ifconfig local and
remote endpoints must be part of the same 255.255.255.252
subnet. The following list shows examples of endpoint
pairs which satisfy this requirement. Only the final
component of the IP address pairs is at issue.
As an example, the following option would be correct:
--ifconfig 10.7.0.5 10.7.0.6 (on host A)
--ifconfig 10.7.0.6 10.7.0.5 (on host B)
because [5,6] is part of the below list.
[ 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]
3、server.conf增加
client-config-dir ccd
4、/etc/openvpn/ccd/user增加
ifconfig-push 10.11.12.9 10.11.12.10
对接LDAP认证¶
参考博文:https://blog.csdn.net/ethnicitybeta/article/details/122712907
一、安装插件
yum -y install openvpn-auth-ldap
二、配置openvpn的server.conf
注释如下行:
#auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
添加如下行配置:
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf %u"
三、ldap.conf文件配置
<LDAP>
URL ldap://192.168.1.104:389
BindDN cn=admin,dc=bkce,dc=com
Password 123456
Timeout 15
TLSEnable no
FollowReferrals no
</LDAP>
<Authorization>
BaseDN "dc=bkce,dc=com"
SearchFilter "uid=%u"
RequireGroup false
# <Group>
# BaseDN "dc=bkce,dc=com"
# SearchFilter "(objectclass=groupOfUniqueNames)"
# SearchFilter "(&(uid=%u)(accountStatus=active))"
# MemberAttribute uniqueMember
# </Group>
</Authorization>
配置客户端¶
客户端我们同样使用2.4.7的版本,下载点我
因为我们前面配置的是账号密码认证,所以我们只需要下载ca.crt、ta.key文件即可,从server上将生成的ca.crt
、ta.key
下载到客户端的安装目录 config下。
在config目录下新建一个文件 client.ovpn,文件内容如下:
client
proto tcp
dev tun
auth-user-pass
remote 10.1.0.100 55555
ca ca.crt
tls-auth ta.key 1
remote-cert-tls server
cipher AES-256-CBC
auth-nocache
persist-tun
persist-key
compress lzo
verb 3
mute 10
生产环境实战部署(快速)¶
软件环境准备¶
链接: https://pan.baidu.com/s/1kGvkK8yIhMCcwek-coYUCQ 提取码: qqjl
将所需软件包上传至/root目录下
[root@linux-bkce-node100 ~]# ll
total 40
-rw------- 1 root root 1645 Feb 12 20:54 client.tar.gz
-rw------- 1 root root 33527 Feb 12 22:15 server.tar.gz
开始安装软件¶
#安装依赖包
yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel easy-rsa
#安装openvpn
yum install -y openvpn vim openvpn-auth-ldap
开始进行配置¶
解压软件包到指定目录
tar xf server.tar.gz -C /etc/openvpn/
开始配置openvpn server端配置文件
# cd /etc/openvpn/server/
# cat /etc/openvpn/server/server.conf
port 55555
proto tcp
dev tun
user openvpn
group openvpn
#配置证书信息
ca /etc/openvpn/server/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt
key /etc/openvpn/server/easy-rsa/pki/private/server.key
dh /etc/openvpn/server/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/server/easy-rsa/ta.key 0
#配置账号密码的认证方式
auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
username-as-common-name
script-security 3
verify-client-cert none
client-to-client
duplicate-cn
#plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf %u"
#配置网络信息
server 8.8.0.0 255.255.255.0
#push "dhcp-option DNS 223.5.5.5"
#push "dhcp-option DNS 114.114.114.114"
push "route 192.168.1.0 255.255.255.0"
compress lzo
cipher AES-256-CBC
keepalive 10 120
persist-key
persist-tun
verb 3
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
创建初始化目录¶
# 日志存放目录
mkdir -p /var/log/openvpn/
# 用户管理目录
mkdir -p /etc/openvpn/server/user
# 配置权限
chown -R openvpn:openvpn /var/log/openvpn
chown -R openvpn:openvpn /etc/openvpn/server/
防火墙配置¶
需要配置一条NAT的规则,这里我使用的是iptables,下面也有firewalld的示例:
iptables -t nat -A POSTROUTING -s 8.8.0.0/24 -o eth0 -j MASQUERADE
配置内核转发¶
需要默认开启系统的内核转发功能
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
保持连接的配置¶
1.自动保持连接:OpenVPN在服务器和客户端都有一个参数 reneg-sec n,该参数是指n秒钟之后重新验证key。默认值为3600s,该参数值以服务器和客户端的最小reneg-sec为最终决定重新验证的时间。例如:如果服务器上设定了3000s,即使你客户端设置30000s,最终重新验证key值仍是3000s。因此,如果你使用的服务器没有权限修改服务器断的reneg-sec这个参数值的话,那就别折腾了,无论如何都需要每小时重新验证一次的。若是有权限修改服务器参数,那就很棒了,服务器和客户端的值随便你自己的需求进行设置了。
2.保存用户名和密码:每次到了reneg-sec的时间,需要重新验证身份。如果你是使用“用户名和密码认证”的话,那么每次认证都需要重新输入用户名和密码,这个也比较烦人。不过修改下安装目录config文件下的client.ovpn文件,就可以做到不需要手动的输入用户名和密码了。在client.ovpn下,修改auth-user-pass 为auth-user-pass "C:\Program Files (x86)\OpenVPN\config\mypass.txt",其中“mypass.txt”里面是你的用户名和密码(第一行用户名,第二行密码,用户名和密码的后面/前面都不要加入任何空格或者tab键), "C:\Program Files (x86)\OpenVPN\config\mypass.txt"是你存放用户名和密码的地方。请注意这里的路径格式,我自己试过的,这个格式可用,网上其他的格式我配置后OpenVPN GUI无法连接到服务器。
reneg-sec 0
开始启动服务¶
nohup openvpn /etc/openvpn/server/server.conf >/dev/null 2>&1 &
检查服务器状态¶
[root@linux-bkce-node100 ~]# ps -ef|grep openvpn
root 10729 10713 0 22:32 pts/1 00:00:00 tailf /var/log/openvpn/server.log
openvpn 10777 10510 0 22:33 pts/0 00:00:00 openvpn /etc/openvpn/server/server.conf
root 10798 10510 0 22:33 pts/0 00:00:00 grep --color=auto openvpn
[root@linux-bkce-node100 ~]# ss -ltnp|grep 55555
LISTEN 0 32 *:55555 *:* users:(("openvpn",pid=10777,fd=7))
设置开机自启¶
chmod +x /etc/rc.d/rc.local
echo "nohup openvpn /etc/openvpn/server/server.conf >/dev/null 2>&1 &" >>/etc/rc.d/rc.local
对接LDAP认证¶
一、安装插件
yum -y install openvpn-auth-ldap
二、配置openvpn的server.conf
注释如下行:
#auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
添加如下行配置:
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf %u"
三、ldap.conf文件配置
<LDAP>
URL ldap://192.168.1.104:389
BindDN cn=admin,dc=bkce,dc=com
Password 123456
Timeout 15
TLSEnable no
FollowReferrals no
</LDAP>
<Authorization>
BaseDN "dc=bkce,dc=com"
SearchFilter "uid=%u"
RequireGroup false
# <Group>
# BaseDN "dc=bkce,dc=com"
# SearchFilter "(objectclass=groupOfUniqueNames)"
# SearchFilter "(&(uid=%u)(accountStatus=active))"
# MemberAttribute uniqueMember
# </Group>
</Authorization>
生产环境实战部署(公网)¶
释放清理内存¶
echo 3 > /proc/sys/vm/drop_caches &>/dev/null
free -h
防火墙配置¶
需要配置一条NAT的规则:
systemctl stop firewalld && systemctl disable firewalld
iptables -t nat -A POSTROUTING -j MASQUERADE
yum -y install iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl start iptables ; systemctl enable iptables
iptables -t nat -S
配置内核转发¶
需要默认开启系统的内核转发功能
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
开始进行安装¶
开始进行安装测试
wget https://chrismyfile.oss-cn-beijing.aliyuncs.com/openvpn-public.tar.gz
tar xf openvpn-public.tar.gz
cd openvpn-public
yum -y localinstall openvpn-2.3.14-1.el7.x86_64.rpm pkcs11-helper-1.11-3.el7.x86_64.rpm
cp -rf openvpn /etc/
服务端配置文件
[root@localhost ~]# cat /etc/openvpn/server.conf
local 0.0.0.0
port 60001
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/2.0/config/ca.crt
cert /etc/openvpn/easy-rsa/2.0/config/server.crt
key /etc/openvpn/easy-rsa/2.0/config/server.key
dh /etc/openvpn/easy-rsa/2.0/config/dh2048.pem
server 192.168.80.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
duplicate-cn
status /etc/openvpn/rsyslogs-status.log
log /etc/openvpn/rsyslogs.log
log-append /etc/openvpn/rsyslogs.log
verb 3
script-security 3 system
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
;client-cert-not-required
username-as-common-name
reneg-sec 0
开始启动服务¶
启动openvpn服务
openvpn /etc/openvpn/server.conf &
ss -ltnp
设置openvpn服务开机自启
chmod +x /etc/rc.d/rc.local
echo "nohup openvpn /etc/openvpn/server.conf >/dev/null 2>&1 &" >>/etc/rc.d/rc.local
服务器安全设置¶
首先设置服务器免密码登录,然后关闭服务器密码登录,防止被暴力破解
sed -i "s#PasswordAuthentication yes#PasswordAuthentication no#g" /etc/ssh/sshd_config
systemctl restart sshd
客户端使用手册(用户)¶
安装说明¶
本文档附件说明:
beijing_room_private.zip #OpenVPN的连接配置文件
openvpn-install-2.3.6-I603-x86_64.exe #OpenVPN的客户端
可以连接的网段:
172.18.211.0/24 管理网络
192.168.30.0/24 员工网络
客户端安装¶
1.我们将附件中的openvpn-install-2.3.6-I603-x86_64.exe 程序右击管理员运行,开始安装OpenVPN的客户端。
提示:这里一定要选择管理员权限运行,不然会导致安装完成,连接的时候会报如下错误:
*Error windows route add command failed的错误。*
2.点击Next
2.选择我同意协议 I Agree
3.保持默认,点击Next继续
4.这里建议保持默认的安装地址,点击Install安装
5.下面是安装的过程
6.稍等一下,安装完成以后会出现下面界面,点击Next继续
7.点击完成安装
8.当我们安装完成以后会在桌面出现一个OpenVPN GUI的图标,就表示安装完成
客户端连接¶
9.找到附件beijing_room_private.zip,将其复制到OpenVPN的安装路径下的config目录下
OpenVPN的默认安装路径为:C:\Program Files\OpenVPN\config/
10.然后解压beijing_room_private.zip压缩包
11.点击桌面上的OpenVPN GUI的图标,选择以管理权限运行
12.当OpenVPN客户端运行以后会在桌面的右下角有个小图标,右击选择Connet连接
输入给你分配的账户与密码
13.下面是连接过程
14.当连接成功以后会提示如下信息
15打开windows系统的cmd命令行,ping 192.168.30.0/24网段的IP测试使用连接成功
16.到了这里我们的OpenVPN客户端就连接成功啦!
密码默认保存¶
当你使用openvpn的时候每次都需要输入账户密码会比较麻烦,我们可以设置将自己的账户密码保存到指定的文件中即可实现,每次拨号都能自己验证账户密码
1.请将beijing_room_private.ovpn文件中#auth-user-pass pass.txt此行取消注释
2.然后编辑pass.txt文件在里面写入你的账户密码,格式如下
备注:上面一行是注释,下面一行是密码,格式一定要对,不然会报错
同时连接多个¶
Windows7客户端¶
参考博文 https://blog.rj-bai.com/post/79.html
昨天上的那一套业务,和之前用的云提供商一样,都是ucloud,都是在北京地域,但是不在一个可用区,一个在B区,一个在C区,现在就出现了一个很尴尬的问题,之前的VPN要连接新上的那一套系统,根本连接不上,B和C区的内网不互动,本想新上的区域VPN用pptp的,搭出来了后发现不是很稳定,经常掉线重播,日。最后决定还是继续用openvpn吧,但是又抛出一个问题,就是openvpn的配置文件有两套,而客户端不做点特殊配置根本无法同时连接两套,会出现以下异常。提示设备已在使用,由于下午在折腾服务器,没管这个,是开发一大神解决的,分享一下。
首先需要把两套证书及配置文件分出来,修改配置文件,如图,要写相对路径,把证书一系列的东西全部移到所对应的文件夹下面,客户端2以此类推,配置文件放在config的根目录,不要说你看不懂。
改完之后打开openvpn客户端,会发现变成这样
下一步win+R调出运行,输入以下路径,回车
C:\Program Files\TAP-Windows\bin
退出后开始连接吧,如果有三套证书,就再添一个,以此类推
Windows10客户端¶
http://blog.csdn.net/willspace/article/details/50353774
因为程序在安装的时候默认只会添加一个【虚拟网卡】所以想办法再弄一个出来,GG搜一搜很容易就可以找到解决方案。
右击【以管理员身份运行】
然后你就可以看到多了一个适配器
我给他取名【虚拟网卡 2】(其实叫啥都行,不重复就可以)
\7. 最后试试重连两个VPN
遇到的错误¶
*错误1:openvpn报错信息 Error windows route add command failed解决方式*
解答:这是在Vista/Win7/Win2003Win2008等系统中没有用管理员权限安装及启动OpenVPN GUI造成的,OpenVPN进程没有相应权限修改系统路由表。解决方法是重新用管理员权限安装OpenVPN,并在启动OpenVPN GUI时右键选择使用管理员权限打开。