Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且客户端总数不能超过200个。这里我们介绍一个Point to Site VPN的替代方案——OpenVPN,不限制客户端拨入数量,并且支持Window,MAC OSX,Linux,Android和IOS!当然还是免费的。(此方案仅支持Microsoft Azure中国版,在Microsoft Azure国际版上无效。)
首先我们创建一个OpenLogic CentOS 6.7的虚拟机并安装EPEL的yum源。
sudo yum install epel-release sudo yum update
安装OpenVPN和easy-rsa
sudo yum install openvpn sudo yum install easy-rsa
easy-rsa用于生成OpenVPN所需的数字证书,可以看作是对openssl的封装。
生成OpenVPN数字证书
#复制easy-rsa sudo cp -R /usr/share/easy-rsa/ ~/easy-rsa #修改目录权限 -R ~/easy-rsa/ #进入easy-rsa目录 cd ~/easy-rsa/2.0/ #修改vars变量定义 vim vars #根据需要对变量值进行修改,包括证书有效期,证书属性等。 #导入vars变量 source ./vars #初始化 ./clean-all #创建CA证书 ./build-ca #创建服务器证书 ./build-key-server server #生成Diffie Hellman key exchange文件 ./build-dh #生成客户端证书 ./build-key client#可以使用具体的用户名替代“client”,例如:“./build-key vpn-user-1”,为每个拨入的用户分别创建一个证书。 #复制安装服务器端证书 cd ~/easy-rsa/2.0/keys/ sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
经过上述步骤,和OpenVPN相关的数据证书都已经创建完成了。接下来我们开始配置OpenVPN的服务器。
OpenVPN自带了一个sample配置文件,里面详细的讲解了每个配置项的作用和用途,sample配置文件路径:“/usr/share/doc/openvpn-2.3.11/sample/sample-config-files/server.conf”。
OpenVPN的配置文件路径:/etc/openvpn/server.conf
这里附上一个示例配置文件供参考:
#OpenVPN服务端口port 1193#协议 proto tcp dev tun#以下是对应的服务器端数字证书的路径 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh2048.pem#OpenVPN使用的地址段,服务器自身的地址xxx.xxx.xxx.1 server 10.11.12.0 255.255.255.0 ifconfig-pool-persist ipp.txt#去掉以下注释,则客户端所有的流量都会经过服务器进行转发。若无特殊情况,一般不要让服务器转发客户端的所有流量。 ;push "redirect-gateway def1 bypass-dhcp" #向客户端推送路由,即:在服务器一侧可以被客户端访问到的网段。 push "route 172.16.1.0 255.255.255.0" push "route 172.16.2.0 255.255.255.0"client-to-client keepalive comp-lzo user nobody group nobody persist-key persist-tun#确保日志文件路径存在并具备适当的权限 status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb
配置NAT和IP转发
-o eth0 -j MASQUERADE#注意来源地址要和/etc/openvpn/server.conf中的网段保持一致。 sudo vim /etc/sysctl.conf#将“net.ipv4.ip_forward = 0” 改为:“net.ipv4.ip_forward = 1” #使设置生效sudo sysctl -p
设置OpenVPN开机自动启动
sudo chkconfig openvpn on
在Microsoft Azure的Web管理控制台中给OpenVPN服务器添加一个endpoint,端口号和协议与"/etc/openvpn/server.conf"中的配置保持一致。
重启一次虚拟机(“sudo reboot”),服务器端配置就完成了。
由于OpenVPN使用数字证书进行身份验证,因此我们需要将上述步骤中生成的ca证书(ca.crt),客户端证书(client.crt, client.key)和配置文件一起分发给用户。每个用户分别使用不同的客户端证书。
在此我们以Windows操作系统为例来介绍OpenVPN在客户端的配置(其他操作系统客户端的配置方法也是大同小异的)。
创建一个文件夹,名称为:“config”。
将ca证书和客户端证书复制到config文件夹中(共3个文件)。
config文件夹中新建一个配置文件,名称为:client.ovpn,按以下示例添加配置文件内容:
client dev tun#协议,和服务器端配置保持一致 proto tcp#服务器地址和端口 remote xxx resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3#证书文件位置 ca ca.crt cert client.crt key client.key
安装OpenVPN客户端,并将config文件夹复制到安装目录中,例如:“C:\Program Files\OpenVPN”
以管理员身份运行OpenVPN GUI,右键点击桌面右下角通知区域的OpenVPN图标,点击“connect”即可建立VPN连接。
如果遇到无法连接的情况,请参考服务器端和客户端的日志进行故障排查。
与L2TP,PPTP,IKEv2等VPN相比较,OpenVPN配置过程相对简单,通讯安全可靠,设备兼容性好。服务器端只需要对外开放一个tcp或者udp端口就可以接受客户端拨入。此外,如果在已经建立Site to Site VPN的虚拟网络中创建OpenVPN服务器,则客户端拨入VPN后,是能访问到企业内部网络的。这相当于Multiple Site VPN,但是却不需要在建立Site to Site VPN时时候必须使用动态路由(route-based)网关。