OpenVPN之Window端搭建
1.前言
我曾经写过一篇为了科学上网而总结的各种免费和付费的vpn技术(Post not found: 科学上网之VPN 科学上网之VPN),那一片主要用来介绍的是科学上网,还有一篇是Teamviewer自建VPN连接两个网络 是为了从家里的网络,连接到公司的内网中,本篇文章,也是这个主旨,就是为了构建一个虚拟专用网,通过VPN将内网和阿里云的网络连接到一起,成为一个统一的内网系统。
1.VPN网关 (阿里云也提供了相应的VPN产品,除了贵一点,其他的都好说啊)
2.Linux 搭建OpenVPN服务器和客户端(一)——最简配置 (在linux上实现的OpenVPN客户端和服务端)
3.Windows 10 平台搭建 OpenVPN
4.WINDOWS+OPENVPN服务器的架设
5.Windows防火墙开启ping,禁ping的配置方法 (Windows Server 2008中配置Windows防火墙,控制面板–>安全–> Windows防火墙–> 更改设置->例外 –> 在列表里找到“文件和打印机共享” –> 将前面的勾选中,启用规则)
6.OpenVPN 是什么?【附作用|下载/教程|配置|协议解析等】
1.下载
官方给出的地址,让我有点懵,就是没有windows版本的下载安装包,有一个Hypery-V的安装包,我觉得两者应该不一样,最后是在社区下载的安装包。
1.OpenVPN Windows 平台安装部署教程 (这篇文章的排版比较好看)
2.安装
有了安装包,双击安装就可可以,但是实际上,比较费事都就是配置。因为是要在Server2008 Standard版本上安装,所以我选择了OpenVPN 2.4.6版本。安装之后,我第一次打开OpenVPN GUI,弹出一个提示,就是使用导入功能,导入一个配置文件,我还是挺懵的,和参考文章中的一点不一样啊。
刚开始,我没有找到参考文章中说的那个easy-rsa文件夹,于是我卸载了,又重新安装,才发现,默认的OpenVPN安装界面,没有选中easy-rsa这个选项
1.OpenVPN客户端(Windows/Linux/MacOS)连接OpenVPN服务器 (.crt、.key、ca.crt证书文件可以内嵌到ovpn文件中,因此有时候会只有一个ovpn文件)
2.Windows下openVPN GUI的安装与配置 (和我安装的OpenVPN不一样,我没有C:\Program Files\OPENVPN\easy-rsa\vars.bat.sample 文件)
3.Setting up an Open VPN server on Windows Server 2008/2012 (在Sever2008中安装和配置OpenVPN,都是英文的)
3.初始化
1 | cd "C:\Program Files\OpenVPN\easy-rsa" |
4.vars.bat
编辑C:\Program Files\OpenVPN\easy-rsa\vars.bat文件(linux端的安装路径:/usr/share/easy-rsa/),多数文章中都是只有下面的一些配置参数,其实还有PKCS11_MODULE_PATH、PKCS11_PIN两个参数,但是具体去查这两个参数的含义,有人说可以忽略。
1 | set KEY_COUNTRY=US |
1.Can someone please explain easyrsa vars options for PKI generation (我猜你使用的是easy-rsa;如果你没有设置这些变量,当你运行工具生成证书时,它会向你询问这些变量。)
2.OpenVPN: What are the “PKCS11_MODULE_PATH” and “PKCS11_PIN” variables? (如果你不需要PKCS11_MODULE_PATH、PKCS11_PIN这些参数,可以忽略)
5.执行清理任务
1 | cd "C:\Program Files\OpenVPN\easy-rsa" |
进入到easy-rsa目录,以后所有的命令行操作,都在这个目录中运行。这样初始化工作就结束了,以后需要执行vars.bat命令,才能继续生成客户端和服务端密钥。
6.生成根证书
1 | build-ca.bat |
根据出现的提示,您只需按Enter。唯一的例外是KEY_CN(公用名)字段-请确保指定一个唯一的名称,并在“名称”字段中插入相同的名称:
7.生成服务端密钥
1 | .\build-key-server.bat server |
现在将询问所有生成的密钥,是否代表证书颁发机构对生成的证书进行签名(对证书签名)。回答y(是)。
8.生成客户端密钥
1 | .\build-key.bat client1 |
在“通用名称”字段中,指定客户端的名称(在我们的示例中为client1)。
9.复制文件
(1) 生成的证书位于C:\ Program Files \ OpenVPN \ easy-rsa \ keys目录中,将下面列出的文件复制到目录C:\ Program Files \ OpenVPN \ config 文件夹中。
- ca.crt
- dh2048.pem/dh1048.pem
- server.crt
- server.key
(2) 默认配置文件在:C:\Program Files\OpenVPN\sample-config中,将下面列出的文件复制到目录C:\ Program Files \ OpenVPN \ config 文件夹中。
- server.ovpn
- client.ovpn
10.修改服务端配置
打开C:\ Program Files \ OpenVPN \ config\service.ovpn文件,修改下面的内容:
1 | port 443 # 端口号,根据需要,自行修改,如果是用http代理连接,请不要修改 |
11.客户端安装
客户端安装OpenVPN软件,然后复制以下文件
(1) 将服务器生成的客户端密钥ca.crt client1.crt client1.key三个文件,复制到客户端的C:\Program Files\OpenVPN\config文件夹中。
(2) 复制客户端的C:\Program Files\OpenVPN\sample-config\client.ovpn到C:\Program Files\OpenVPN\config文件夹。
12.修改客户端配置文件
1 | dev tun |
1.OpenVPN客户端配置
13.连接
打开OpenVPN GUI,然后在右下角的图标中右键选择连接。在连接时需要注意以下几点:
(1) 客户端的remote是否配置正确,端口号,网络地址是否能通过端口扫描。
(2) 客户端的proto是否和服务器配置一致,最好是tcp协议,因为使用udp,我没有成功。
如果还是有问题,请参考下面几个问题总结。
问题
(1) –cipher set to ‘AES-256-CBC’ but missing in –data-ciphers (AES-256-GCM:AES-128-GCM). Future OpenVPN version will ignore –cipher for cipher negotiations. Add ‘AES-256-CBC’ to –data-ciphers or change –cipher ‘AES-256-CBC’ to –data-ciphers-fallback ‘AES-256-CBC’ to silence this warning
服务器是OpenVPN 2.4,客户端时是2.5,换成一样的版本尝试。
1.OpenVPN client no longer connects, cipher not recognized and missing in –data-ciphers (You’re using OpenVPN 2.5 which ONLY allows AES-256-GCM AES-128-GCM by default. The config files provided by PIA only set up CBC ciphers.You need to either fall back to OpenVPN 2.4, or follow the directions in the error message and change your configuration and explicitly enable the CBC ciphers.)
(2) –tls-auth fails with ‘ta.key’: No such file or directory (errno=2)
有两种解决方法,找到客户端的client.ovpn文件,将其中的 tls-auth注释掉,
1 | # tls-auth ta.key 1 |
或者是生成ta.key文件,然后指定ta.key的位置(这个我没试)
1 | openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key |
1.Open VPN options error: –tls-auth fails with ‘ta.key’: no such file or directory (drop the tls-auth instruction altogether. This is not a major dent in your security: the Manual in fact states)
(3) TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
我尝试了用端口扫描工具,扫描阿里云的端口开放程度,发现1194端口没有开放,但是在查询进程的时候,发现1194端口已经由openvpn.exe在使用了。
1 | ## 查看端口进程 |
我将防护墙关闭,重新扫描端口开启,还是出现了关闭问题。
我在阿里云的安全组中,将端口加入进去,还是出现了问题。
解决方法
最后,我将server端的proto改为了tcp模式,配置的阿里云安全组以及防火墙都生效了,然后将客户端的proto和remote改为服务器的相应配置,最后实现了openvpn连接
1.TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) (这里几条情况,说明可能是由于网络不通)
2.Windows下查看端口占用情况
3.添加安全组规则
(4) openvpn all tap-windows adapters on this system are currently in use
解决方式一:禁用,再启用
在windows 2008上,打开网络和共享中心->管理网络连接,找到TAP-Windows Adaper,先右键禁用,然后再启用。
解决方式二:重新安装
C:\Program Files\TAP-Windows,卸载,然后重新安装。
这两个方案我都尝试过了,没有重启电脑,都不行。
解决方法
最后解决方法,就是在系统服务中,将我启动的OpenVPNService和OpenVPN Legacy Service两个服务停掉,就可以了。
1.OpenVPN Error: All TAP-Windows adapters on this system are currently in use
2.All TAP-Windows adapters on this system are currently in use (也是上面提供的两种方式进行修复)
(5) –explicit-exit-notify can only be used with –proto udp
当我配置proto tcp的时候,弹出这个错误,只能用udp。
解决方法:把server.ovpn中的:explicit-exit-notify 1,注释掉。
14.端口转发
(1) 在我成功将内外网联通之后,服务器的ip为:10.0.0.1,客户端的ip为:10.0.0.6。我执行了ping操作,从客户端ping服务端,以及从服务端ping客户端都可以访问。
(2) 另外,我在客户端安装了hmailserver服务器,开放了25和110端口,我使用telnet 10.0.0.6 25 在客户端上查看端口是否开放,发现有回应,也就是说客户端的邮件服务器正常运行。但是在服务器端同样尝试这个命令,却没有回应,说明服务器和客户端没有联通。
(3) 同样的,我在服务端开启了3306端口以及9201端口,在客户端使用:telnet 10.0.0.1 9201,以及telnet 10.0.0.1 3306,都可以连接上,也就是说,只能一方通行,从客户端可以访问服务端,但是无法从服务端访问客户端。
(4) 为了测试,我使用teamviewer提供的vpn选项连接了内外网,在服务器端使用telnet查看安装了邮件服务器的客户端25端口时,也有了正确的回应,问题就是出在了openvpn的设置中。但是根据telnet的说明:
If the port is Open, you will see a blank screen. This means that the connection is successful.(如果端口开放了,你将会看到一个黑屏,意味着你已经连接成功了。)
If the port is closed, you will receive a Connect failed message. (如果端口没有开放,你将收到一个连接失败的提示)
所以我在服务端,随便测试一个端口:telnet 10.0.0.6 89,确实不通,也就是说,25端口开放了,但是没有回应任何信息。
(5) 在内网openvpn客户端有一个80端口,部署了IIS网站,在openvpn服务端可以直接输入在浏览器地址栏中输入:10.0.0.6 访问客户端的网站。
1.openvpn实现内网 映射到 外网 (先是在linux系统上创建了openvpn链接了内外网,然后是使用了iptables进行了端口转发)
2.OpenVPN搭建管道为内网地址映射公网端口
3.烂泥:openvpn tun模式下客户端与内网机器通信
4.利用云服务器通过OpenVPN将内网的地址发布到外网 (除了介绍了端口转发之外,还介绍了如何搭建openvpn连接虚拟专用网)
5.ArticlesHow to use Telnet (to Check the Status of Ports) (如何判读是否连接成功)