免责声明

本人对计算机网络、华为路由器都不熟悉,本文中的操作以及观点仅供参考。如有事实错误,欢迎通过Github issues指正。

概述

AR路由器有两种配置方式:Web和命令行。Web现在还不能直接配置L2TP/IPSec,只能简单配置(朴素)L2TP。然而朴素的L2TP安全性是不足的1,现代的操作系统(Windows/macOS/Android/iOS)都不支持朴素L2TP,而是支持L2TP/IPSec(L2TP over IPSec),即先利用IPSec建立安全通信后,再加密地建立L2TP连接。

也就是说,配置L2TP/IPSec必须要使用命令行的方式。你至少需要一个有超级管理员权限的路由器账号,并且确保路由器能够远程登录管理(比如使用SSH)。

我的场景是,组织内的以太网设备都接入AR路由器LAN接口,AR路由器通过WAN接口拨号接入广域网,并且具有公网IP。组织的成员会在广域网上通过L2TP/IPSec接入公司局域网。这样的需求和这份华为配置案例中的描述基本一致,在此不再赘述。

细节(坑)

问题大多出现在建立IPSec连接中。但是网络上能参考的文档极少,华为官方文档2中给出解决方法大多没有用。实际部署过程中,遇到的坑有三个:

接口问题

IPSec policy是需要附加在接口上的,如果通过拨号上网方式接入广域网,是需要挂在拨号用的虚拟接口上的(比如Dialer1)。

macOS/iOS无法连接

花费了大量时间排查。已经不记得最一开始是从哪里看到的了,但是在这份路由器文档里也有描述。华为路由器使用的SHA2算法似乎默认并不符合RFC。要使用文档中ipsec authentication sha2 compatible enable命令,强制使用兼容RFC的SHA2算法,苹果系操作系统才能连接上。

Windows 10无法连接

我在Windows上只有Windows 10这一版本的需求。自从Windows 8.1以来,Windows在“设置”里就开始自带VPN客户端。但是这一客户端并不能直接进行高级配置,然而这一点很重要。所谓的高级配置就是指定IPSec建立连接时使用的密码学算法(SHA、AES等)以及密钥长度。如果客户端与服务端在这些参数上不统一,就无法建立安全连接。Windows 10上配置这些参数,需要通过PowerShell命令行的方式。

首先,还是通过Windows设置,先创建好一个L2TP/IPSec连接(网络适配器)。建立好连接后,执行如下命令:

Set-VpnConnectionIPsecConfiguration -ConnectionName "你的连接名称" `
    -AuthenticationTransformConstants SHA256128 `
    -CipherTransformConstants AES256 -EncryptionMethod AES256 `
    -IntegrityCheckMethod SHA256 -PfsGroup None -DHGroup Group14 `
    -PassThru -Force

需要指出的是,AuthenticationTransformConstants应该(我不确定)与IPSec policy中的“ESP认证算法”对应,我选用的是SHA2-256,命令行中就选用了SHA256128。其他命令行参数参考这份微软文档即可。