ASA:单一公网 IP 上的 VPN 端口与 DMZ 静态 PAT
一个公网地址,两个服务。在 VPN 监听与 DMZ PAT 之间任何一方抢占另一方条目之前,先盘点地址、传输和端口。
两个服务、一个公网地址,还有一个让人以为留出了端口的 DNS 名称。其实并没有。在 ASA 上把 DMZ 服务器发布到 VPN 条目旁边之前,先把条目的元组写下来,并按顺序核对;第一个与现有服务重合的字段,就是方案该停下的地方。下文全部假定 VPN 终结在设备本身,而不是内网服务器上。
先写下这五个字段,再写命令
对每条公网条目记录地址族、公网地址、传输协议、公网端口和归属者。归属者要么是 ASA 本地服务,要么是被转换的内网服务器。两条条目可以共用同一地址却仍是不同的元组,两条条目也可能在图上看不一样、在设备上却撞在一起。
为真实端口单独留一列,也就是内网服务器实际监听的端口。公网端口和真实端口是两个独立选择,一旦把它们合并成一列,你就失去了日后读懂自己这条转换的能力。
| Public entry | Owner | Real side |
|---|---|---|
| TCP 443 on the outside address | ASA VPN listener | Appliance-local, no translation |
| TCP 8443 on the outside address | Static PAT | DMZ server TCP 443 |
| UDP 443 on the outside address | Check the effective listeners | Possibly the VPN data path |
正确读取真实位置与映射位置
从你已有的元组出发,而不是从想新增的服务器出发。一个示例划分是:把已批准的 VPN 条目留在公网 TCP 443 上,同时在公网 TCP 8443 上发布 DMZ 的 HTTPS 服务器,而该服务器仍在 443 上监听:
Public TCP 443 -> ASA VPN listener
Public TCP 8443 -> DMZ server TCP 443
在实际下发的命令里,真实服务和映射服务各占固定位置,把两者对调描述的是另一种映射,而不是坏掉的映射。这正是能用的转换变成谜题最常见的方式:配置是合法的,只是指向了别处。
Cisco 的 ASA 9.16 NAT 指南 记录了静态 PAT、接口地址的用法,以及真实端口与映射端口的含义。请读你实际运行的那个版本对应的章节;从旧平台记下来的命令并不是完整的当前配置。
把传输协议算作预留的一部分
TCP 443 与 UDP 443 是不同的元组,这个差别不会把 UDP 白送给你。VPN 可能各有独立的 TLS 与 DTLS 监听,其他已配置的服务也可能已经占着你想要的传输。与其假设整个 VPN 条目就是那个网页,不如盘点实际生效的监听和访问策略。
解析到同一地址的第二个主机名,也解决不了传输层的冲突。DNS 是名称到地址的映射,不是端口中介;通过 PAT 发布服务器,与把 VPN 监听挪到另一个端口,并不是同一个操作。
如果 VPN 条目确实要迁移,有四样东西会一起变:客户端配置、公网 URL、上游过滤,以及部署用到的每一种传输。要在一个窗口里做完,而不是一次一件。动手碰你用来连接设备的那项服务之前,先留好另一条独立的管理通道。没有第二条通道,这次迁移就是无法从外面撤回的改动。
从外部用全新连接验证
在生效的访问策略下只放行预期的 DMZ 应用,然后核对对应的转换顺序、服务器的回程路径,以及证书上的主机名。PAT 只改变网络目的地;它不授予应用访问权,也修不好名字对不上的证书。
用来自已授权外部主机的新连接测试两个服务:VPN 应当仍能建立,DMZ 请求应当抵达预期的监听。已建立的会话可能保留旧状态,所以它证明不了一分钟前你改动过的映射。
用你实际部署的内容更新条目台账,把这条闭环收上,包括那些你发现而非新建的监听。下一个在该地址上发布服务的人会从你的表开始,那里错一行,比这里错一条命令代价更大。