Windows VPN Server部署你需要知道的事

新型肺炎仍局势糜烂,何时复工尚有变数。所以很多公司的IT部门都提供了几乎全员的VPN远程办公方案。但是对于中大型公司,VPN设备的授权数或最大并发数很可能无法覆盖全体员工。更何况,如此大压力下的负载,一定需要一套临时备用VPN方案。这也是笔者最近几天的工作内容。

如果公司IT预算充足,那一台类似像Palo Alto、Fortinet防火墙这样设备的自带SSL VPN功能,就能满足大部分企业的临时需求。当然免费或开源的产品也是一个不错的选项,毕竟VPN是一项非常成熟的技术了。

免费VPN方案有不少,但是在企业环境下部署,对于LDAP或RADIUS认证的支持几乎是必须的。OpenVPN记得只支持SSL,所以前期评测选了Windows自带的VPN Server (Rounting and Remote Access Service)和日本筑波大学的SoftEther项目两款进行测试。

2009年H1N1疫情的时候,笔者曾经为前东家部署过一套备用的Windows PPTP/L2TP VPN Server。所以本着尝鲜的考虑,这次先试用SoftEther。但部署到一半的时候,发现开源版本的SoftEther提示不支持RADIUS:

测试的版本是Ver 4.32 Build 9731 beta,翻了下官方论坛,似乎没有人提报这个问题。Google下来也就一两例,猜测可能是版本过新或Beta版的缘故,准备稍后用旧版本再试一下。

顺便说一个八卦,SoftEther的作者年轻时或许少不经事,2003年就草草与三菱商事株式会社签了销售合同,代价是免费版本的SoftEther不能与三菱在商业市场进行竞争,一直到2014年4月。由此可见,早期创业者尽早雇佣一位律师是多么的重要。

回过头来看Windows RRAS,具体部署文档就不多说了,互联网上一大堆,这里简要说一下注意事项:

  1. 从协议穿透性角度,SSTP>L2TP>PPTP(L2TP主要是运营商对UDP的限流或封杀,PPTP主要是GRE封包的通过性)。注意SSTP如果需要更改默认的TCP 443端口,需要额外配置
  2. L2TP如果是在防火墙NAT后,服务器和客户端都需要修改注册表键值 (修改后需重启):HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent > 新建 AssumeUDPEncapsulationContextOnSendRule (DWORD 32-bit)
  3. VPN配置的自动化部署可以用工具:Rasdial (Rasphone.pbk)
  4. Windows 10的话,需要在 更改适配器选项 > VPN连接 属性 > 安全 > 勾选 允许使用这些协议,以支持MS-CHAP v2协议,否则会报错:“已拒绝远程连接,因为未识别出你提供的用户名和密码组合,或在远程访问服务器上禁止使用选定的身份验证协议”
  5. 为了实现Split Tunneling,需要在 控制面板 > 网络和共享中心 > 适配器设置 > VPN连接 > IPv4属性 中 关闭 在远程网络上使用默认网关 (Use default gateway on remote network),从而避免VPN连接成为路由表里优先级最高的线路。如果不修改,所有客户端流量将全都从公司VPN网关出,那要么公司人数不多,要么有很严格的访问策略限制,否则带宽压力会非常大
  6. 为了配合Split Tunneling,需要将公司内网的IP段加入本机的路由表(如需要可添加永久路由-p):
    1. route add destination_subnet mask subnet_mask 0.0.0.0 IF vpn_adapter_number
    2. route add destination_subnet mask subnet_mask vpn_gateway_ip
  7. 注:除了客户端添加路由表,微软官方还有另两种方法:The Classless Static Routes DHCP option (DHCPInform message) 和 Connection Manager Administration Kit (CMAK)。
  8. 参考此篇,将本地连接的优先级降低,将VPN连接的优先级设高,让VPN连接的DNS成为主DNS,从而可以正常解析内网域名:

目前大致就是以上这些心得体会,随时更新。