소개
이 문서에서는 SMF(Session Management Function)의 DNS(Domain Name System) 캐시 메커니즘 및 문제 해결 방법에 대해 설명합니다.
DNS 캐시 작동 방식
SMF에서 DNS 쿼리가 발생하면 DNS 서버의 응답이 내부 데이터베이스에 캐시됩니다. P-CSCF(Proxy Call Session Control Function) 주소의 FQDN(Fully Qualified Domain Name)은 가입자가 P-CSCF PCO(Extended Protocol Configuration Option)를 요청하는 경우와 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는 FQDN pcscf6.test.local과 DNS 서버를 확인하려고 시도하고 캐시에 응답을 저장합니다. 고정 P-CSCF 주소(fec0::1)는 DNS 확인이 실패한 경우에만 사용됩니다. 다음에 SMF가 캐시를 체크인하고 호스트 이름이 발견되면 해당 호스트 이름이 사용되고 DNS 쿼리가 수행되지 않습니다. 캐시 항목은 SMF 컨피그레이션 또는 DNS 서버의 값으로 설정된 TTL(Time to Live)에 따라 만료됩니다.
문제 해결
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 버그 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