4. Network Device
통신을 위한 네트워크 주요 기술
NAT(Network Address Translation)
- IP 주소를 다른 IP 주소로 변환해 라우팅을 원활히 해주는 기술
- 1:1 이 기본
PAT(Port Address Translation)
- 여러 개의 IP 주소를 하나의 IP 주소로 변환하는 기술
- NART(Network Address Port Translation) 인데 줄여서 PAT로 사용
- NAT의 일종
AFT(Address Family Translation)
- IPv4의 주소를 IPv6로 변환하거나 반대로 변환하는 기술
- NAT의 일종
용도와 필요성
IPv4의 주소 고갈 문제를 해결
- 주소 고갈 해결 방법
- 클래스리스를 이용한 서브네팅(CIDR)
- NAT / PAT
- IPv6
보안 강화
- 외부와 통신할 때 내부 IP를 다른 IP로 변환해 통신하면 외부에 사내 IP 주소 체계를 숨길 수 있음
IP 주소 체계가 같은 두 개의 네트워크 간 통신을 가능하게 해줌
- 두 개의 다른 네트워크가 동일한 Private IP를 이용해서 내부 네트워크가 구성된 경우 NAT를 이용해서 주소 변환을 한 번 더 수행하면 내부 네트워크의 주소를 수정하지 않아도 통신이 가능
불필요한 설정 변경을 줄일 수 있음
- 외부에서 사용 가능한 Public IP 로 서버를 설정한다면 ISP를 변경하거나 서버를 이전한다면 서버의 설정을 변경해야 하는데 Private IP를 이용해서 설정하고 NAT/PAT 를 이용해서 외부와 연결한다면 ISP 변경이나 이전을 했을 경우 외부 설정 변경만으로 적용이 가능
NAT의 단점
- 네트워크 운영자 입장에서는 IP가 변환되면 장애가 발생했을 때 문제 해결이 힘듦
- 애플리케이션 입장에서는 개발할 때 더 많은 고려사항이 생김
- IPv6 전환은 IPv4 주소 부족 해결이라는 목표는 어느 정도 해결이 되어서 NAT를 없애려는 움직임도 있음
- NAT로 인해 주소가 변환되면서 단말 간 직접적인 연결성이 무너졌고, 이로 인해 개발자들이 애플리케이션을 제작할 때 NAT 환경을 항상 고려해야하는 상황이 벌어짐
- NAT 밑에 있는 단말도 직접 연결하게 도와주는 홀 펀칭(Hole Punching) 기술이 나오고 이 기술을 이용하기 위해서 애플리케이션이 더 복잡해지는 악순환이 발생
NAT 동작 순서
- 출발지 사용자는 10.10.10.10 이라는 Private IP를 소유하고 있는 상황에서 목적지 IP는 20.20.20.20 이고 포트는 80번인 경우
- 출발지 서비스 포트는 임의로 할당이 되는데 2000번으로 가정
- NAT 역할을 수행하는 장비에서는 사용자가 보낸 패킷을 수신한 후 NAT 정책에 따라 외부 네트워크와 통신이 가능한 Public IP 11.11.11.11 로 IP 주소를 변환하고 이때 변경 전후의 IP 주소는 IP 테이블에 저장
- NAT 장비에서는 출발지 주소를 11.11.11.11 로 변경해서 목적지 웹 서버로 전송
- 패킷을 수신한 웹 서버에서는 사용자에게 응답을 보내는데 응답이므로 수신과 반대로 출발지는 웹 서버 20.20.20.20 이 되고 목적지는 NAT 장비에 의해 변환된 11.11.11.11 로 사용자에게 전송
- NAT 장비는 자신의 NAT 테이블을 확인해서 목적지 IP에 대한 원래 패킷을 발생시킨 출발지 IP 주소가 10.10.10.10 을 확인한 후 사용자에게 전송함
PAT 동작 순서
- 출발지 사용자는 10.10.10.10 이라는 Private IP를 소유하고 있는 상황에서 목적지 IP는 20.20.20.20 이고 포트는 80번인 경우
- 출발지 서비스 포트는 임의로 할당이 되는데 2000번으로 가정
- PAT 역할을 수행하는 장비에서는 사용자가 보낸 패킷을 수신한 후 PAT 정책에 따라 외부 네트워크와 통신이 가능한 Public IP 11.11.11.11 로 IP 주소를 변환하고 이때 변경 전후의 IP 주소 뿐만 아니라 포트번호인 2000번까지 PAT 테이블에 저장
- PAT 장비에서는 출발지 주소를 11.11.11.11 로 변경하고 서비스 포트도 3000번으로 변경해서 목저지 웹 서버로 전송
- 패킷을 수신한 웹 서버에서는 사용자에게 응답을 보내는데 응답이므로 수신과 반대로 출발지는 웹 서버 20.20.20.20 이 되고 목적지는 PAT 장비에 의해 변환된 11.11.11.11 로 사용자에게 전송
- PAT 장비는 자신의 PAT 테이블을 확인해서 목적지 IP에 대한 원래 패킷을 발생시킨 출발지 IP 주소가 10.10.10.10 에 2000번 포트인 것을 확인한 후 사용자에게 전송
NAT 와 PAT의 차이점은 NAT의 경우는 IP만 변환을 하지만, PAT의 경우는 포트도 변환을 수행함
- 사용할 수 있는 포트가 제한적이어서 서비스 포트는 재사용하게 되는데, 서비스 포트가 동시에 모두 사용 중이거나 재사용할 수 없을 때는 PAT가 제대로동작하지 않음
- 동시 사용자가 많은 때는 Pulic IP를 하나가 아닌 Pool 로 구성해서 사용해야 함
- PAT는 다수의 IP가 있는 출발지에서 목적지로 갈 때 NAT 테이블이 생성되고 응답에 대해 NAT 테이블을 참조할 수 있지만 PAT IP가 목적지일 때는 해당 IP가 어느 IP에 바인딩 되어 있는지 확인할 수 없음
(비교)
| Static NAT (1:1) | PAT (N:1, NAT Overload) |
|---|
| 변환 대상 | IP 주소만 변환 | IP 주소 + 포트 번호 변환 |
| IP 매핑 | 사설 IP (1) : 공인 IP (1) | 사설 IP (N) : 공인 IP (1) |
| 주요 목적 | 내부 서버의 외부 노출 (웹/매일 등) | 공인 IP 절약, 다수의 사용자 통신 |
| IP 효율성 | 낮음(IP가 많이 필요함) | 매우 높음(1개로 충분함) |
| 식별 방법 | 공인 IP 주소 자체로 식별 | 포트 번호로 내부 사용자 식별 |
SNAT, DNAT
동적 NAT 와 정적 NAT
Dynamic NAT
- 다수의 IP 풀에서 필요할 때마다 매핑을 하는 형태
Static NAT
- 출발지와 목적지 매핑 관계가 특정 IP 사전에 정의되는 형태
(비교)
| Dynamic NAT | Static NAT |
|---|
| NAT 설정 | 1:N, N:1, N:M | 1:1 |
| NAT 테이블 | NAT 수행 시 설정 | 사전 생성 |
| NAT 테이블 타임아웃 | 동작 | 없음 |
| NAT 수행 정보 | 실시간으로 확인, 별도 변경 로그 저장 필요 | 별도 필요없음 - 설정이 NAT 내역 |
라우터에서 설정
-
R1과 R2를 Ethernet0 로 연결 - 외부로 나가는 것(Public IP, 192.168.1.0/24)
-
R1과 PC를 Ethernet1 로 연결 - 내부 네트워크(Private IP, 10.1.1.0/24)
-
Router 2번
- R2# configure terminal
- R2(config)#interface ethernet2/0
- R2(config-if)#ip address 192.168.1.254 255.255.255.0
- R2(config-if)#no shutdown
- R2(config-if)#exit
- R2(config)#exit
- R2#show interfaces ethernet2/0
-
Router 1번
- R1# configure terminal
- R1(config)#interface ethernet2/0
- R1(config-if)#ip address 192.168.1.1 255.255.255.0
- R1(config-if)#no shutdown
- R1(config-if)#interface ehternet2/1
- R1(config-if)#ip address 10.1.1.1 255.255.255.0
- R1(config-if)#no shutdown
- R1(config-if)#exit
- R1(config)#exit
- R1#show interface etehrnet2/0
- R1#show interface etehrnet2/1
-
PC 설정
- PC1> ip 10.1.1.2 255.255.255.0 10.1.1.1
Static NAT 설정
- 정적 NAT를 활성화
- Router(config)#ip nat inside source static [local IP][전역 IP]
- 내부 인터페이스를 설정
- Router(config)#ip nat inside
- R1(config)#interface ethernet2/1
- R1(config)#ip nat inside
- 외부 인터페이스를 설정
- Router(config)#ip nat outside
- R1(config)#interface ethernet2/0
- R1(config)#ip nat outside
- 확인
- Router(config)#show ip nat translations
Dynamic NAT 설정
-
Public IP(외부 주소) 풀을 설정
- Router(config)# ip nat pool [이름][시작 IP] [끝 IP] netmask [subnetmask]
-
변환될 주소의 범위를 설정
- Router(config)# access-list [번호] permit [네트워크 주소][와일드카드 마스크]
-
동적 NAT를 활성화
- Router(config)# ip nat inside source list [번호] pool [이름]
-
내부 인터페이스 활성화
- Router(config-if)# ip nat inside
-
외부 인터페이스 활성화
- Router(config-if)# ip nat outside
PAT 설정
- Router(config)# ip nat inside source list [번호] interface [실제 인터페이스] overload
DNS (Domain Name Service)
도메인 주소를 IP 주소로 변환하는 역할을 수행
- 클라우드 기반 인프라 구성이 많아지면서 인프라가 빈번히 변경되어 DNS 설계가 중요해짐
- MSA(Micro Service Architecture) 기반의 서비스 설계가 많아지면서 다수의 API를 사용하다보니 사용자의 호출 뿐만 아니라 서비스 간 API 호출이나 인터페이스가 많아져 DNS 설계가 중요해짐
DNS 구조와 명명 규칙
- 도메인은 계층 구조여서 수많은 인터넷 주소 중 원하는 주소를 효율적으로 찾아갈 수 있음
- 역트리 구조로 최상위 루트부터 Top-Level 도메인, Second-Level 도메인, Third-Level 도메인 과 같이 하위 레벨로 원하는 주소를 단계적으로 찾아감
- 계층의 경계를
. 으로 표시하고 뒤에서 앞으로 해석함
Third.Second.Top 과 같은 형태
www(Third-Level).naver(Second-Level).com(Top-Level)
- 도메인 계층은 128계층까지 구성할 수 있으며 계층별 길이는 최대 63바이트까지 사용할 수 있고, 도메인 계층을 구분하는
. 을 포함해서 전체 도메인의 길이는 최대 255바이트까지 사용 가능
- 문자는 알파벳, 숫자, - 만 가능하며 대소문자 구분 안 함
Root Domain
- 최상위 영역
- 도메인 요청을 하면 DNS 서버가 이를 받아서 처리를 하는데, 도메인의 정보가 없으면 루트 도메인을 관리하는 Root DNS에 질의하게 됨
- Root DNS 는 전세계에 13개가 있음
- DNS 서버를 설치하면 루트 DNS의 IP를 기록한 힌트 파일(hint file) 을 가지고 있어, 루트 DNS 관련 정보를 설정하지 않아도 됨
Top-Level Domain (TLD)
- IANA 에서 6가지 유형으로 구분
gTLD (일반적으로 사용되는 최상위 도메인) : com, edu, gov, int, mil, net, org
ccTLD (국가 최상위 도메인)
sTLD (특정 목적을 위한 스폰서를 두고 있는 최상위 도메인) : aero, asia, edu, museum 등
infrastructure : .arpa(.IN-ADDR.ARPA 가 하위 도메인으로 IPv4 주소를 도메인 이름에 매핑하는 역방향 도메인)
grTLD (특정 기준을 만족하는 사람이나 단체가 사용할 수 있는 최상위 도메인) : biz, name, pro 등
tTLD (테스트용) : test
⭐️ DNS 주요 레코드
A record
- 기본 레코드
- 도메인 주소를 IP 주소로 변환하는 레코드 (Domain → IP address)
- 사용자가 DNS에 질의한 도메인 주소를 A 레코드에 설정한 IP 주소로 응답
- 기본적으로는 한 개의 도메인 주소와 한 개의 IP 주소가 1:1로 매핑되지만 동일한 도메인을 가진 A 레코드를 여러 개 생성하는 것도 가능함
- 다수의 도메인에 동일한 IP를 매핑한 A 레코드를 만들 수 있음
- 서버 한 대에 여러 웹 서비스를 구동해야 한다면 여러 도메인에 동일한 IP를 매핑하고,
HTTP 헤더의 HOST 필드에 도메인을 명시해서 웹 서버를 구분하여 서비스할 수 있음
AAAA record
CNAME(Canonical NAME) record
- 별칭 이름을 사용하게 해주는 레코드
- 레코드 값에 IP 주소를 매핑하는 A 레코드와 달리 CNAME 레코드는 도메인 주소를 매핑함
- 네임서버가 CNAME 레코드에 대한 질의를 받으면 CNAME 레코드에 설정된 도메인 정보를 확인하고, 그 도메인 정보를 내부적으로 다시 질의한 결과 IP 값을 응답함
- CNAME의 대표적인 것 : www
- adam.net 과 www.adam.net 을 각각 A 레코드로 매핑하면 IP 주소가 변경될 때 두 개의 레코드 값을 모두 변경해야 함
- adam.net 만 A 레코드로 IP 주소를 매핑하고 www.adam.net 은 CNAME 으로 adam.net 으로 매핑하면 IP 주소가 변경될 때 adam.net 만 변경해도 동일한 결과를 만들어 냄
- 클라우드 환경에서 CNAME 으로 도메인 설정을 많이 함
SOA(Start Of Authority) record
- 도메인 영역에 대한 권한을 나타내는 레코드
- 현재 네임서버가 이 도메인 영역에 대한 관리 주체임을 의미하므로 해당 도메인에 대해서는 다른 네임 서버에 질의하지 않고 직접 응답함
NS(Name Server) record
MX(Mail eXchange) record
White Domain
- 정상적으로 발송하는 대량 이메일이 RBL(Realtime Blackhole List, Blocking 이라고도 함) 이력으로 간주되어 차단되는 것을 예방하기 위해 등록된 개인이나 사업자에 한해 국내 주요 포털 사이트로의 이메일 전송을 보장해주는 제도
- KISA 에서는 불법적인 방법으로 발송되는 스팸 메일 차단활동을 하고 있는데, 불법적인 스팸 메일을 발송하는 사이트를 실시간 블랙리스트 정보로 관리해서 메일 발송을 제한하는데, 이 실시간 블랙리스트를 RBL 이라고 함
- 현재 보유중인 도메인을 화이트 도메인으로 등록하려면 KISA RBL 사이트에서 화이트 도메인으로 등록하면 됨
- 사전에 해당 도메인에 SPF 레코드를 설정해야 함
한글 Domain
- 퓨니코드로 DNS에 도메인을 생성해야 함
- 퓨니코드: 다국어 도메인이 아스키로 변환된 구문인데 xn 으로 시작
GSLB (Global Server/Service Load Balancing)
- DNS 에서 동일한 레코드 이름으로 서로 다른 IP 주소를 동시에 설정할 수 있음
- 이렇게 하면 도메인 질의에 따라 응답받는 IP 주소를 나누어 로드밸런싱 할 수 있음
- 이것을 DNS Load Balancing 이라고 함
- DNS 만 이용한 로드밸런싱으로는 정상적인 서비스를 하지 못할 수 있음
- DNS는 설정된 서비스 상태의 정상 여부를 확인하지 않고 도메인에 대한 질의에 대해 설정된 값을 무조건 응답함
- DNS에 저장된 레코드와 매핑된 서비스가 모두 정상일 때는 문제가 없지만, 특정 서비스에 문제가 있을 때 DNS 서버는 이를 감지하지 못해 사용자의 도메인 질의 요청에 비정상적 상태인 서비스 IP 주소를 응답한 경우 사용자는 해당 서비스에 접근할 수 없음
- DNS 서버는 각 레코드에 대한 서비스 체크가 이루어지지 않고 설정된 값에 따라 동작하므로 서비스 가용성 방법으로는 부적함
→ GSLB 는 DNS의 이런 문제점을 해결해서 도메인을 이용하여 로드밸런싱 하는 것을 도와줌
- GSBL은 DNS와 동일하게 도메인 질의에 응답해주는 역할과 동시에 로드밸런서처럼 등록된 도메인에 연결된 서비스가 정상적인지 헬스체크를 수행
DHCP
- 호스트가 네트워크와 통신을 하려면 물리적 네트워크 구성은 물론 IP 주소, SubnetMask, Gateway 와 같은 네트워크 정보와 DNS 주소 설정도 필요
- 이런 네트워크 정보를 호스트에 적용하려면 사용자가 직접 설정하거나 이런 정보를 할당해주는 서버를 이용해 자동으로 설정해야 함
- 수동으로 IP와 네트워크 정보를 직접 설정하는 것을 정적 할당이라고 하고 자동으로 설정하는 것을 동적 할당이라고 함
- 데이터 센서의 서버팜과 운영망에서는 주로 정적 할당을 이용하지만 PC IP를 자동으로 할당 받는 동적 할당 방식을 많이 사용
- 클라우드 환경에서 인프라를 임대해서 사용할 때는 기본적으로 동적 할당인데, 정적 할당으로 수정할 수 있음
- 예전에는 보안 문제 때문에 정적 할당을 사용했는데, 지금은 동적 할당 방식을 이용하면서도 보안을 강화하고 쉽게 관리하도록 도와주는 서비스와 장비가 대중화 되어서 동적 할당 방식이 많이 사용됨
- IP를 동적으로 할당하는데 사용되는 프로토콜이 DHCP
- DHCP를 사용하면 사용자가 직접 입력해야 하는 IP 주소, 서브넷 마스크, 게이트웨이, DNS 정보를 자동으로 할당받아 사용
- 사용자는 별도의 IP 설저 작업 없이 편리하게 네트워크에 접속할 수 있고, 사용하지 않는 IP 정보는 회수되어 사용하는 경우에만 재할당되어 사용자 이동이 많고 한정된 IP 주소를 가진 경우 유용하게 사용 가능
DHCP Protocol
- BOOTP(Bootstrap Protocol) 이라는 프로토콜을 기반으로 함
- DHCP는 BOOTP와 유사하게 동작하지만 BOOTP 에서 지원하지 않는 몇가지 기능이 추가된 확장 프로토콜
- DHCP와 BOOTP 프로토콜 사이에는 호환성이 있어서 BOOTP 와 DHCP 에서 사용되는 서비스 포트가 같고 BOOTP 클라이언트가 DHCP 서버를 사용하거나 DHCP 클라이언트가 BOOTP 서버를 사용해 정보를 수신할 수 있음
- DHCP는 서버와 클라이언트로 동작하는데, 클라이언트의 서비스 포트는 68번이고 서버의 서비스 포트는 67번
- 이 서비스는 UDP 프로토콜
리눅스에서 DHCP 서버 만들기
default-lease-time 초;
max-lease-time 초: 최대 임대시간
subnet 네트워크주소 netmask 서브넷마스크 {
range 실제서비스시작주소 실제서비스끝주소;
option routers 디폴트게이트웨이주소;
option domain-name-server DNS 주소;
}
systemctl start dhcpd.service
네트워크 확인을 위한 명령어
ping (Packet InterNet Groper)
- IP 네트워크를 통해 특정 목적지까지 네트워크가 잘 동작하고 있는지 확인하는 네트워크 명령어
- 상대방 호스트가 살아 있는지 확인하는 것이 최대 목표지만, 두 호스트 간의 통신을 위한 경로가 정상적으로 구성되어 있는지 함께 체크 가능
- ICMP (Internet Control Message Protocol) 이라는 인터넷 프로토콜을 사용하고 ICMP의 제어 메시지를 통해 네트워크 상태를 파악할 수 있음
ping [옵션] [목적지 IP 주소]
- 확장 ping을 이용하면 ping 을 체크하는 출발지 IP를 지정할 수 있음
- 옵션
-c 개수 : 몇번 전송할지를 설정. 기본값은 무제한
-i 주기 : 기본 설정값은 1초이고, 슈퍼 유저의 경우 0.2 이하로 설정 가능
-I 인터페이스 : 패킷을 보낼 때 출발지 주소를 지정하는 것으로 실제 IP 값을 지정하거나 인터페이스 이름을 지정
-s 패킷사이즈 : 패킷의 크기로 기본 설정 값은 56바이트, ICMP 헤더가 추가로 붙어서 64바이트를 송신
traceroute
- 출발지로부터 통신하거나 목적지까지의 네트워크 경로를 확인할 때 사용하는 명령
- 목적지까지 도달하지 못하는 경우 어느 구간에 문제가 발생했는지 찾을 때 사용
traceroute [옵션] [목적지 주소]
- 옵션(Linux)
-i : icmp 기반
-T : TCP SYN 으로 수행
-n : IP를 도메인이 아닌 숫자 형식으로 표시
-p port : 특정 포트를 지정해서 수행
-s 소스주소 : 출발지 IP 변경
tcptraceroute
- traceroute는 경로 정보만 확인 가능
- 서비스 포트가 사용 가능한지 확인
- 기본적으로 제공되지 않아서 설치해서 사용
tcproute [옵션] [목적지 주소]
- 옵션
-p PORT : 서비스 포트 지정
-d : 숫자 형태로 IP를 출력
—http : HTTP Request 를 보내 접속 확인
netstat
- 서버의 네트워크 상태 확인에 이용
- tcp 확인
- 필터링
netstat -ant4 | grep LISTENING
ss(socket statistics)
- netstat 보다 결과를 빠르게 확인할 수 있고 더 다양한 정보를 조회할 수 있음
ss [옵션] [필터]
- 옵션
-a : 전체 소켓 표시
-l : LISTENING
-i : 소켓에 대한 자세한 정보
-p : 현재 소켓에서 사용 중인 프로세스 표시
-n : 서비스 이름이 아닌 실제 포트 번호로 서비스 포트를 표기
-4, 6 : IPv4, IPv6 인 것만 조회
-s : 프로토콜 별 통계
-t : TCP 만
-u : UDP 만
nslookup
- IP 를 찾고자 할 때 사용
set type=레코드 를 이용해서 조회 가능
- 레코드(A, AAAA, ANY, MX, NS, PTR)
telnet
서비스를 테스트할 때 접근이 불가능한 경우
- 도착지 단말이 꺼져 있거나 네트워크에 정상적으로 연결되어 있지 않은 경우
- 도착지 단말의 네트워크 설정에 문제가 있는 경우
- 출발지로부터 해당 서비스가 동작 중인 서버까지의 경로가 정상적으로 잡혀 있지 않은 경우
- 보안 장비에 의해서 차단된 경우
- 도착지 단말의 방화벽이나 iptables와 같은 보안 기능에서 차단된 경우
- 추가적인 테스트
- 경로의 문제라면 ping 테스트와 traceroute 명령어를 이용해서 문제 파악이 가능
- 보안 장비에 차단된 경우
- ping과 traceroute 가지고 어느 정도 확인 가능
- 단말의 방화벽 기능을 일시적으로 내리고 테스트 수행
- netstat 와 ss 명령어를 이용헤서 서비스가 정상적으로 동작하고 있는지 파악