准备
四台机子

家里的win10 pc电脑作为client
公司的win7 pc电脑作为server服务器
公司的另一台win7电脑作为client1
公司的centos7服务器,部署了mysql服务

网络结构如下


安装
64位下载openvpn-install-2.3.12-I602-x86_64.exe
32位下载openvpn-install-2.3.12-I602-i686.exe
百度网盘
https://pan.baidu.com/s/1eSm2cc6


作为服务器端需要勾选这两个,客户端不需要

然后启动OpenVPN GUI

服务端配置
证书密钥制作
cmd切换到安装目录easy-rsa下,依次执行

#初始化环境配置
init-config
#复制配置
vars
#清除keys目录下所有证书
clean-all
#生成根证书ca.crt和根密钥ca.key,生成证书过程中基本保持默认即可,一路按回车键即可,到提示输入common name时,输入特定标识,如server端可以叫server,server1等等,客户端可以叫client1,client2,目的就是作为虚拟局域网中的身份识别,所以不要重复
build-ca
#创建迪菲·赫尔曼密钥,会生成dh1024.pem文件
build-dh
#生成服务端密钥:大多数参数可以保持默认值,一路回车,common name要输入,最后两个回答的问题都输入y即可。
build-key-server server
#生成客户端密钥:大多数参数可以保持默认值,一路回车,common name要输入,最后两个回答的问题都输入y即可。
build-key client
。。。
build-key client1 #创建client1客户端密钥
build-key clientwm5920 #创建clientwm5920 客户端密钥

拷贝配置
将keys文件夹下的
ca.crt
ca.key
dh1024.pem
server.crt
server.csr
server.key
拷贝到config文件夹下

创建配置文件server.ovpn
内容如下

# 服务器对外暴露的端口
port 443
# 传输协议,tcp貌似不行,我没成功过,还是udp吧
proto udp
# 路由模式
dev tun
# 证书
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
# 分配的ip范围
server 10.8.0.0 255.255.255.0
# 在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
ifconfig-pool-persist ipp.txt
# 使客户端能相互访问
client-to-client

# 如果多个客户端可能使用相同的证书/私钥文件或Common Name进行连接,那么你可以取消该指令的注释。
# 建议该指令仅用于测试目的。对于生产使用环境而言,每个客户端都应该拥有自己的证书和私钥。
# 如果你没有为每个客户端分别生成Common Name唯一的证书/私钥,你可以取消该行的注释(但不推荐这样做)。
;duplicate-cn

# 心跳检测
keepalive 10 120


# 在VPN连接上启用压缩。
# 如果你在此处启用了该指令,那么也应该在每个客户端配置文件中启用它。
comp-lzo


# 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun

# 输出一个简短的状态文件,用于显示当前的连接状态,该文件每分钟都会清空并重写一次。
status openvpn-status.log

# 为日志文件设置适当的冗余级别(0~9)。冗余级别越高,输出的信息越详细。
#
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。
verb 3

然后通过gui connect即可,成功后会颜色会变成绿色,并能通过ipconfig查到分配的ip地址10.8.0.1


view log查看日志
edit config编辑server.ovpn
show Status显示运行窗口


客户端配置
安装
运行openvpn-install-2.3.12-I602-x86_64.exe

拷贝文件
将keys文件夹下的
ca.crt
ca.key
dh1024.pem
client.crt
client.csr
client.key
拷贝到客户端主机安装目录config文件夹下

创建客户端配置文件client.ovpn
内容如下

client
dev tun
proto udp
# 换成自己的外网地址
remote 58.x.x.x 443
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
# 这个指令是提示客户端连接输入密码的
# auth-user-pass
reneg-sec 360000


然后connect即可,成功后也会得到一个ip地址,这时候服务的和客户端可以通过虚拟ip互ping成功了

通过配置端口转发访问linux上的数据库,svn等
其实可以通过在linux上安装open vpn客户端的,我想偷懒,通过win7上的客户端转发进行访问

配置client1,监听3307端口,然后转发到202的mysql端口3307,配置如下
在cmd中执行

netsh interface portproxy add v4tov4 listenport=3307 connectaddress=192.168.2.202 connectport=3307


备注

删除
netsh interface portproxy delete v4tov4 listenport=3307
查看
netsh interface portproxy show all

这时候在家里就可以用10.8.0.10:3307连接到公司202的数据库了,其实如果10.8.0.1服务器如果能成功执行转发命令就可以不用再用client1的,可是当我执行的时候提示 拒绝访问 ,不知道具体原因

注意
cmd命令要以管理员权限运行
拷贝密钥时,要把文件夹权限设置为完全控制,不然不能复制
---------------------
作者:球球之家
来源:CSDN
原文:https://blog.csdn.net/wm5920/article/details/78771796
版权声明:本文为博主原创文章,转载请附上博文链接!