OpenVPN推荐使用证书进行认证,安全性很高,但是配置起来很麻烦。还好它也能像pptp等vpn一样使用用户名/密码进行认证。
不管何种认证方式,服务端的ca.crt, server.crt, server.key, dh1024.pem这四个证书都是要的。使用username/passwd
方式,你需要在服务器配置文件中加入以下语句,取消客户端的证书认证:
client-cert-not-required
然后加入auth-user-pass-verify,开启用户密码脚本:
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
加入script-security消除以下警告
script-security system
checkpsw.sh脚本可以通过网络获取
wget http://openvpn.se/files/other/checkpsw.sh
checkpsw.sh默认从文件/etc/openvpn/psw-file中读取用户名密码。
psw-file中一行是一个账号,用户名和密码之间用空格隔开
username password
到此服务端就配置完成了。
客户端配置文件中去掉于证书相关的配置,加入
auth-user-pass
打开用户名密码验证。
可以加入auth-nocache可以在断线后防止内存中保存用户名和密码来提高安全性。
这样客户端就配好。
下面提供一个我的服务端配置文件。Linux使用该配置文件作为服务端,ROS的openvpn客户端是可以连接上的。
port proto tcp dev tap #不要求客户端有证书 client-cert-not-required username-as-common-name script-security system #使用脚本验证密码 auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem server 10.8.6.0 255.255.255.0 #保存已有的用户和ip的对应关系 ifconfig-pool-persist ipp.txt #允许客户端之间互访 client-to-client keepalive user nobody group nogroup persist-key persist-tun #保存日志 status openvpn-status.log #日志冗余级别 verb