Gom3rye
네트워크 장비 본문
Switch
STP (Spanning Tree Protocol)
단일 장애점(SPoF: Single Point of Failure)
- 하나의 시스템이나 구성 요소에서 고장이 발생했을 때 전체 시스템이 멈추는 구성 요소
- 네트워크에서도 이 문제를 해결하기 위해서 이중화나 다중화된 네트워크를 디자인하고 구성한다.
- ISP - Gateway - Firewall - Switch - Server
- 스위치 하나에 서버를 연결하면 스위치 자체가 단일 장애점이 된다.
- 서버를 배치하는 네트워크에서는 스위치를 2개 이상으로 디자인해서 사용한다.
Loop
- 네트워크 연결이 고리처럼 되돌아 오는 형태로 구성된 상황 (데이터가 계속 뱅글뱅글 도는 형태로 전송될 수 있다.)
- 1번째 문제: 브로드캐스트 스톰
- 루프 구조로 연결된 네트워크에서 브로드캐스트를 발생시키면 스위치는 이 패킷을 패킷이 유입된 포트를 제외한 모든 포트에 전송한다.(플러딩)
- 플러딩된 패킷은 다른 스위치로 전송되고 이 패킷을 받은 스위치는 유입된 포트를 제외한 모든 포트에 전송을 하게 된다.
- 3계층에서는 TTL(Time to Live)이라는 패킷 수명을 가지고 있지만 2계층에서는 이러한 TTL 같은 메커니즘이 없다.
- 2계층에서는 이런 문제로 인해 스위치와 네트워크에 연결된 단말 간 통신이 거의 불가능해질 수 있다.
- 2번째 문제: 스위치 MAC 러닝 중복
- 유니캐스트에서 발생하는 문제
- 스위치는 출발지 MAC 주소를 학습하는데 직접 전달되는 패킷과 스위치를 돌아 들어간 패킷 간의 포트가 달라서 MAC 주소 테이블을 잘못 학습하게 된다.
이를 STP로 해결할 수 있다!!
- 루프를 확인하고 적절히 포트를 사용하지 못하게 만들어서 루프를 예방하는 매커니즘
- 스위치는 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 이용해서 스위치 간에 정보를 전달하고 이렇게 수집된 정보를 바탕으로 전체 네트워크 트리를 만들고 루프 구간을 확인한다.
- 루프가 발생하지 않도록 논리적으로 끊어야 하는데 이를 하려면 네트워크 구조를 알아야 하고 BPDU를 통해 구현!
- 스위치가 추가되면 루프를 막기 위해서 스위치 포트에 트래픽이 흐르지 못하도록 한다.
- BPDU를 기다려서 루프 발생 여부를 학습하고 구조를 파악한 후 트래픽을 흘리거나 루프 구조인 경우 차단 상태를 유지한다.
- 스위치를 추가하면 통신하는데 50초 정도가 소요된다.
가끔 스위치에 IP를 부여하는 경우도 있다.
→ 스위치는 MAC Address만 알면 통신할 수 있기 때문에 IP가 필요 없는데 IP를 부여하는 이유:
- 스위치를 원격에서 관리하기 위해서 (외부에서 접속해서 관리할 목적으로 IP를 부여하는 경우도 있다.)
Router
요새는 라우터 대신에 L3 Switch를 사용하기도 한다.
- Router는 3계층에서 동작하는 장비
- 경로를 지정해주는 역할을 수행하는데 라우터에 들어오는 패킷의 목적지 IP 주소를 확인하고 자신이 가진 경로(Route) 정보를 가지고 패킷을 최적의 경로로 포워딩 한다.
- 스위치는 2계층 장비이지만 라우터처럼 동작하는 L3 스위치도 있다.
- 예전에는 라우터의 기능은 소프트웨어로 구현하고 스위치는 하드웨어 형태로 구현했는데 최근에는 전부 하드웨어로 구현해서 라우터와 L3 스위치를 구분하는게 어려워졌다.
라우터의 동작 방식과 역할
- 경로 지정
- 경로 정보를 모아서 라우팅 테이블을 만들고 패킷이 라우터로 들어오면 패킷의 도착지 IP 주소를 확인해서 경로를 지정하고 패킷을 포워딩 한다.
- IP 주소 중 네트워크 부분만 확인해서 네트워크에 해당하는 라우터에게 전달한다.
- 네트워크 정보를 알아내는 방법은 관리자가 직접 경로 정보를 입력하는 방법이 있고 라우터끼리 서로 경로 정보를 자동으로 교환하는 방법이 있다.
- 브로드캐스트 컨트롤
- 스위치에서의 플러딩
- 스위치는 패킷의 도착지 주소를 모르면 어딘가에 존재할지 모를 장비와의 통신을 위해 플러딩해서 패킷을 모든 포트에 전송한다.
- LAN 어딘가에 도착지가 있을 수 있다고 가정하고 패킷을 전체 네트워크에 플러딩하는 것이 쓸모 없는 패킷이 전송되어 네트워크 성능에 무리가 갈 수 있지만 LAN은 크기가 작아서 플러딩에 대한 영향이 작고 도착지 NIC에서 자신의 주소와 도착지 주소가 다르면 폐기하기 때문에 플러딩 작업이 네트워크 성능에 큰 무리를 주지는 않는다.
- 라우터의 전송
- 라우터는 패킷을 원격지로 보내는 것을 목표로 개발이 돼서 3계층에서 동작하고 분명한 도착지 정보가 있을 때만 통신을 허락한다. (이게 스위치와의 다른 점)
- 라우터가 스위치처럼 목적지가 없거나 목적지가 명확하지 않은 패킷을 플러딩하게 되면 인터넷에 쓸모없는 패킷이 가득 차게 된다.
- 라우터는 바로 연결되어 있는 네트워크 정보를 제외하고 경로 습득 설정을 하지 않으면 패킷을 포워딩할 수 없다. (스위치는 내 네트워크 안에만 있으니까 사실 그렇게 많이 연결되어 있지 않는다. 스위치는 내가 상대방을 알건 모르건 그냥 무조건 보내지만 라우터는 모르는 상대에겐 보내지 않는다.)
- 라우터의 기본 동작은 멀티캐스트 정보를 습득하지 않고 브로드캐스트 패킷을 전달하지도 않는다.
- 스위치에서의 플러딩
- 프로토콜 변환
- 초창기에는 다양한 프로토콜로 네트워크가 구성되어 있어서 라우터가 프로토콜을 변환해서 서로 간에 통신을 할 수 있도록 해준다.
- 최근에는 통신의 표준이 거의 이더넷으로 수렴되어서 이 역할은 많이 줄어들었다.
- LAN에서 인터넷을 사용하는 경우 WAN 기술로 변환되어야 하기 때문에 이 역할을 라우터가 담당한다.
- 경로 지정
- 라우터가 패킷을 처리할 때 수행하는 작업
- 경로 정보를 이용해서 경로 정보를 정리하는 역할
- 정리된 경로 정보를 이용해서 패킷을 포워딩하는 역할
- 라우터가 패킷을 처리할 때 수행하는 작업
- 라우팅 동작과 라우팅 테이블
- 현재 인터넷에서는 단말부터 목적지까지의 경로를 모두 책임지는 것이 아니고 인접한 라우터까지만 경로를 지정하면 인접 라우터에서 최적의 경로를 다시 파악해서 라우터로 패킷을 포워딩한다. (포워딩: 누가 보냈는지를 기억한다.)
- 네트워크를 한 단계씩 뛰어넘는다는 의미로 Hop by Hop 라우팅이라고 하고 인접한 라우터를 Next Hop 이라고 한다.
- next hop을 지정하는 방법:
- 라우터의 IP를 지정하는 방법
- 라우터의 나가는 인터페이스를 지정하는 방법 (포트라는 용어 안 쓰고 인터페이스 사용)
- 라우터의 나가는 인터페이스와 IP를 같이 지정하는 방법
- 라우팅 테이블에 저장하는 데이터
- 목적지 주소
- 넥스트 홉 주소, 나가는 로컬 인터페이스
- 루프가 없는 라우터
- 3계층의 IP 헤더에는 TTL이라는 필드가 있고 이 필드는 패킷이 네트워크에 살아 있을 수 있는 시간(Hop)을 의미한다.
- 경로 정보를 얻는 방법
- 다이렉트 커넥트: 직접 연결하는 방식
- Static Routing: 직접 경로를 설정하는 방식
- 관리자가 경로를 직접 지정하기 때문에 라우팅 정보를 매우 직관적으로 설정, 관리할 수 있다.
- 인터넷은 전부 다 이쪽으로 나간다. 정도 밖에 안 한다.
- Dynamic Routing: 직접 경로를 설정하지 않고 동적으로 경로를 받아서 처리하는 방식
- 같은 회선으로 연결되어 있으면 반드시 네트워크 대역이 같아야 한다.
- 네트워크 규모가 커지면 Static Routing으로는 한계가 있다.
- 라우터끼리 자신이 알고 있는 경로 정보나 링크 상태 정보를 교환해서 전체 네트워크 정보를 학습한다.
- 라우터는 잘못 만지면 네트워크가 다 죽어버린다.
Load Balancer
4계층 장비가 등장하게 된 이유는 IP 부족으로 NAT나 PAT 기술이 등장하고 보안용 방화벽, 프록시 같은 장비들이 등장하면서 4계층 이상에서 동작하는 장비가 필요해졌다.
- 서버나 장비의 부하를 분산하기 위해 사용하는 장비
- 트래픽을 분배해주는 기능을 수행하는데 4계층 이상에서 동작하면서 4계층 정보, 애플리케이션 정보를 확인하고 수정하는 기능
- 가장 많이 사용되는 곳이 웹 서버의 부하 분산
- 작은 시스템 여러 대를 운영하더라도 사용자는 서버 배치와 상관없이 하나의 서비스로 접근이 가능해야 하는데 로드밸런서가 서비스에 사용되는 대표 IP 주소를 서비스 IP로 갖고 그 밑에 시스템이 늘어나면 로드 밸런서가 각 시스템의 실제 IP로 변경해서 요청을 보낸다.
- 웹 애플리케이션 뿐 아니라 FWLB(FireWall Load Balancing), VPNLB(VPN Load Balancing) 등과 같은 다양한 서비스를 위해 사용된다.
- 특징
- 세션 테이블: 통신 방향성이나 순서와 같은 통신 전반에 대한 관리를 위한 테이블
- Symmetric 경로 요구: InBound와 OutBound 경로
- 정보 변경: IP 주소가 변경되며 확장된 L7 로드 밸런서는 애플리케이션 프로토콜 정보도 변경된다.
- 세션 장비(4계층 장비)의 이런 요소가 서비스에 영향을 미치므로 네트워크 통신 중간 위치에 방화벽, NAT, 로드 밸런서와 같은 장비가 있을 경우 네트워크 인프라 뿐만 아니라 시스템 설계와 애플리케이션 개발에도 세션 장비에 대한 고려가 필요하다.
- 종류
- L4 로드 밸런싱
- TCP, UDP(포트 넘버) 기반으로 로드 밸런싱을 수행
- 포트까지는 구별할 수 있다.
- L7 로드 밸런싱
- HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행
- HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산하는 것이 가능
- 이런 장비를 ADC(Application Delivery Controller)라고 부르면 Proxy 역할을 수행
- Squid나 Nginx의 리버스 프록시와 유사한 기능
- 일반적인 데이터센터에서는 L4와 L7을 모두 지원하는 장비를 가지고 설정에 따라 역할을 수행한다.
- 클라우드 환경에서는 L4와 L7을 지원하는 컴포넌트를 계층 별로 구분해서 사용한다.
- Aws → NLN (L4 로드 밸런싱), ALB (L7 로드 밸런싱)
- L4 로드 밸런싱
- L4 스위치 : 로드 밸런서 기능이 있는 스위치로 부하 분산, 성능 최적화, 리다이렉션 기능을 제공한다.
- 동작을 하려면 Virtual Server, Virtual IP, Real Server와 Real IP를 설정해야 한다.
- 가상 서버는 사용자가 바라보는 실제 서비스이고 가상 IP는 사용자가 접근해야 하는 IP이다.
- 시스템 확장 방법
- Scale Up: 기존 시스템을 업그레이드 (그냥 하드웨어 사서 갖다 꽂거나 하면 되니까 더 쉽다.)
- 장점: 시스템 설계 변경 없이 서비스 사용량을 쉽게 늘릴 수 있다.
- 일반적으로 대형 Unix 시스템에서 사용을 해왔다.
- 단점: 시스템이 커질 수록 비용이 기하급수적으로 증가한다.
- 반대되는 개념은 Scale Down
- Scale Out: 같은 용량의 시스템을 여러 대 배치, 반대되는 개념은 Scale In
- 장점: 더 적은 비용으로 scale up 보다 성능 향상이 가능하고 여러 대의 시스템에 로드를 적절히 분산해서 하나의 시스템에 장애가 발생하더라도 서비스에 미치는 영향이 없도록 결함 허용 시스템을 구축할 수 있다.
- 단점: 복잡한 아키텍처를 이해하고 프로세스나 네트워크 장비가 추가로 필요하다. (공부량이 많아짐, 솔루션즈 아키텍트 같은 직업이 생겨남)
- 쿠버네티스는 대부분 Scale Out을 사용한다. → 스위치를 알아야 한다.
- Scale Up: 기존 시스템을 업그레이드 (그냥 하드웨어 사서 갖다 꽂거나 하면 되니까 더 쉽다.)
Firewall
네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 허용(Permit)하거나 차단(Deny)하는 장비
- 일반적으로는 네트워크에서 보안을 담당하는 장비를 전부 방화벽이라고 하지만 정확하게는 네트워크 3, 4계층에서 동작하고 세션을 인지 및 관리하는 SPI(Stateful Packet Inspection) 엔진을 기반으로 동작하는 장비를 방화벽이라고 한다.
- 하드웨어, 운영체제, 소프트웨어 에서도 구현이 가능하다.
- 방화벽: 들어오고 나가는 것 간섭
- 프록시: 나가는 것만 간섭, 들어오는 것은 간섭하지 않는다.
네트워크 주요 기술
NAT / PAT
프라이빗 IP (10.0.2.15)로 인터넷을 이용할 수 있는 이유: NAT 장비가 그 IP를 퍼블릭 IP로 변환해서 외부에 나가게 해주기 때문 & 응답이 돌아올 때도 NAT 장비가 다시 10.0.2.15로 매핑해준다.
NAT
네트워크 주소를 변환하는 기술 → 보완!!
- 기본적으로는 하나의 주소에 다른 주소 1:1 매칭
- 여러 개의 주소를 하나의 IP에 매칭시킬 수 있는데 이 경우는 정확하게는 NAPT(Network Address Port Translation)인데 PAT라고 부르는 경우가 많다.
- Private IP → Public IP로 변환 Public IP → Private IP로 변환 Private IP → 다른 Private IP로 변환 Public IP → 다른 Public IP로 변환하기도 한다.
- IPv4 → IPv6로 변환하는 것도 일종의 NAT이다.
용도와 필요성
- 주소 고갈 문제로 인해서 PAT가 사용되었다. (PAT: 포트 번호랑 매칭하는 것)
- IPv4의 주소가 고갈 되는 문제를 해결하기 위해서 생각한 3가지 방법(CIDR, NAT/PAT, IPv6) 중 하나
- 보안을 강화하기 위해서
- NAT를 이용해서 외부와 통신을 하게 되면 외부의 Public IP는 상대방이 알 수 있지만 내부의 Private IP를 확인할 수는 없다. → 내부에서 외부 요청은 처리가 되지만 외부에서 내부 요청은 할 수가 없다. (밖에서 들어올 수 없으면 서버가 될 수 없다.)
- 외부에서 내부로 요청이 가능하도록 하려면 포트 포워딩을 해야 한다.
- IP 주소 체계가 같은 두 개의 네트워크 간의 통신 때문에
- 대외계라고 부르는 회사 간 통신에서 사용한다.
- *대외계 : 금융권에서 많이 쓰는 건데 카드사나 은행 간의 연결이 대표적인 대외계 별도의 전용 회선이나 암호화된 별도의 네트워크를 이용해서 통신을 수행한다. (인터넷은 다 오픈되어 있으니까)
- 불필요한 설정 변경을 최소화하기 위해서 (회사 차원에서의 이유)
단점
- IP가 변환되면 장애가 발생했을 때 문제 해결이 힘들다.
- IPv6로 주소 부족 문제는 해결이 되었기 때문에 주소가 변환되면서 단말 간 직접적인 연결성이 무너져서 개발자들이 항상 NAT를 고려해야 하는 문제를 해결하기 위해서 NAT를 없애는 시도도 있다.
NAT 동작 방식: 출발지가 10.10.10.10이고 목적지의 웹 서버가 20.20.20.20 인 경우
- 사용자가 웹 서버에 접근하기 위해서 출발지를 10.10.10.10으로 하고 목적지 IP와 서비스 포트 20.20.20.20에 80번 포트로 패킷을 전송하는데 출발지 포트는 임의로 할당된다.
- NAT 역할을 수행하는 장비에서는 사용자가 보낸 패킷을 수신한 후 NAT 정책에 따라 외부 네트워크와 통신이 가능한 public IP인 11.11.11.11로 IP 주소를 변경하고 변경 전후의 IP 주소를 NAT 테이블에 저장한다.
- NAT 장비에서는 20.20.20.20으로 전송을 수행한다.
- 패킷을 수신한 웹 서버는 사용자에게 응답을 보내는데 출발지가 20.20.20.20이고 목적지가 11.11.11.11로 해서 응답을 전송한다.
- NAT 장비는 이를 받아서 자신의 테이블에 있는 이전에 저장한 정보를 바탕으로 10.10.10.10에게 응답을 전송한다.
PAT는 NAT 동작과 유사하지만 테이블에 기록 할 때 IP 뿐 아니라 포트 번호도 매핑해서 저장하는 것이 다르다.
→ NAT는 실제로 주소 절감 효과를 가져오지 않지만 PAT는 주소 절감의 효과를 가져온다.
SNAT와 DNAT
SNAT(Source NAT): 출발지 주소를 변경하는 NAT
DNAT(Destination NAT): 목적지 주소를 변경하는 NAT
- 이 구분은 트래픽이 출발하는 시작 지점을 기준으로 한다.
- 요청을 할 때 SNAT을 해서 목적지로 전송되고 해당 트래픽에 대한 응답을 받을 때는 DNAT
- 일반적으로 SNAT는 Private IP를 가지고 Public IP로 변환할 때 사용하고 DNAT는 Load Balancer에서 사용한다.
동적 NAT와 정적 NAT
정적 NAT는 고정
동적 NAT는 IP Pool을 만들어두고 상황에 따라 매핑한다.
→ 집에서 쓰는 건 동적 NAT: 계속 인터넷을 사용하는 게 아니기 때문에 굳이 통신사가 컴퓨터 개수만큼 IP를 가지고 있지 않고 필요할 때만 그때그때 할당해준다.
정적 NAT 동적 NAT
NAT 설정 | 1:1 | 1:N, N:1, N:M |
NAT 테이블 | 사전 생성 | NAT 수행 시 생성 |
타임 아웃 | 없음 | 있음 |
수행 정보 | 필요 없음 | 실시간으로 확인하거나 별도 변경 로드 저장 필요 |
DNS
도메인 주소를 IP로 변환해주는 역할을 수행하는 시스템
네트워크 프로토콜은 용도에 따라 2가지로 분류한다.
- 실제로 데이터를 실어나르는 데이터 프로토콜
- 데이터 프로토콜이 잘 동작하도록 도와주는 컨트롤 프로토콜
- 클라우드 기반 인프라 구성이 많아지면서 인프라가 빈번히 변경되어 DNS 설계가 중요해졌고 MSA(Micro Service Architecture) 기반의 서비스 설계가 많아지면서 다수의 API를 사용하다 보니 서비스 간 API 호출이나 인터페이스가 많아져 DNS의 역할이 더 중요해졌다.
- 도메인으로 요청을 하게 되면 먼저 DNS에게 도메인에 해당하는 IP를 요청해서 받아온 후 그 IP를 이용해서 실제 요청이 이루어지게 된다.
- 내부 시스템의 서비스간 연결에도 DNS를 사용 가능하다.
- 내부 시스템도 여러 대의 장비가 사용되면 IP를 기억하는 것이 어렵고 IP가 변경되는 경우 바꾸어야 할 것이 너무 많기 때문에 내부 시스템에서도 DNS를 이용해서 이름을 이용한 통신을 많이 한다.
- 쿠버네티스도 이름을 가지고 통신한다. IP가 아니라
- 프로그램에서 별명을 만들어 쓰는 경우 → 굉장히 유용
- ex. Database) User 테이블 → SARAM (Synonym) Application) insert into SARAM
- 여기서 User 테이블을 바꾸면 Application은 바꾸지 않아도 되지만 Synonym을 사용하지 않았다면 Application의 insert into 부분도 바꿔야 했을 것
- 보통의 경우 내부 DNS와 외부 DNS를 분리해서 운영한다.
구조와 명명 규칙
구조는 역트리 구조 - 뒤에서부터 쫓아가는 형태가 된다.
Third Level Domain Second Level Domain Top Level Domain
www | .naver | .com |
- 128 계층까지 구성 가능하다.
- 계층별 길이는 63바이트이고 도메인 계층을 구분하는 .을 포함한 전체 도메인 네임의 길이는 255바이트까지이다.
- 루트 도메인
- DNS 서버는 사용자가 쿼리한 도메인에 대한 값을 직접 갖고 있거나 캐시에 저장된 정보를 이용해 응답 한다.
- DNS 서버에 해당 도메인의 정보가 없으면 루트 도메인을 관리하는 루트 DNS에 쿼리를 하게 된다.
- 루트 DNS는 전 세계에 13개가 있고 DNS 서버를 설치하면 루트 DNS의 IP 주소를 기록한 Hint 파일을 가지고 있어 루트 DNS 관련 정보를 별도로 설정할 필요는 없다.
- Top Level Domain
- 6가지 유형으로 구분
- Generic: 일반적으로 사용하는 최상위 도메인(.com, .edu, .org 등)
- country-code: 국가 코드로 한국은 kr (미국은 국가 코드가 없다.)
- sponsored: 특정 목적을 위한 스폰서를 두고 있는 최상위 도메인(aero, asia, edu, museum 등)
- infrastructure: 운용상 중요한 인프라 식별자 공간을 지원하기 위해 전용으로 만들어진 최상위 도메인, arpa
- generic-restricted: 특정 기준을 충족한 사람이나 단체가 사용하기 위한 도메인 (biz, name, pro 등)
- test: 개발 프로세스에서 테스트 목적으로 사용
- 6가지 유형으로 구분
DNS의 동작 방식
- 도메인을 IP 주소로 변환하려면 DNS 서버에 도메인 쿼리하는 과정을 거쳐야 한다.
- DNS 서버 없이 로컬에 도메인과 IP 주소를 직접 설정해 사용할 수 있다.
- 로컬에서 도메인과 IP 주소를 관리하는 파일을 hosts 파일이라고 한다. (ex. /etc/hosts 파일)
- hosts 파일에 도메인과 IP 주소를 설정해두면 해당 도메인 리스트는 항상 DNS에 캐시가 된다. (빠르게 찾아갈 수 있다.)
- 도메인을 쿼리하면 DNS 서버에 쿼리를 하기 전에 로컬에 있는 DNS 캐시 정보를 먼저 확인한다.
- 동일한 도메인을 매번 질의하지 않고 캐시를 통해 성능을 향상시키기 위해서
- DNS 캐시에 없으면 그 때 DNS 서버에 질의
- 윈도우즈에서 캐시된 DNS 정보 조회: ipconfig / displaydns
DNS의 주요 레코드
A: IPv4로 매핑
- 기본 레코드로 도메인 주소를 IP 주소로 변환하는 레코드
- 하나의 도메인을 가지고 여러 개의 A레코드를 만들어서 서로 다른 IP 주소와 매핑이 가능하다.
- 서버 한 대에 여러 웹 서비스를 구동해야 하는 경우에는 여러 도메인에 동일한 IP를 매핑하고 HTTP 헤더의 HOST 필드에 도메인을 명시해 웹 서버를 구분해 서비스할 수 있다.
AAAA: IPv6로 매핑
- 역할은 A 레코드와 동일한데 사용되는 IP가 IPv6
CNAME: 도메인 주소에 대한 별칭
- 별칭 이름을 사용하게 해주는 레코드
- CNAME은 A 레코드와 달리 도메인을 매핑한다.
- Ex. zigispace.net 이라는 웹 사이트에 접속할 때 보통은 zigispace.net 이나 www.zigispace.net 으로 접속
- A 레코드만 이용하는 경우 2개의 A 레코드를 등록한다.
- 이 경우 컴퓨터의 IP가 변경되면 2개의 A 레코드를 수정해야 한다.
- zigispace.net를 A 레코드로 등록하고 www.zigispace.net를 zigispace.net의 CNAME으로 등록을 하고 IP가 변경이 되면 A 레코드 1개만 수정하면 나머지 CNAME은 자동으로 연결이 된다.
SOA: 본 영역 데이터에 대한 권한
- 도메인 영역에 대한 권한을 나타내는 레코드
- 도메인 영역을 생성할 때 필수 항목으로 SOA 레코드를 등록하지 않으면 네임 서버에서는 정상적으로 동작하지 않는다.
NS: 본 영역에 대한 네임 서버
MX: 도메인에 대한 메일 서버 정보
PTR: IP 주소를 도메인에 대한 매핑
TXT: 도메인에 대한 일반 텍스트
DNS를 다룰 때 알면 좋은 내용
- DNS Delegation (도메인 위임) → 네임 서버가 관리하는 게 아니라 가까운 곳에 있는 서버가 관리 (Anycast 방식)
- 도메인은 그 도메인에 대한 정보를 관리할 수 있는 네임 서버를 지정하지만 도메인 내의 모든 레코드를 그 네임 서버가 관리하지 않고 일부 영역에 대해서는 다른 곳에서 레코드를 관리하도록 한다.
- CDN(Content Delivery Network)을 사용하는 곳에서 이용
- 복사본을 가지고 있다가 가까운 곳에서 데이터를 가져오는 것
- TTL (Time To Live)
- DNS에 질의해서 응답 받은 결과값을 캐시에서 유지하는 시간
- DNS에서 TTL 값을 늘려서 캐시를 많이 이용하면 DNS 재귀적 쿼리로 인해 응답 시간을 많이 줄일 수 있고 결과적으로 전체적인 네트워크 응답 시간이 단축되기는 하지만 DNS에서 해당 정보가 변경이 되면 새로 변경된 값으로 DNS 정보 갱신이 지연되는 단점도 있다. (TTL 값이 늘어났다 = 기억해야 될 게 많아졌다.)
- 윈도우의 경우 1시간, 리눅스의 경우 3시간
- 화이트 도메인
- 한국인터넷진흥원(KISA)에서는 불법적인 방법으로 발송되는 스팸 메일 차단 활동을 한다.
- 정상적인 도메인을 인증 관리하는 제도가 화이트 도메인
- 불법적인 방법으로 스팸 메일을 보내는 사이트의 블랙 리스트를 RBL(Realtime Blackhole List) 이라고 한다.
- 현재 보유 중인 도메인을 화이트 도메인으로 등록하고자 하는 경우는 KISA RBS 사이트에서 등록한다.
- 한글 도메인
- 한글 도메인을 쓰고 싶다고 하면 도메인을 퓨니코드로 변경하고 퓨니코드를 DNS에 등록해야 한다.
리눅스에 DNS 서버 설치
패키지는 bind9
sudo apt update
sudo apt install bind9
# 만약에 공간 부족하다고 나오면 sudo apt clean 치면 된다.
서비스 확인 및 시작
systemctl status bind9
sudo systemctl start bind9 # 시작이 안 돼있으면
DNS 설정 파일 /etc/bind 카테고리
sudo vi /etc/bind/named.conf.local
zone "aaa.com" { type master; file "/etc/bind/db.aaa.com"; };
→ aaa.com 이라는 요청이 오면 /etc/bind/db.aaa.com 파일의 설정이 처리
sudo cp /etc/bind/db.local /etc/bind/db.aaa.com
→ 로 복사해서 /etc/bind/db.aaa.com 파일 만들기
sudo vi /etc/bind/db.aaa.com #로 파일 내용 수정
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.aaa.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS aaa.com.
@ IN A 127.0.0.1
@ In A 11.11.0.10
@ IN AAAA ::1
sudo vi /etc/bind/named.conf.options #로 파일 내용 수정
forwarders {
8.8.8.8;
8.8.4.4;
};
allow-query { any; };
원래 0.0.0.0 이었는데 위처럼 바꾸었다.
→ 이 서버에게 DNS 요청을 하게 되면 로컬 설정으로 처리할 수 있는 것은 처리하고 처리하지 못하는 것은 구글의 DNS인 8.8.8.8이 처리하도록 설정
서비스 다시 시작
sudo systemctl restart bind9
호스트 파일 설정
- hosts 파일: 도메인과 IP를 매핑 해놓은 것
- DNS 기능이 생기기 전부터 사용
- Windows 에서는 C:\Windows\System32\drivers\etc\hosts 파일이고 리눅스에서는 /etc/hosts
- /etc/hosts 파일에 IP 적고 이름 적어놓고 그 이름으로 ping 보내면 해당 IP로 ping이 간다.
- /etc/hosts 파일은 내부에서 소통할 때 쓰이는 거고 dns hosts 파일은 외부로 소통할 때 쓰이는 것
- /etc/hosts 파일에 127.0.0.0 naver 이라고 추가하고 명령어 창에 ping naver 이라고 치면 127.0.0.0으로 핑이 잘 가는 모습을 확인할 수 있다.
DHCP
- 서버와 클라이언트 형태로 동작하는 프로토콜로 동적으로 IP를 할당해주는 프로토콜
- 서버는 67번 포트를 사용하고 클라이언트는 68번 포트를 사용한다.
- UDP 프로토콜을 이용한다.
- DHCP 서버를 구성할 때 설정하는 값
- IP Address Pool
- 예외 주소 풀
- 임대 시간
- 서브넷 마스크
- 게이트웨이
- DNS
우분투 네트워크 설정
- 우분투 네트워크 설정 파일: /etc/network/interface
etc 디렉토리는 우리가 권한이 없기 때문에 항상 들어갈 때 sudo로!
- 네트워크 서비스 시작과 종료
- /etc/init.d/networking start, stop, reload, restart, force-reload (사실 이 명령어를 쓸 기회는 별로 없다.)
'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글
보안 (0) | 2025.06.04 |
---|---|
네트워크 (0) | 2025.06.02 |
네트워크 (1) | 2025.05.29 |
Shell Programming (0) | 2025.05.28 |
네트워크 (0) | 2025.05.27 |