简介
本文档介绍会话管理功能(SMF)中的域名系统(DNS)缓存机制以及如何对其进行故障排除。
DNS缓存的工作原理
当SMF上发生DNS查询时,DNS服务器的答案会缓存在内部数据库中。当用户请求P-CSCF扩展协议配置选项(PCO)时,代理呼叫会话控制功能(P-CSCF)地址的完全限定域名(FQDN)是一个示例,如果SMF具有P-CSCF FQDN配置,则发送DNS查询,并将应答保存在缓存中。
示例P-CSCF配置文件和dns-proxy配置如下:
profile pcscf pcscf1
fqdn pcscf6.test.local
v6-list
precedence 1
primary fe80::1
exit
exit
exit
profile dns-proxy
query-type ipv6
timeout 2000
round-robin-answers
servers serv1
ip 192.168.20.11
port 53
protocol udp
priority 1
exit
exit
通过配置,第一个SMF尝试使用DNS服务器解析FQDN pcscf6.test.local,并将答案保存到缓存中。仅当DNS解析失败时,才使用静态P-CSCF地址(fec0::1)。下次SMF检查缓存时,如果找到主机名,则使用它,并且不会发生DNS查询。缓存条目根据SMF配置或DNS服务器中的值设置的生存时间(TTL)过期。
故障排除
当DNS解析出现问题时,需要调查缓存,例如,如果SMF返回P-CSCF的意外IP地址,则可能由于TTL值错误或TTL过期机制因某种原因而无法工作,因此缓存中会保留一个旧条目。
使用show dns-cache CLI可以查看缓存条目。
[unknown] smf# show dns-cache ipv6
dns-cache-details
{
"cacheResponse": [
{
"hostname": "pcscfv6.test.local",
"hostdata": [
{
"podInstance": "0",
"cachedType": "ipv6",
"cachedTime": "Wed Jan 26 03:32:01 UTC 2022",
"currentTime": "Wed Jan 26 03:32:03 UTC 2022",
"cachedData": [
{
"ip": "fec0:0:1:2:3:4:fe8b:5d43",
"ttl": 180
}
],
"dnsServer": "192.168.20.11:53 udp"
}
]
}
]
}
DNS解析可以通过测试dns-query CLI进行测试。
[unknown] smf# test dns-query fqdn pcscfv6.test.local
dns-summary
Hostname : pcscfv6.test.local,
IPv4Addr : [],
IPv6Addr : [fe80:0:1:2:3:4:fe8b:5d43]
CLI通过Cisco Bug ID CSCvz13118实现。如果使用旧SMF生成且CLI不可用,则可以使用etcdctl命令将缓存条目转储到etpod上。
[root@master1 ~]# kubectl get pod -n smf-data | grep etcd
etcd-smf-data-etcd-cluster-0 2/2 Running 2 23h
[root@master1 ~]# kubectl exec -it etcd-smf-data-etcd-cluster-0 -n smf-data bash
Defaulting container name to member.
Use 'kubectl describe pod/etcd-smf-data-etcd-cluster-0 -n smf-data' to see all of the containers in this pod.
groups: cannot find name for group ID 303
I have no name!@etcd-smf-data-etcd-cluster-0:/usr/local/bin$
I have no name!@etcd-smf-data-etcd-cluster-0:/usr/local/bin$ etcdctl get --prefix C.RadiusDNS
C.RadiusDNS/DNS/CacheV6.pcscfv6.test.local
fe80:0:1:2:3:4:fe8b:5d43
180
C.RadiusDNS/DNS/Common.algorithm
round-robin
C.RadiusDNS/DNS/Common.queryType
ipv6