簡介
本檔案介紹作業階段管理功能(SMF)中的網域名稱系統(DNS)快取機制以及如何對其進行疑難排解。
DNS快取的工作原理
當DNS查詢在SMF發生時,來自DNS伺服器的響應將快取到內部資料庫中。當訂閱伺服器請求P-CSCF擴展協定配置選項(PCO)時,代理呼叫會話控制功能(P-CSCF)地址的完全限定域名(FQDN)就是一個示例,如果SMF具有P-CSCF FQDN配置,則傳送DNS查詢,並將應答儲存在快取中。
P-CSCF配置檔案和DNS代理配置示例如下:
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,並將答案儲存到快取中。靜態P-CSCF地址(fec0::1)僅在DNS解析失敗時使用。下次在快取中檢查SMF時,如果找到主機名,將使用該主機名,不會發生DNS查詢。根據SMF配置設定的生存時間(TTL)或DNS伺服器的值,快取條目已過期。
疑難排解
當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"
}
]
}
]
}
可以使用test dns-query CLI測試DNS解析。
[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錯誤ID CSCvz13118實作。如果使用舊的SMF內部版本,且該CLI無法使用,則可以使用etcdctl指令將快取專案轉儲到etcd pod上。
[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