ASA VPN 客户端从错误的 DHCP 地址池获取地址
把 ASA 上的 dhcp-server 和 dhcp-network-scope 当作两个不同字段来读,将 scope 设为池外可路由的地址,然后验证路由。
AnyConnect 客户端出现在错误的子网里,或者 DHCP 服务器干脆什么都不肯分配,而组策略乍看之下却是对的。ASA 上有两个位于不同位置的字段,听起来都像在回答「地址从哪来」,设错其中一个就会得到这个结果。连接配置文件指定 DHCP 服务器;组策略指定该服务器应当从中选择的子网。 两者都不会创建地址池。
三个对象,三个问题
先把分配模型与地址池分开,因为两种模型并不共用配置。如果由 ASA 自己分配地址,你就定义一个本地池,并把组策略指向它。如果由外部 DHCP 服务器分配,连接配置文件指定那台服务器,组策略则给出 scope 提示。把两者混在一起,就是地址始终不出现的常见原因。
| Intent | Objects involved |
|---|---|
| ASA allocates from its own pool | ip local pool plus the group policy's address-pool |
| External DHCP allocates | dhcp-server on the tunnel group, dhcp-network-scope on the group policy |
先读有效值,再动手修改
省略的行与显式的 none 并不相同。运行中的配置只显示你输入了什么;而 show run all group-policy 显示策略实际解析成什么,包括继承来的默认值。在判定 scope 有误之前,两者都要看,因为继承默认策略的组策略可能提供一个在简短列表中根本不出现的值。
show running-config group-policy RemoteStaff
show run all group-policy RemoteStaff
show running-config tunnel-group RemoteStaff
group-policy RemoteStaff attributes
dhcp-network-scope ?
? 的输出值得在你所装的版本上读一读,因为可接受的值与帮助文本在不同版本间并不相同。Cisco ASA 9.24 的组策略参考 将该属性描述为目标子网上、分配池之外的一个可路由地址,并优先使用接口地址。它既不是池的范围,也不是网络号。
把 scope 设成一个地址,而不是一个范围
假设你希望服务器使用的池是 /24 上的 10.50.30.50 到 10.50.30.200,而该网段上 ASA 的接口是 10.50.30.1。scope 的值就是 10.50.30.1。写 10.50.30.0 会失败,因为那是网络号;写整个范围也会失败,因为该属性只接受一个地址。如果你选的地址不是接口地址,就需要一条静态路由,让 DHCP 服务器的应答能够到达它。
group-policy RemoteStaff attributes
dhcp-network-scope 10.50.30.1
这个片段只做一件事。它不配置 DHCP 服务器,不在那里建池,也不会让一个不完整的远程访问配置文件变得可用。这里记录的行为仅限 IPv4;不要指望它去控制 DHCPv6 或前缀委派。
带上回退点再改
先做快照,让回退成为一条命令,而不是一次重建。编辑前把相关配置保存到文件,并弄清 no 在你的版本上恢复什么:它会把属性恢复为默认值或继承值,那可能是 none,而不是上面的策略。
copy running-config flash:pre-dhcp-scope.cfg
conf t
group-policy RemoteStaff attributes
no dhcp-network-scope
dhcp-network-scope 10.50.30.1
end
write memory
删除该属性也是一种诊断手段。没有定义 scope 时,DHCP 服务器会在自己的池中寻找尚未分配的地址,因此客户端可能落到意料之外的地方,但至少能连上。这个结果说明请求路径是通的,失败的是池的选择。
核实地址、路由和权限
从会话表而不是客户端的对话框里读取分配结果,然后确认该地址能路由回隧道,且组策略的过滤器允许你预期的流量。分配决策不是路由决策,从正确池里拿到地址的客户端,仍然可能每个请求都失败。
show vpn-sessiondb detail anyconnect filter name testuser
show ip local pool
show route | include 10.50.30
ping 10.50.30.61 source inside
如果会话显示的就是你想要的地址,但流量不通,那 scope 的嫌疑就可以排除。去看回程路由、组策略上的 split-tunnel 或过滤器设置,以及 DHCP scope 是否位于 ASA 真正路由到的网段上。