RouterOS OpenVPN 与 NPS:设置 user-auth-method,而不是 auth
在 RouterOS 上,auth 选择隧道的摘要,而 user-auth-method 决定如何检查 RADIUS 请求。请让后者与 NPS 策略保持一致。
RouterOS 可以用 OpenVPN 登录连到 NPS,却仍被拒绝,常见原因是两个设置的名字听起来都像认证。一个为隧道选择加密摘要;另一个决定如何把用户凭据呈现给 RADIUS。无论服务重启多少次,更改摘要都不会把 PAP 请求变成 MS-CHAPv2。下面的清单把两者分开,然后沿一条失败登录追查判定它的 NPS 策略。
第 1 步:在改动任何一项之前先读完两个设置
在终结隧道的路由器上打印有效的 OpenVPN 服务器配置,而不是从备份或抄来的论坛帖子里看。你关心的两个字段通常在同一菜单中,读起来像是二选一。其实不是:一个关乎数据通道,另一个关乎凭据交换。
/interface ovpn-server server print
/interface ovpn-server server export
auth 字段列出 sha1、sha256 等摘要,并控制用于认证隧道数据包的 HMAC。user-auth-method 字段选择 pap 或 mschap2,并决定路由器如何把用户凭据呈现给 RADIUS。更改摘要无法改变后一种行为,所以每次调整前者,同样的拒绝依旧存在。
如果你的版本根本不提供 user-auth-method,请到此为止。较旧的 RouterOS 构建可能不在 OpenVPN 服务器上提供它,修正应落在你能支持的版本里,而不是从更新版本抄来的命令。
第 2 步:找到真正拒绝登录的策略
在 NPS 侧,连接请求会按网络策略评估,匹配策略中指定的认证方法必须是客户端实际提供过的方法。请按时间和用户关联一次失败登录,而不是只读汇总数字。安全日志会记录允许和拒绝的请求及原因代码,这比路由器笼统的失败行有用得多。
Get-WinEvent -LogName Security -MaxEvents 200 |
Where-Object { $_.Id -in 6272,6273 } |
Format-List TimeCreated,Id,Message
在事件中读三样东西:匹配的策略名称、认证方法和原因代码。要求 MS-CHAPv2 的策略即使密码正确也会拒绝 PAP 请求,要求域账户的策略会拒绝本地账户。RADIUS 客户端条目还必须与路由器的源地址一致,否则请求在查询任何策略之前就被丢弃。这些都不会出现在 OpenVPN 日志里。
如果请求根本到不了 NPS,请到此为止。那是共享密钥、客户端地址或 UDP 1812 的问题,改认证方法修不好。
第 3 步:两边只改一个方法
如果获批设计是 MS-CHAPv2,就在路由器上设置它,并确认匹配的策略接受它。先改一侧,重新测试,再改另一侧;同时改两边会让你说不清到底是哪一边起了作用。
/interface ovpn-server server set user-auth-method=mschap2
/interface ovpn-server server print
/log print where topics~"radius"
不要为了消除错误而在 NPS 上启用所有更弱的方法。后端必须持有所选方法能够验证的材料:MS-CHAPv2 需要访问密码或域,而策略无法凭空造出这些材料。放宽策略也会放宽攻击者可以对同一账户尝试的范围。把方法、策略名称和变更引用一起记录下来,让下一个人继承的是决定,而不是猜测。
隧道的证书校验要保持原样。凭据方法不能替代服务器身份,为了通过测试而降低 TLS 检查,是用一个更糟的问题换掉原来的问题。
第 4 步:测试三次登录和一项权限
分别在新会话中测试一个获准用户、一个错误密码和一个被排除的用户。第一项证明路径连通,第二项证明凭据检查是真的,第三项证明策略仍然排除了该排除的人。缓存的会话可能掩盖这三点,所以每次尝试之间要断开。
/log print where topics~"ovpn"
/radius monitor 0
认证成功不是清单的终点。检查客户端拿到的地址以及该地址能访问的资源,因为用户可能认证正确却落进错误的地址池。如果分配到的地址不对,问题在配置文件或 RADIUS 回复属性里,而不在方法上。关闭工单前把两者都确认一遍。
当路由器设置和 NPS 策略指定同一个方法、一个获准用户用新会话连上、一个错误密码被拒绝、一个被排除的用户仍被排除,并且分配到的地址符合预期地址池时,清单才算完成。少任何一项,下一次登录就只能靠运气。