> For the complete documentation index, see [llms.txt](https://ia-cloud.gitbook.io/cloudia-manual/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ia-cloud.gitbook.io/cloudia-manual/user-guide/examples-and-labs/11-use-private-dns-and-verify-with-dig.md).

# 내부 DNS 활용하기

이 문서는 VPC 내 인스턴스에 고유 도메인 이름을 부여하여 내부 통신 환경을 최적화하는 내부 DNS 구축 및 레코드 관리 과정을 다룹니다. 복잡한 IP 주소 대신 직관적인 도메인을 사용하여 내부 서비스 간 연결 편의성을 높일 수 있습니다. 내부 DNS를 통해 VPC 내 자원을 효율적으로 식별하고 통신 구조를 단순화하는 방법을 실습하고, 이어서 `외부 조회 허용` 기능으로 VPC 외부에서도 이 도메인을 조회하는 방법을 실습합니다.

## 사전 준비

* Cloud:iA 웹콘솔 접근 가능
* 프로젝트 계정(`project-owner`)으로 로그인 가능
* A 레코드에 연결할 대상 인스턴스 1대와 DNS 질의를 수행할 질의용 인스턴스 1대 필요
* 두 인스턴스는 내부 DNS를 생성한 VPC 내부에 연결되어 있어야 함
  * 참고로 단순 확인 목적이라면 동일 인스턴스를 대상 인스턴스와 질의용 인스턴스로 함께 사용 가능
  * 원활한 실습을 위해 Rocky Linux 기반 인스턴스 사용을 권장함
  * 질의용 인스턴스에서 `dig` 명령어를 사용할 수 있어야 함
* (선택) 4단계 외부 조회 실습을 진행하려면, 대상 VPC의 외부 통신 IP에 접근할 수 있는 VPC 외부 환경(예: 로컬 PC)과 그 환경에서 사용할 `dig` 명령어가 필요함

## 개요

1. [내부 DNS 생성](#step-1)
2. [A 타입 레코드 등록](#step-2)
3. [dig로 질의 확인](#step-3)
4. [외부 조회 허용 및 외부에서 확인 (선택)](#step-4)

## 1단계: 내부 DNS 생성

**수행 계정/화면:** `프로젝트 계정` / `프로젝트 페이지`

### 절차

1. `네트워크 > 내부 DNS`에서 `생성`을 클릭합니다.
2. 도메인 이름, VPC, 설명을 입력합니다.
3. `생성`을 클릭합니다.

### 입력 예시

| 항목     | 값                                   |
| ------ | ----------------------------------- |
| 도메인 이름 | `example-svc.internal`              |
| VPC    | `example-vpc`                       |
| 설명     | `private dns for internal services` |

### 확인

* 생성 완료 후 상세 화면에서 `NS` 및 `SOA` 타입의 시스템 기본 레코드 2개가 자동으로 생성되었는지 확인합니다.
* 생성 화면의 `외부 조회 허용`은 기본값이 허용 안 함입니다. 이 실습에서는 먼저 내부 조회를 확인한 뒤 4단계에서 외부 조회를 허용합니다.

> 💡 **참고:** 시스템 자동 관리 안내
>
> `NS` 레코드는 해당 내부 DNS 영역을 관리하는 네임서버 정보를 나타내고, `SOA` 레코드는 내부 DNS 영역의 기준 정보와 관리 정보를 나타냅니다. NS와 SOA 레코드는 시스템에서 자동으로 관리합니다. 특히 SOA의 일련번호(Serial Number)는 시스템 내부적으로 관리 기준에 따라 최신 상태로 유지되므로, 사용자가 별도로 수정할 필요가 없습니다.

## 2단계: 레코드 등록

**수행 계정/화면:** `프로젝트 계정` / `프로젝트 페이지`

### 절차

1. 1단계에서 생성한 내부 DNS 상세 페이지에서 레코드 탭의 `편집`을 클릭합니다.
2. 레코드 편집 화면에서 `추가`를 눌러 레코드 추가창을 엽니다.
3. 레코드 이름(`app-1`), TTL(`300`), 타입(`A`)을 설정합니다.
4. 값의 타입을 `인스턴스`로 선택한 뒤, 대상 인스턴스와 내부 IP 주소를 지정하고 `추가`를 눌러 값을 확정합니다.
5. 레코드 추가창 하단의 `추가`를 눌러 레코드 구성을 완료합니다.
6. 마지막으로 페이지 하단의 `저장`을 클릭하여 반영합니다.

### 입력 예시

| 항목       | 값                                       |
| -------- | --------------------------------------- |
| 레코드 이름   | `app-1`                                 |
| TTL      | `300`                                   |
| 타입       | `A`                                     |
| 리소스 타입   | `인스턴스`                                  |
| 인스턴스     | 대상 인스턴스 (예: `example-instance-dns-001`) |
| 내부 IP 주소 | 대상 인스턴스의 내부 IP 주소 (예: `10.0.1.31`)      |

### 확인

* 레코드 목록에 `app-1.example-svc.internal`이 정상적으로 표시되는지 확인합니다.
* 전체 레코드 수가 `3개`로 일치하는지 확인합니다.
* `app-1.example-svc.internal` 도메인 질의 시, 지정한 내부 IP 주소인 `10.0.1.31`로 정상적으로 응답하도록 A 레코드가 등록되어 있어야 합니다.

## 3단계: dig로 질의 확인

**수행 계정/화면:** `질의용 인스턴스 터미널 (Rocky Linux)`

### 절차

1. 질의용 인스턴스 상세 화면에서 `콘솔`을 클릭하여 터미널에 접속합니다.
2. 터미널 창에서 dig 명령을 사용하여 생성한 FQDN(전체 도메인 경로)을 조회합니다.
3. 출력된 IP 주소가 등록한 값과 일치하는지 확인합니다.

### 입력 예시

| 항목      | 값                                       |
| ------- | --------------------------------------- |
| dig 명령어 | `dig +short app-1.example-svc.internal` |
| 기대 결과   | A 레코드 값으로 등록한 IP 주소 출력 (예: `10.0.1.31`) |

### 확인

* 질의용 인스턴스에서는 정상적으로 주소가 질의되어야 합니다.
* `외부 조회 허용`이 꺼진 기본 상태에서는, 외부 로컬 PC 등 VPC 외부 환경에서 내부 DNS에 대한 질의 경로가 없거나 네트워크 접근이 제한되어 이름 해석이 되지 않습니다. 외부에서도 조회하려면 4단계를 진행합니다.

## 4단계: 외부 조회 허용 및 외부에서 확인 (선택)

**수행 계정/화면:** `프로젝트 계정` / `프로젝트 페이지`, `VPC 외부 환경 터미널`

기본적으로 내부 DNS는 VPC 내부에서만 조회됩니다. `외부 조회 허용`을 켜면 VPC 외부에서도 지정된 주소를 DNS 서버로 사용해 이 도메인을 조회할 수 있습니다.

### 절차

1. 내부 DNS 목록에서 1단계에서 생성한 항목(행)을 선택한 뒤 `편집`을 클릭합니다.
   * `외부 조회 허용`은 목록의 편집(내부 DNS 정보 수정) 화면에서 변경합니다. 상세 화면의 `편집`은 레코드 편집으로 이동하므로 이 설정을 바꿀 수 없습니다.
   * 생성 시점에 바로 켜려면 생성 화면에서 `외부 조회 허용`을 설정해도 됩니다.
2. `외부 조회 허용`을 `허용`으로 변경합니다.
3. 함께 표시되는 `VPC 외부에서 사용할 DNS 주소`(선택한 VPC의 외부 통신 IP)를 확인해 둡니다.
4. `저장`을 클릭합니다.
5. VPC 외부 환경 터미널에서 위 주소를 DNS 서버로 지정해 `dig`로 조회합니다.

### 입력 예시

| 항목                  | 값                                                     |
| ------------------- | ----------------------------------------------------- |
| 외부 조회 허용            | `허용`                                                  |
| VPC 외부에서 사용할 DNS 주소 | 선택한 VPC의 외부 통신 IP (예: `203.0.113.10`)                 |
| dig 명령어             | `dig @203.0.113.10 +short app-1.example-svc.internal` |
| 기대 결과               | A 레코드 값으로 등록한 IP 주소 출력 (예: `10.0.1.31`)               |

### 확인

* VPC 외부 환경에서 지정한 주소를 DNS 서버로 사용하면 도메인이 정상적으로 해석되어야 합니다.
* 저장 직후에는 설정이 아직 반영되지 않았을 수 있습니다. 조회가 실패하면 수 초 뒤에 다시 시도하세요.
* 내부 DNS 상세 화면 상단에서 `외부 조회 허용`이 허용 상태이고 `서버 상태`가 `정상`인지 확인합니다.

> 💡 **참고:** 이 실습의 기대 결과(`10.0.1.31`)는 VPC 내부 IP이므로, 외부에서 도메인 이름은 해석되지만 해당 IP로 실제 접속은 되지 않습니다. 외부 사용자가 접속할 도메인은 레코드 값을 플로팅 IP, 포트 포워딩, 외부 타입 로드 밸런서처럼 외부에서 접근 가능한 값으로 등록하세요.

> ⚠️ **주의:** `VPC 외부에서 사용할 DNS 주소`는 허용한 도메인의 질의에만 응답하며 그 외 도메인 질의는 거부합니다. 이 주소를 PC나 서버의 **기본 DNS 서버로 등록하면 일반 인터넷 도메인의 이름 해석이 되지 않으니** 등록하지 마세요. 상시 사용하려면 사내 DNS의 조건부 전달(포워딩) 규칙이나 운영체제의 도메인별 DNS 지정 기능으로 해당 도메인의 질의만 이 주소로 보내도록 설정합니다.

> ⚠️ **주의:** 외부 조회를 허용하면 도메인 이름과 내부 IP 주소가 외부에 노출될 수 있습니다. 노출이 필요한 도메인에만 제한적으로 사용하세요.
