[네트워크] 통신을 도와주는 네트워크 기술

공부중인 개발자·2021년 10월 28일
1

네트워크

목록 보기
7/10
post-thumbnail
초보개발자입니다. 틀린내용이 있다면 언제든지 알려주시면 감사합니다!

NAT/PAT

NAT: Network Address Translation 네트워크 주소를 변환하는 기술

NAT는 기본적으로 하나의 네트워크 주소를 다른 하나의 네트워크 주소로 변환하는 1:1 변환이 기본
하지만 IP주소 고갈 문제를 해결하기 위해 여러 개의 IP를 하나의 IP로 변환하기도 함.

실제 공식 용어는 NAPT(Network Address Port Translation) 실무에서는 PAT라는 용어로 더 많이 사용

NAT/PAT 용도와 필요성

  • IPv4 주소 고갈문제의 솔루션으로 NAT 사용

IP 주소 보존과 전환전략 중 중기에 해당 IPv4 주소 보존에 기여
외부에 공개해야하는 서비스에 대해서는 공인 IP 사용 공개할 필요없는 일반 사용자 PC나 기타 종단 장비에 대해서는 사설IP 사용

  • 보안을 강화하는데 NAT 기술 사용

IP 주소는 네트워크에서 유일해야 하고 이 정보가 식별자로 사용되어 외부와 통신
외부와의 통신에서 내부 IP를 다른 IP로 변환해 통신하면 외부에 내부 IP 주소를 알리지 않을 수 있음
내부 네트워크에서 시작해 외부 네트워크로 나가는 방향 통신은 허용하지만 외부에서 시작해서 내부로 들어오는 방향 통신은 방어할 수 있기 때문에 보안을 쉽게 강화할 수 있음

  • IP주소 체계가 같은 두 개의 네트워크 간 통신을 가능하게 해줌

IP 네트워크에서 서로 통신하려면 유일한 IP 주소가 있어야함.
공인 IP는 인터넷에서 유일한 주소기 때문에 문제가 생기지 않지만 사설 IP의 경우 동일한 IP를 사용할 수 있음. 하지만 사설 IP가 외부와 통신 할 때 공인 IP로 변환되어 통신하기 때문에 IP중복 가능.
회사간의 합병이나 직접 네트워크를 연결해야하는 경우는 사설 IP가 충돌할 가능성 있음

특히 대외계라고 부르는 회사 간 통신에서 이런 상황이 많이 발생 카드사나, 은행 간 연결이 대표적인 대외계 네트워크
IP 대역이 같은 네트워크와 통신할 가능성이 높은 대외계 네트워크를 연결하기 위핸 출발지와 도착지를 한꺼번에 변환하는 "더블 나트(Double NAT)" 기술을 사용

  • 불필요한 설정 변경을 줄일 수 있음

IDC 쪽에서 IP를 할당받아 사용할 경우 임시로 빌려서 사용하기 때문에 회선 사업자를 바꾸거나 IDC를 이전하면 그동안 써온 공인 IP를 사용할 수 없고 신규 사업자가 빌려주는 IP로 변경해야함.
사용자가 NAT/PAT를 이용해서 내부 네트워크를 구성한다면 서버와 PC의 IP주소 변경 없이 회선과 IDC 사업자 이전이 가능

외부에 서비스하던 공인 IP 주소가 변경되므로 DNS서비스나 NAT를 수행하는 네트워크 장비 설정은 변경해야 하지만 내부 서버나 PC 설정 변경을 최소화 할 수 있어 불필요한 설정 변경을 줄일 수 있음.

비즈니스의 유연성을 높이는 데 중요한 기술로 활용

  • 단점

네트워크 운영자 입장에서 IP가 변환되면 장애가 발생했을 시 문제 해결이 힘듬.
애플리케이션 개발자는 애플리케이션을 개발할 때 더 많은 고려사항이 생김.

IP주소 부족을 해결하기 위한 NAT이지만 NAT로 인한 문제를 해결하기 위해 새로운 기술이 생기고 새로운 기술을 또 다시 개발할 때 고려해야하는 문제가 생기는 악순환이 생김.

NAT/PAT 동작 방식

NAT 의 동작방식의 경우 사용자와 웹서버 사이의 NAT장비에서 IP가 변화하면서 발생된다.

  1. 사용자가 웹서버로 요청을 보낼 때 출발지 IP를 10.10.10.10으로 목적지 IP 를 20.20.20.20으로 포트는 80으로 각각 지정하고 요청을 보낸다. 출발지 서비스 포트는 임의의 포트로 할당

  2. NAT장비는 사용자의 요청을 받아 출발지 IP를 공인 IP 인 11.11.11.11로 변경해준 뒤 변경 전후의 IP주소를 NAT테이블에 저장한다.

  3. 출발지 IP 11.11.11.11 변경 후 목적지로 웹서버로 전송하게 되고

  4. 웹서버에서 응답을 목적지를 공인IP 11.11.11.11 로 보내준다.

  5. NAT장비는 NAT 테이블에 있는 정보를 확인해서 목적지 IP를 사설 IP인 10.10.10.10 으로 바꿔준 뒤

  6. 사용자에게 전송하여 사용자가 최종적으로 패킷을 수신한다.

