Windows平台使用OpenVPN相关问题汇总
生成证书
使用命令提示符进入到安装目录下的easy-rsa
执行以下命令生成证书
init-config #加载配置
vars #设置变量
clean-all #删除旧文件
build-ca #生成CA证书
build-key-server server #生成服务端证书
build-key client1 #生成客户端证书1
build-key client2 #生成客户端证书2
……
build-dh #生成Diffie Hellman
注意事项
生成client证书需要ca.crt、ca.key、index.txt、serial这几个文件
如需重新生成客户端证书,先清空index.txt的内容**
Windows系统生成客户端证书时Common Name需手动填写,建议与证书文件名相同
修改服务端和客户端配置文件时,证书文件路径时需要使用双斜杠\\
服务端设置NAT转发
未设置NAT转发客户端连接服务端后,只能访问服务端和其他客户端,无法通过服务器物理网卡作为出口访问其他网络资源
Windows Server
打开路由和远程访问,没有添加此功能的去服务器管理器中添加
选择服务器,右键配置并启用“路由和远程访问”,选择“自定义配置”,下一步勾选“NAT”,完成后启动服务
然后展开服务器-IPv4,选择“NAT”,右键“新增接口”,选择“服务器的物理网卡”,在“NAT”选项卡中选择“公用接口连接到Internet”,勾选在“此接口上启用NAT”
Windows Desktop
Windows服务Routing and Remote Access
启用并设置为自动启动
在物理网卡“本地连接”属性-共享中勾选“允许其他网络用户通过此计算机的Internet连接来连接”,并共享给OpenVPN虚拟网卡
修改注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
值:IPEnableRouter
类型:REG_DWORD
数据:0x00000001 (1)
可能存在的问题
系统重启后NAT失效,需要重新共享物理网卡
解决方法
使用一个PowerShell脚本来重新设置物理网卡共享,共享完成后重启虚拟网卡
PowerShell代码
$NetShare = New-Object -ComObject HNetCfg.HNetShare
$wlan = $null
$ethernet = $null
foreach ($int in $NetShare.EnumEveryConnection) {
$props = $NetShare.NetConnectionProps.Invoke($int)
if ($props.Name -eq "以太网") {
$wlan = $int;
}
if ($props.Name -eq "OpenVPN") {
$ethernet = $int;
}
}
$wlanConfig = $NetShare.INetSharingConfigurationForINetConnection.Invoke($wlan);
$ethernetConfig = $NetShare.INetSharingConfigurationForINetConnection.Invoke($ethernet);
$wlanConfig.DisableSharing();
$ethernetConfig.DisableSharing();
$wlanConfig.EnableSharing(0);
$ethernetConfig.EnableSharing(1);
Get-NetAdapter -Name 'OpenVPN' | Restart-NetAdapter
可以再写一个批处理来执行此脚本,并加入到计划任务里面,开机自动执行
批处理代码
@echo off
PowerShell.exe -ExecutionPolicy Unrestricted -File NetConnectionSharing.ps1
exit
服务端无GUI运行
将以下Windows服务
OpenVPN Service Interactive
OpenVPN Service Legacy
设置为自动启动
旧版本客户端设置自动连接
在openvpn-gui.exe快捷方式后面加上参数--connect client.ovpn