# openvpn

<https://www.ilanni.com/?p=9847>

* Mac OSX：[Tunnelblick](https://code.google.com/p/tunnelblick) 开源的可以连接 OpenVPN，已测试过，可以使用
* Windows：[OpenVPN Desktop Client](http://swupdate.openvpn.net/downloads/openvpn-client.msi) OpenVPN2.4 不支持 XP。配置文件client.conf需要重命名成client.ovpn。导入配置的时候不要把安装目录下的 client.ovpn 覆盖了！

\#让客户端发起的所有IP请求都通过OpenVPN服务器

push “redirect-gateway def1”

\#允许客户端子网互通

client-to-client

**前面案例提到的，都是由服务端先生成客户端证书，然后分发到客户端，让客户端通过证书连接到服务器上。但有时候，这样的分发是比较麻烦的（也不安全）。这样，我们可以考虑另外一种方式：**\
**只在服务端制作客户端证书，而客户端只需要有ca.crt文件，而不需要拿到客户端证书，当登陆服务器的时候是通过用户名和密码即可登陆OpenVPN服务器。**

◎服务端配置：（以Linux版为例）

OpenVPN可以通过插件（plugin）方式支持上述的用户名认证，在Linux下以PAM为例，必须先增加用户：

useradd -M test

passwd test

然后修改.conf增加：

引用 #使用PAM插件

plugin /usr/share/vpn/plugin/lib/openvpn-auth-pam.so login

\#客户端可以不提供证书

client-cert-not-required

\#用户登陆的用户名就是Common Name

username-as-common-name

**※注意：**\
**1、若不增加client-cert-not-required语句，默认PAM认证和证书验证是需要同时通过才能建立连接的；**\
**2、OpenVPN是基于SSL连接，所以，上述设置只是让客户端不用提供证书，但却必须提供ca.crt；**\
**3、而且OpenVPN服务器也必须用客户端使用的登陆名（如：test）建立相同Common Name的证书，否则客户端登陆的时候，服务器会提示找不到对应证书，而不能建立连接。**

◎客户端配置：

client.conf增加：

引用 #激活登陆认证方式

auth-user-pass

\#修改认证证书，保留ca.crt即可，客户端证书可以不要了

ca ./easy-rsa/keys/ca.crt

参考文档

* <https://www.aikaiyuan.com/11839.html>
