서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
DNS
#symlink 내용 옮겨짐
- 두가지의 방식이 있다 → centralized, distributed
- centralized 의 경우에는
- 단일실패점 문제
- 트래픽이 몰림
- 특정 client 에게는 너무 멀리 있을 수 고
- 확장성 문제가 있어서 안사용한다고 한다
- DNS 는 domain namespace 라는 트리구조를 가지고 있다
Domain-IP 관계
- 1:1 관계가 일반적이지만
- 도메인 여러개가 하나의 IP 를 받을 수도 있고
- 도메인 한개가 여러 IP 를 받을 수도 있다
FQDN
#symlink 내용 옮겨짐
- Full Qualified Domain Name, FQDN (DNS)
- , TLD (DNS)]]
- erver%20(DNS).md)pace 트리 내에서 도메인을 유일하게 구분해준다. - 그리고 이것은 도메인의 트리에서의 위치도 알려준다 - 트리의 각 노드는 label 이고 - FQDN 은 마지막에
.
로 끝난다 → 여기가 root - domain 에서.
이후에는 상위 label 로 올라간다 - 한 노드는 그 노드의 직계자손만을 관리하고, 노드와 자손을을 묶어 zone 이라고 한다 - root 의 직계자손들은 top-level domain 이라고 부른다. - 여기는 ICANN 이라는 단체에서 관리한다. - 각 zone 에는 nameserver 를 유지할 의무가 있다 - 이것을 authorative nameserver 라고 부른다
Resource Record (RR)
#symlink 내용 옮겨짐
- value 는 rdata (resource data) 로 아마 IP 겠지
- RR 에는 추가적으로 ttl 과 class 가 있는데 얘네는 알아서 찾아보고
- type 은 너가 알고 있던 그 A, CNAME 등이다
RR Type
- A: name 이 domain 이고 value 가 IP 인 경우
- IPv6 의 경우에는 AAAA 이다
- CNAME: name 이
- NS:
- MX:
작동 방식
#symlink 내용 옮겨짐
#은 local dns server 가 root, tld, authorative dns 서버에 순서대로 물어보는 방식이다
Recursive
- local dns server 가 무조건 root dns 에 물어보고 이놈이 해당 authorative dns 서버에 대신 물어봐주는 방식
- 가령 cis.poly.edu 에서 gaia.cs.umass.edu 를 물어봤을 때
- local dns 인 dns.poly.edu 가 root 에 물어보면 root 는 tld dns server 정보를 준다
- 그럼 local dns 는 tld 에 물어보고, 그럼 auth dns 인 dns.cs.umass.edu 의 정보를 준다
- 마지막으로 local dns 가 auth dns 에 물어보는 것으로 끝남
- 트리를 끝까지 올라갔다와야하기 때문에 오버헤드가 커 잘 사용되지 않는다
Root server
#symlink 내용 옮겨짐
-메인은 a.root-server.net 부터 m.root-server.net 까지 총 13개가 있다고 한다.
Anycast
- 여러 서버가 같은 (ASN, IP Prefix) 를 갖고록 해서 클라이언트가 질의를 해서 BGP 를 탔을 때 이러한 서버 중에서 가장 가까운 놈이 응답을 하는 구조
- CDN 생각하면 된다
- root server 도 이런식으로 운영되고 있으며 root-servers.org 에 가면 어디에서 이런 server 가 운용되는지 알 수 있다
TLD (Top Level Domain)
#symlink 내용 옮겨짐
- .com 같은 애들
- .com 의 경우에는 a.gtld-servers.net 부터 m 까지 운용하고
- 다른 tld 의 경우에는 이름이 다르다고 한다
country code TLD (ccTLD)
- .kr 같은 애들
Stub, local
#symlink 내용 옮겨짐
-는 기관에 설치되어 root, tld, auth 에 물어보며 결과들을 캐싱하고
- Stub 은 OS 에 포함된 기능으로 dns 결과를 client os 에 캐싱해서 질의 없이 ip 를 알아낼 수 있게 하는 것
- 뭐 systemd 에서 systemd-resolvd 같은애들 (127.0.0.53)
Public dns servers
#symlink 내용 옮겨짐
- cloudflare 의 1.1.1.1 1.0.0.1 가 있더라
DNS Message format
#symlink 내용 옮겨짐
- return code? 0이 no error 고 2 가 servfail (server fail) 이랜다
- (ppt 에서 simple view 놓쳤는데 따로 공부해야할듯 - 별로 어렵진 않아보인다)
- Question 에 domain, type 이 담김
- Answer 에 domain, ttl, type, ip 가 담김
- authority section: 해당 domain 을 담당하고 있는 dns nameserver 들을 알려줌
- additional section: authority section 에서 준 dns nameserver 들의 ip 를 알려준다
53
- DNS 는 기본적으로 53/udp 에서 작동한다고 한다.
- 따라서 result 는 512byte 보다 작아야 한다.
- 하지만 만약에 이것보다 클 경우에는, tcp 로 변환된다
TC
Flag 가 이것을 뜻함 - TCP 로 바꾸자- 즉, dns 가 tc 를 올려서 응답하면 client 가 tcp 로 dns server 와 새로 connection 을 맺는다
Extension
#symlink 내용 옮겨짐
- Extention Mechanisms for DNS, EDNS0 (DNS)
- S0%20Client%20Subnet,%20ECS%20(DNS).md)%20Padding%20(DNS).md)(ECS), RFC7871
- client 가 멀리 있는 dns resolver 에 질의를 했을 때 이놈은 auth dns 의 정보를 알려줄 텐데
- 이놈은 dns resolver 와 가까이 있는 auth dns 를 알려줄 것이므로 dns resolver 가 client 에게 이 auth dns 정보를 전달하게 되면 client 는 멀리있는 auth dns 에 보내야 할 것이다
- 하지만 client 의 subnet 으로 client 와 가까이 있는 auth dns 를 알아내어 응답하게 해서 해결하는 것?
- 근데 client 위치가 노출되기 때문에 privacy 문제가 있어 요즘은 사용하지 않는다고 한다
EDNS0
- 여기서는 udp 에서 4096byte 까지 사용할 수 있도록 하게 한다고 하네
- 근데 mtu 는 1500 이지만 OPT Pseudo? 같은걸로 잘라서 보낸다?
DNS Spoofing Cache Poisoning
#symlink 내용 옮겨짐
- 근데 local dns 가 질의를 했을 때 auth dns 가 응답하기 전에 해커가 다른 IP 로 응답하면 local dns 는 그것을 받아들이게 된다
- 따라서 local dns 는 다음번 질의가 들어와도 잘못된응답을 하게 되고, 이것을 cache poisoning 이라고 한다.
- 이것을 위해 identification field 를 이용해 auth 가 응답한 내용만을 받아들이도록 한다고 한다.
DNS Amplification & reflection
#symlink 내용 옮겨짐
o]-#symlink 내용 옮겨짐
- 존재하지 않는 도메인에 대한 쿼리를 잔뜩 날리게 되면 그것은 local dns 를 타고 auth dns 로 갈텐데 없는 도메인이기 때문에 cache 되지 않고 항상 auth dns 로 가게 된다
- 이런식으로 auth dns 를 공격할 수 있음
- 이를 위해 local dns 에서는 negative cache 를 가져서 질의를 카운트 하고, 너무 많은 질의의 경우에는 차단한다?
DNS Tunneling
#symlink 내용 옮겨짐
서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
DNS
#symlink 내용 옮겨짐
- DNS 는 약간 KV Store 과 같다 → 도메인으로 IP addr 를 얻어내기 때문
- 두가지의 방식이 있다 → centralized, distributed
- centralized 의 경우에는
- 단일실패점 문제
- 트래픽이 몰림
- 특정 client 에게는 너무 멀리 있을 수 고
- 확장성 문제가 있어서 안사용한다고 한다
- DNS 는 domain namespace 라는 트리구조를 가지고 있다
Domain-IP 관계
- 1:1 관계가 일반적이지만
- 도메인 여러개가 하나의 IP 를 받을 수도 있고
- 도메인 한개가 여러 IP 를 받을 수도 있다
FQDN
#symlink 내용 옮겨짐
- FQDN 은 domain namespace 트리 내에서 도메인을 유일하게 구분해준다.
- 그리고 이것은 도메인의 트리에서의 위치도 알려준다
- 트리의 각 노드는 label 이고
- FQDN 은 마지막에
.
로 끝난다 → 여기가 root - domain 에서
.
이후에는 상위 label 로 올라간다 - 한 노드는 그 노드의 직계자손만을 관리하고, 노드와 자손을을 묶어 zone 이라고 한다
- root 의 직계자손들은 top-level domain 이라고 부른다.
- 여기는 ICANN 이라는 단체에서 관리한다.
- 각 zone 에는 nameserver 를 유지할 의무가 있다
- 이것을 authorative nameserver 라고 부른다
Resource Record (RR)
#symlink 내용 옮겨짐
- DNS 의 KV 가 저장되는 자료구조의 이름
- Key 는 domain 의 이름
- value 는 rdata (resource data) 로 아마 IP 겠지
- RR 에는 추가적으로 ttl 과 class 가 있는데 얘네는 알아서 찾아보고
- type 은 너가 알고 있던 그 A, CNAME 등이다
RR Type
- A: name 이 domain 이고 value 가 IP 인 경우
- IPv6 의 경우에는 AAAA 이다
- CNAME: name 이
- NS:
- MX:
작동 방식
#symlink 내용 옮겨짐
Iterative
- 이것은 local dns server 가 root, tld, authorative dns 서버에 순서대로 물어보는 방식이다
Recursive
- local dns server 가 무조건 root dns 에 물어보고 이놈이 해당 authorative dns 서버에 대신 물어봐주는 방식
- 가령 cis.poly.edu 에서 gaia.cs.umass.edu 를 물어봤을 때
- local dns 인 dns.poly.edu 가 root 에 물어보면 root 는 tld dns server 정보를 준다
- 그럼 local dns 는 tld 에 물어보고, 그럼 auth dns 인 dns.cs.umass.edu 의 정보를 준다
- 마지막으로 local dns 가 auth dns 에 물어보는 것으로 끝남
- 트리를 끝까지 올라갔다와야하기 때문에 오버헤드가 커 잘 사용되지 않는다
Root server
#symlink 내용 옮겨짐
- root nameserver 의 도메인은 a.root-server.net 부터 m.root-server.net 까지 총 13개가 있다고 한다.
Anycast
- 여러 서버가 같은 (ASN, IP Prefix) 를 갖고록 해서 클라이언트가 질의를 해서 BGP 를 탔을 때 이러한 서버 중에서 가장 가까운 놈이 응답을 하는 구조
- CDN 생각하면 된다
- root server 도 이런식으로 운영되고 있으며 root-servers.org 에 가면 어디에서 이런 server 가 운용되는지 알 수 있다
TLD (Top Level Domain)
#symlink 내용 옮겨짐
- root 바로 아래 있는 dns 들
generic TLD (gTLD)
- .com 같은 애들
- .com 의 경우에는 a.gtld-servers.net 부터 m 까지 운용하고
- 다른 tld 의 경우에는 이름이 다르다고 한다
country code TLD (ccTLD)
- .kr 같은 애들
Stub, local
#symlink 내용 옮겨짐
- Local dns server 는 기관에 설치되어 root, tld, auth 에 물어보며 결과들을 캐싱하고
- Stub 은 OS 에 포함된 기능으로 dns 결과를 client os 에 캐싱해서 질의 없이 ip 를 알아낼 수 있게 하는 것
- 뭐 systemd 에서 systemd-resolvd 같은애들 (127.0.0.53)
Public dns servers
#symlink 내용 옮겨짐
- 뭐 구구르 의 8.8.8.8 8.8.4.4 혹은
- cloudflare 의 1.1.1.1 1.0.0.1 가 있더라
DNS Message format
#symlink 내용 옮겨짐
- Flag 들:
- RCODE (4bit): return code? 0이 no error 고 2 가 servfail (server fail) 이랜다
- (ppt 에서 simple view 놓쳤는데 따로 공부해야할듯 - 별로 어렵진 않아보인다)
- Question 에 domain, type 이 담김
- Answer 에 domain, ttl, type, ip 가 담김
- authority section: 해당 domain 을 담당하고 있는 dns nameserver 들을 알려줌
- additional section: authority section 에서 준 dns nameserver 들의 ip 를 알려준다
53
- DNS 는 기본적으로 53/udp 에서 작동한다고 한다.
- 따라서 result 는 512byte 보다 작아야 한다.
- 하지만 만약에 이것보다 클 경우에는, tcp 로 변환된다
TC
Flag 가 이것을 뜻함 - TCP 로 바꾸자- 즉, dns 가 tc 를 올려서 응답하면 client 가 tcp 로 dns server 와 새로 connection 을 맺는다
Extension
#symlink 내용 옮겨짐
EDNS0 Client Subnet (ECS), RFC7871
- client 가 멀리 있는 dns resolver 에 질의를 했을 때 이놈은 auth dns 의 정보를 알려줄 텐데
- 이놈은 dns resolver 와 가까이 있는 auth dns 를 알려줄 것이므로 dns resolver 가 client 에게 이 auth dns 정보를 전달하게 되면 client 는 멀리있는 auth dns 에 보내야 할 것이다
- 하지만 client 의 subnet 으로 client 와 가까이 있는 auth dns 를 알아내어 응답하게 해서 해결하는 것?
- 근데 client 위치가 노출되기 때문에 privacy 문제가 있어 요즘은 사용하지 않는다고 한다
EDNS0
- 여기서는 udp 에서 4096byte 까지 사용할 수 있도록 하게 한다고 하네
- 근데 mtu 는 1500 이지만 OPT Pseudo? 같은걸로 잘라서 보낸다?
DNS Spoofing Cache Poisoning
#symlink 내용 옮겨짐
- local dns 는 auth dns 로부터 받은 내용을 캐싱해놨다가 다음번 질의때 응답한다
- 근데 local dns 가 질의를 했을 때 auth dns 가 응답하기 전에 해커가 다른 IP 로 응답하면 local dns 는 그것을 받아들이게 된다
- 따라서 local dns 는 다음번 질의가 들어와도 잘못된응답을 하게 되고, 이것을 cache poisoning 이라고 한다.
- 이것을 위해 identification field 를 이용해 auth 가 응답한 내용만을 받아들이도록 한다고 한다.
DNS Amplification & reflection
#symlink 내용 옮겨짐
수업 내용 놓침
DNS NXDomain attack
#symlink 내용 옮겨짐
- nxdomain: non-existent domain - 존재하지 않는 도메인
- 해커가 존재하지 않는 도메인에 대한 쿼리를 잔뜩 날리게 되면 그것은 local dns 를 타고 auth dns 로 갈텐데 없는 도메인이기 때문에 cache 되지 않고 항상 auth dns 로 가게 된다
- 이런식으로 auth dns 를 공격할 수 있음
- 이를 위해 local dns 에서는 negative cache 를 가져서 질의를 카운트 하고, 너무 많은 질의의 경우에는 차단한다?
DNS Tunneling
#symlink 내용 옮겨짐
수업 내용 놓침