OpenVpn 搭建虚拟局域网服务 Windows篇
由于业务需要,现要异地组网,查了很多资料都是要硬件支持。
openvpn只需要软件就可以搭建虚拟局域网,
下面把搭建方案和遇到的坑记录一下,方便以后查阅。
一、准备&安装
软件的下载地址如下:
32位:http://www.npackd.org/p/openvpn
64位:http://www.npackd.org/p/openvpn64
版本的话随便选择,我这里是win10,选择的是2.4.9
下载下来后安装,安装的时候勾选图中选项
安装完成后系统会多出一张网卡TAP的 本地连接
二、部署服务端
1.证书生成
这个自己得买个服务器,需要公网ip支持(测试腾讯轻量应用服务器可用)
在服务器上安装openvpn
安装完成后找到openvpn的安装目录进到easy-rsa目录下 比如 C:\Program Files\OpenVPN\easy-rsa
修改文件 vars.bat.sample 根据需求修改相关配置信息
set KEY_COUNTRY=CN #国家
set KEY_PROVINCE=GANSU #地区
set KEY_CITY=LANZHOU #城市
set KEY_ORG=OPENVPN #组织
set KEY_EMAIL=1@qq.com #邮箱
set KEY_CN=TEST
set KEY_NAME=TEST
set KEY_OU=TEST
set PKCS11_MODULE_PATH=TEST
set PKCS11_PIN=1234
后面那几个是啥就不知道了 反正随便填上都没错
接下来在easy-rsa目录按住shift键 右击打开命令行,输入以下指令:
一步一步来~
C:\Program Files\OpenVPN\easy-rsa>init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
已复制 1 个文件。
C:\Program Files\OpenVPN\easy-rsa>vars.bat
C:\Program Files\OpenVPN\easy-rsa>clean-all.bat
系统找不到指定的文件。
已复制 1 个文件。
已复制 1 个文件。
生成CA证书
build-ca.bat
build-ca的时候需要输入一些注册信息。在输入信息的时候,如果你不输入任何信息,就表示采用默认值(前面[]中的内容就是默认值)
生成 dh
build-dh.bat
build-dh.bat # 生成 dh2048.pem 文件,Server 使用 TLS(OpenSSL) 必须要有的文件
此处有个坑得越一下,默认dh成后是1024,这样导致客户端连接失败报错 OpenSSL certificate md too weak
解决办法:
修改easy-rsa目录下openssl-1.0.0.cnf文件,找到default_md = md5 修改md5为sha1(新版本可能不需要修改)仅限出现此问题操作
修改easy-rsa目录下vars.bat.sample文件,找到set DH_KEY_SIZE=1024修改成2048
为啥呢?是因为ssl已经放弃了md5加密方式 要用更复杂得sha1加密方式。新版本应该没有此问题出现,还有我当时测试得客户端和服务端不是同一个版本。
参考资料:https://bugs.launchpad.net/ubuntu/+source/gadmin-openvpn-server/+bug/1821111参考资料:https://bugs.launchpad.net/ubuntu/+source/gadmin-openvpn-server/+bug/1821111
创建服务器端证书:build-key-server server
build-key-server server # 生成服务端密钥和证书
# server 是自己定义的参数名,与上相应的就会生成 server.key、server.csr 和 server.crt,也都是保存在 keys 目录里。
# 这一步像 build-dh.bat 一样有些东西要填写,之后就是该回答 y 的 y 一下,关键就一个:
# 要生成多个服务端的密钥和证书则继续 build-key-server server02 ......
标红的地方一定要输入
ps:密码可不用输入
如上图所示,命令中的参数server指的是生成的证书文件名称,你可以按照自己的需要进行修改,不过后面的Common Name也应保持一致。第二个红色矩形框中是输入的密码,你也可以根据意愿自行输入。最后程序会询问你是否注册并提交证书,两次均输入y即可。
创建客户端证书:build-key client
与build-key-server一样要输入一堆东西,这里注意的是 Common Name 不能与执行 build-key-server 时输入的一样,
要生成其他的客户端密钥和证书,可以继续
build-key client02
生成ta.key:..\bin\openvpn --genkey --secret keys\ta.key
这一步其实是可选操作,生成的ta.key主要用于防御DoS、UDP淹没等恶意攻击。命令中的第3个参数keys/ta.key表示生成的文件路径(含文件名)。
生成后文件夹下产生如下文件:
2.服务端配置
把配置文件server.ovpn放到C:\Program Files\OpenVPN\config目录下
把C:\Program Files\OpenVPN\easy-rsa\keys目录下的ca.crt、ca.key、server.crt、server.csr、server.key、dh2048.pem、ta.key 复制到C:\Program Files\OpenVPN\config目录下。
创建server.ovpn 放在C:\Program Files\OpenVPN\config目录下
server.ovpn的文件内容如下。请根据需要进行调整。
local 0.0.0.0 #OpenVPN监听本机的IP地址,如果不设置,则默认监听本机的所有IP地址
port 1194 #监听哪个TCP/UDP端口
proto udp #使用TCP或者UDP协议dev tun #OpenVPN创建的通信隧道类型#导入各个证书ca ca.crt
cert server.crt
key server.key
dh dh2048.pem # 指定迪菲·赫尔曼参数。server 10.8.0.0 255.255.255.0 # 设置服务器端模式,并提供一个VPN子网,以便于从中为客户端分配IP地址。
ifconfig-pool-persist ipp.txt # 指定用于记录客户端和虚拟IP地址的关联关系的文件。
# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。
# (简而言之,就是允许客户端访问VPN服务器自身所在的其他局域网)
# 记住,这些私有子网也要将OpenVPN客户端的地址池(10.8.0.0/255.255.255.0)反馈回OpenVPN服务器。
push "route 192.168.10.0 255.255.255.0" #这里可以按自己需求填写
push "route 192.168.20.0 255.255.255.0"
# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。
# (为确保能正常工作,OpenVPN服务器所在计算机可能需要在TUN/TAP接口与以太网之间使用NAT或桥接技术进行连接)
push "redirect-gateway def1 bypass-dhcp"
# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
keepalive 10 120 #每10秒钟ping一次,如果120秒内都没有收到对方的回复,则表示远程连接已经关闭
cipher AES-256-CBC #密码加密算法
comp-lzo #在VPN连接上启用压缩
client-to-client #允许客户端之间互相访问
# 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun
status openvpn-status.log # 输出一个简短的状态文件,用于显示当前的连接状态,该文件每分钟都会清空并重写一次。
verb 3 #日志级别
# 服务器和每个客户端都需要拥有该密钥的一个拷贝。
# 第二个参数在服务器端应该为'0',在客户端应该为'1'。
tls-auth ta.key 0 # 此项可不要
详细配置介绍:https://www.vsay.net/mycode/142.html
做好准备就可以启动服务了:
托盘右下角 右击 连接就可以启动服务。
3.客户端配置
把配置文件client.ovpn放到客户端机器的C:\Program Files\OpenVPN\config目录下,
并且把服务器C:\Program Files\OpenVPN\easy-rsa\keys目录下的client.crt、client.csr、client.key、ca.key、ca.crt、ta.key 文件一起复制到客户端C:\Program Files\OpenVPN\config目录下 (以上文件为服务端生成,客户端需要在服务端拷贝文件过来)。
client.ovpn的配置如下:
client
dev tun
proto tcp
remote 服务端IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1 #此处应该和服务同步
comp-lzo #此处应该和服务同步
verb 3
做好准备就可以连接服务了:
托盘右下角 右击 连接就可以连接服务器
到此就完毕了,本机ping 10.8.0.1(就是服务器的局域网ip地址)正常
常见问题:
警告1:Fri May 08 00:19:05 2020 WARNING: --ns-cert-type is DEPRECATED. Use --remote-cert-tls instead.
解决1:
#win客户端修改配置文件注释一个和添加一个
;ns-cert-type server
remote-cert-tls server
警告2:Fri May 08 00:19:06 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
解决2:
#win10客户端配置文件添加
auth-nocache
警告3:(此错误会导致连上vpn无法上网):Fri Sep 18 23:56:45 2020 us=967576 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1559', remote='link-mtu 1560'
解决请参考:如何解决OpenVPN中不一致使用警告的link-mtu和tun-mtu
警告4:(此错误会导致连上vpn无法上网): Fri Sep 18 23:56:45 2020 us=967576 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo'
或 write to TUN/TAP : Unknown error (code=122)
#win10客户端配置文件添加
comp-lzo
警告5:Fri Apr 09 00:47:49 2021 ROUTE: route addition failed using CreateIpForwardEntry: ÖÁÉÙÓÐһ¸ֲÎÊ�Õýȷc [status=160 if_index=19]
解决5:
#win10客户端配置文件添加
route-method exe
route-delay 2
如果只是想要访问服务端所在的内部网络,删除 server.ovpn 中的下面一行。
服务端配置删除:push "redirect-gateway def1 bypass-dhcp"
客户端配置删除:
ignore-unknown-option block-outside-dns
block-outside-dns
如果客户端要通过服务端代理上网(本机对外 IP 显示为服务端的 IP),只需要加上:
push "redirect-gateway def1 bypass-dhcp"
参考地址:https://blog.choyri.com/2015/12/openvpn-pit/
本文结束
全部参考资料:
http://www.dengb.com/Linuxjc/1226671.html
https://www.wumingx.com/others/openvpn-win.html
https://blog.choyri.com/2015/12/openvpn-pit/
https://me.jinchuang.org/archives/573.html
https://me.jinchuang.org/archives/573.html