PAT의 동작방식의 경우 공인 IP로 바뀌는 것 외에도 포트의 변화도 추가된다.

  1. NAT1번과 마찬가지로 진행된다.

  2. 주소변경 시 IP 외에 PORT까지 변경해준다.

나머지는 NAT와 동일하다.

PAT 의 동작방식은 NAT와 거의 동일하지만 서비스 포트를 함께 변경해서 하나의 IP만으로도 다양한 포트 번호를 사용해서 사용자를 구분 할 수 있는 장점을 가지고 있다.

하지만 서비스 포트의 수가 제한 되어 있기 때문에 모든 서비스 포트가 사용 중일 때는 PAT가 정상작동하지 않을 수 있다. 동시사용자가 많은 경우는 공인IP주소를 풀로 구성해야한다.

SNAT 와 DNAT

  • SNAT: Source NAT - 출발지 주소를 변경하는 NAT ( 사용자 -> 웹서버 )
  • DNAT: Destination NAT - 목적지 주소를 변경하는 NAT ( 웹서버 -> 사용자 )

    SNAT와 DNAT는 트래픽이 출발하는 시작 지점을 기준으로 구분
  • SNAT를 사용하는 경우

SNAT는 사설에서 공인으로 통신할 때 많이 사용
공인 IP 주소의 목적지에서 출발지로 다시 응답을 받으려면 출발지 IP 주소 경로 필요 공인 대역에서는 사설 대역으로의 경로를 알 수 없으므로 공인IP의 목적지로 서비스를 요청할 때 출발지에서는 사설 IP를 별도의 공인 IP로 NAT해 서비스를 요청.
그래야 목적지에서 출발지 IP를 공인 IP로 확인해 다시 응답할 수 있는 경로를 찾을 수 있음

보안상 SNAT 를 사용하는 경우
회사에서 다른 대외사와 통신 시 내부 IP 주소가 아니라 별도의 다른 IP로 전환해 전송함으로써 대외에 내부의 실제 IP 주소를 숨길 수 있고 대외사의 사내 IP 대역과 중복될 경우 SNAT를 통해 중복되지 않는 다른 IP로 변경해 통신하는 데 사용할 수 있음

로드 밸런서의 구성에 따라 SNAT를 사용하기도 함. 출발지와 목적지 서버가 동일한 대역일 때 로드 밸런서 구성에 따라 트래픽이 로드 밸런서를 거치지 않고 응답할 수 있어 SNAT를 통해 응답 트래픽이 로드밸런서를 거치게 할 수 있음

  • DNAT를 사용하는 경우

로드 밸런서를 사용할 경우
사용자는 서비스 요청을 위해 로드 밸런서에 설정된 서비스 VIP로 서비스를 요청하고 로드밸런서에서는 서비스 VIP를 로드 밸런싱될 서버 실제 IP로 DNAT해서 내보냄.

사내가 아닌 대외망과의 네트워크 구성에도 DNAT 를 사용
사내가 아닌 대외망과의 연동에서는 IP가 중복될 수 있음. IP가 중복되지 않더라도 IP 주소가 제각각이므로 신규 대외사와의 연동마다 라우팅을 개별적으로 설정해야함.
이 경우, 대외망에 NAT 장비를 이용해 대외사의 IP를 특정 IP 대역으로 NAT함. 어떤 대외사든 대외망 전용 NAT 대역으로 변경된 네트워크 대역으로 라우팅을 처리하면 되기 때문에 대외사 추가에 따른 별도 라우팅을 개별적으로 설정할 필요 없으며 사내 IP 와 중복인 IP가 있더라도 라우팅 이슈 없이 구성 가능.

동적 NAT와 정적 NAT

출발지와 목적지의 IP를 미리 매핑해 고정해놓은 NAT를 정적 NAT라고 함.
출발지나 목적지 어느 경우든 사전에 정해지지 않고 NAT를 수행할 때 IP를 동적으로 변경하는 것을 동적 NAT라고 함.

