Microsoft Azure Point to Site VPN替代方案

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)网关。

上一篇:Bootstrap系列 -- 38. 基础导航条


下一篇:【调侃】IOC前世今生