동적 NAT 는 출발지와 목적지가 모두 정이된 것이 아닌 다수의 IP 풀에서 정해지기 때문에 출발지나 목적지 중 한 곳은 적어도 다수의 IP로 구성 된 IP 풀이나 레인지로 설정되어야함.
NAT가 필요할 때 IP 풀에서 어떤 IP로 매핑될 것인지 판단해 NAT를 수행하는 시점에 NAT테이블을 만들어 관리
NAT 테이블은 설정된 시간 동안 유지 일정 시간 동안 통신이 없으면 사라짐(NAT테이블 타임아웃) NAT의 설정은 서비스 흐름을 고려해서 적용.

정적 NAT는 출발지와 목적지 매핑 관계가 특정 IP로 사전에 정의 1:1 NAT 라고 부르기도 함.
서비스 방향에 따라 고려할 필요 없음. 방향성 없이 서비스 흐름을 고려하지 않고 NAT를 설정할 수 있고 타임아웃도 존재하지 않음

동적NAT정적NAT
NAT 설정1:N, N:1, N:M1:1
NAT 테이블NAT 수행 시 생성사전 생성
NAT 테이블 타임아웃동작없음
NAT 수행 정보실시간으로만 확인하거나 별도 변경 로그 저장 필요별도 필요 없음(설정= NAT 내역)

DNS

네트워크 프로토콜은 크게 두가지로 나뉨
실제로 데이터를 실어나르는 데이터 프로토콜
데이터 프로토콜이 잘 동작하도록 도와주는 컨트롤 프로토콜

이중 DNS는 컨트롤 프로토콜에 해당 TCP/IP 프로토콜 체계를 유지하기 위한 주요 컨트롤 프로토콜이며 도메인 주소를 IP 주소로 변환하는 역할.

DNS 소개

www.naver.com 을 202.179.177.21 같은 IP 주소로도 이용할 수 있지만 숫자를 일일이 외우는 것 보다 naver.com 을 외워서 치는 편이 더 편하다.
또한 IP 주소가 변경되더라도 도메인 주소는 그대로 유지한다면 접속 방법 변경 없이 서비스를 그대로 유지할 수 있다.
도메인을 이용하면 지리적으로 여러 위치에서 서비스를 할 수도 있다.

DNS 구조와 명명 규칙

도메인은 역트리 구조로 최상위 루트 부터 Top-Level 도메인, Second-Level 도메인, Third-Level 도메인과 같은 하위 레벨로 원하는 주소를 단계적으로 찾아감. 도메인 주소는 각 계층의 경계를 .으로 표시하고 뒤에서 앞으로 해석

www.naver.com 의 경우
www.naver.com. 에선 com +"." 여기 마지막에 있는 . 루트는 생략이 되고
com < Top-Level
naver < Seconed-Level
www < Third-Level로 구성되어 있다.

도메인 계층은 최대 128 계층까지 구성할 수 있고 계층별 길이는 최대 63바이트까지 사용할 수 있고 도메인 계층을 구분하는 .을 포함한 전체 도메인 네임의 길이는 최대 255바이트까지 사용할 수 있다.
문제는 알파벳, 숫자, -만 사용할 수 있고 대소문자 구분이 없다.

루트 도메인

최상위 영역.
DNS 서버는 사용자가 쿼리한 도메인에 대한 값을 직접 갖고 있거나 캐시에 저장된 정보를 이용해 응답하는데 DNS 서버에 해당 도메인의 정보가 없으면 루트 도메인을 관리하는 루트 DNS에 쿼리하게 됨.

루트 DNS는 DNS 서버를 설치하면 루트 DNS의 IP주소를 기록한 힌트파일을 가지고 있어서 별도로 설정할 필요는 없음.

Top-Level Domain(TLD)

TLD는 IANA에서 구분한 6가지 유형으로 나뉨

  • Generic TLD(gTLD)

특별한 제한없이 일반적으로 사용되는 최상위 도메인 3글자 이상으로 구성
초기엔 7개로 시작했고 필요해 의해 계속 만들어지고 있음
ex) com, edu, gov, net, org...

  • Country Code TLD(ccTLD)

국가 최상위 도메인으로 ISO3166 표준에 의해 규정된 두 글자 국가 코드를 사용
ex) kr, jp cn...
일반적으로 ccTLD를 사용하는 경우 Second-Level TLD에는 gTLD에서 구분한 것처럼 사이트 용도에 따른 코드를 사용
우리나라의 경우 co, go같이 2글자로 줄여서 사용하지만 그대로 사용하는 나라도 있음. 영국은 별도 ccTLD를 사용

대부분의 인터넷 국가 도메인에 적용되는 ISO 3166-1 alpha-2 코드

  • Sponsored(sTLD)

특정 목적을 위한 스폰서를 두고 있는 최상위 도메인. 특정 민족공동체, 전무가 집단, 지리적 위치 등이 속할 수 있음.
ex) .aero, .asia, .edu, .museum...

  • Infrastructure

운용상 중요한 인프라 식별자 공간을 지원하기 위해 전용으로 사용되는 최상위 도메인
.arpa 는 인터넷 안정성을 유지하기 위해 새로운 모든 인프라 하위 도메인이 배치될 도메인 공간 역할을 함
'IN-ADDR.ARPA'가 이런 .arpa 의 하위 도메인 중 하나로 IPv4주소를 도메인 이름에 매핑하는 역방향 도메인에서 사용

  • Generic-restricted(grTLD)

grTLD는 특정 기준을 충족하는 사람이나 단체가 사용할 수 있는 최상위 도메인
ex) .biz, .name, .pro ...

  • Test(tTLD)

개발 프로세스에서 테스트 목적으로 사용하는 최상위 도메인.
.test

DNS 동작 방식

  • 클라이언트 관점에서 DNS 질의 과정

도메인을 IP 주소로 변환하기 위해선 DNS 서버에 도메인 쿼리하는 과정을 거쳐야함
DNS 서버 없이 로컬에 도메인과 IP 주소를 직접 설정해 사용할 수도 있음
로컬에서 도메인과 IP 관리하는 파일을 hosts 파일이라고 함.
hosts 파일에 도메인과 IP주소를 설정해두면 해당 도메인 리스트는 항상 DNS 캐시에 저장

도메인을 쿼리하기 전 먼저 로컬에 있는 DNS 캐시 정보를 확인
캐시를 통해 성능을 향상시키기 위해서.

DNS 캐시 정보에는 확인한 동적DNS캐시, hosts파일, 정적DNS 캐시가 함께 저장되어 있음
DNS 캐시 정보에 필요한 도메인 정보가 없으면 DNS 서버로 쿼리를 수행 DNS 서버로부터 응답을 받으면 그 결과를 캐시에 저장.

  • DNS 시스템 관점에서 도메인에 대한 결과값을 클라이언트에 보내주는 과정

DNS는 분산된 데이터베이스로 서로 도와주도록 설계. 자신이 가진 도메인 정보가 아니면 다른 DNS에 질의해 결과를 받을 수 있음 DNS 기능을 서버에 올리면 DNS 서버는 기본적으로 루트 DNS 관련 정보를 가지고 있음. 클라이언트 쿼리가 자신에게 없는 정보라면 루트 DNS에 쿼리하고 루트 DNS에서는 쿼리한 도메인의 TLD 값을 확인해 해당 TLD 값을 관리하는 DNS가 어디인지 응답.

  • 재귀적 쿼리, 반복적 쿼리

재귀적 쿼리는 쿼리를 보낸 클라이언트에 서버가 최종 결괏값을 반환하는 서버 중심 쿼리
반복적 쿼리는 최종값을 받을 때까지 클라이언트에서 쿼리를 계속 진행하는 방식

도메인의 재귀적 쿼리와 반복적 쿼리

  1. 사용자 호스트는 'zigispace.net' 이라는 도메인 주소의 IP 주소가 로컬 캐시에 저장되어있는지 확인

  2. 로컬캐시에 저장되어 있지 않다면 사용자 호스트에 설정된 DNS 에 'zigispace.net'에 대해 쿼리

  3. DNS 서버는 'zigispace.net'이 로컬 캐시와 자체에 설정되어 있는지 확인하고 없으면 해당 도메인을 찾기 위해 루트 NS 에 .net 에 대한 TLD 정보를 가진 도메인 주소를 쿼리

  4. 루트 DNS 는 '.net'을 관리하는 TLD 네임 서버 정보를 DNS 서버에 응답.

  5. DNS는 TLD 네임 서버에 'zigispace.net'에 대한 정보를 다시 쿼리

  6. TLD 네임 서버는 'zigispace.net' 에 대한 정보를 가진 zigi 네임 서버에 대한 정보를 DNS 서버로 응답.

  7. DNS 서버는 zigi 네임서버에 'zigispace.net'에 대한 정보를 쿼리.

  8. zigi 네임서버는 'zigispace.net'에 대한 정보를 DNS 에게 응답.

  9. DNS는 'zigispace.net' 에 대한 정보를 로컬 캐시에 저장하고 사용자 호스트에 'zigispace.net'에 대한 정보를 응답.

  10. 사용자 호스트는 DNS로부터 받은 'zigispace.net'에 대한 IP 정보를 이용해 사이트에 접속.


참고자료

https://thebook.io/007046/ch07/02/03-03/
https://zigispace.net/1107


도메인에 대해서 공부하면서 그 전 네트워크를 공부할 때와는 다르게 많이 접해본 느낌을 받아서 조금 더 와닿았다.

profile
열심히 공부하자

0개의 댓글