# IDN

## 5.8.1 punycode

IDN은 1998년 부터 논의가 시작이 되었으며, 처음 IDN 서비스를 시작한 verysign은 RACECODE 를 이용하여 COM/NET 도메인에 IDN을 적용하여 서비스 하기 시작했으나, 2002년 [punycode](https://ko.wikipedia.org/wiki/%ED%93%A8%EB%8B%88%EC%BD%94%EB%93%9C)가 표준안으로 채택이 되고 나서 2004년 경 부터는 모든 domain extension들이 punycode를 사용하기 시작했으며, 현재는 punycode만 사용이 되어 집니다.

punycode는 domain에 사용할 수 있는 문자가 아닐 경우에는, 다음과 같이 ***xn--*** prefix를 이용하여 변환을 합니다.

```
안녕.com =>       xn--o70b819a.com
안녕-linux.com => xn---linux-2x2xk18i.com
```

IDN을 punycode로 변환을 하기 위해서는 보통 웹상에서 "punycode 변환"을 검색어로 검색을 하면 많은 페이지를 볼 수 있습니다.

안녕 리눅스의 경우, whois package를 설치할 경우, command line interface에서 사용을 할 수 있는 ***punyconv*** 실행 파일이 설치가 됩니다.

```
[root@an3 ~]$ punyconv 안녕.com
xn--o70b819a.com
[root@an3 ~]$
```

## 5.8.2 IDN 환경

안녕 리눅스에서의 지원하는 패키지들의 경우에는 대부분 내부에서 punycode를 지원하도록 패치가 되어 있습니다. ***ssh***, ***ping***, ***traceroute***, host 등등의 network 도구에서는 IDN을 직접 사용하더라도 내부에서 알아서 punycode로 변환을 하도록 되어 있습니다.

```
[root@main ~]$ ping 한글.com
PING 한글.com (202.31.187.154) 56(84) bytes of data.
64 bytes from 202.31.187.154 (202.31.187.154): icmp_seq=1 ttl=52 time=7.79 ms
64 bytes from 202.31.187.154 (202.31.187.154): icmp_seq=2 ttl=52 time=8.22 ms
64 bytes from 202.31.187.154 (202.31.187.154): icmp_seq=3 ttl=52 time=7.83 ms
```

좀더 요약하자면, shell의 언어 환경이 ***UTF-8*** 이라면, punycode를 신경쓸 필요 없다는 의미 입니다.

## 5.8.3 한글 도메인 설정

### 5.8.3.1 IDN zone 설정

기본적으로, ***bind***&#xC5D0;서 IDN을 사용하기 위해서는 punycode를 사용해야 합니다. 예를 들어 ***한글.com***&#xC744; 설정 한다고 가정 하면 다음과 같습니다.

```
zone "xn--bj0bj06e.com" IN {
    type master;
    file "zone/한글.com.zone";
    allow-update { none; };
};
```

안녕 리눅스에서는 다음과 같이 punycode 변환 없이 사용을 할 수 있습니다.

```
zone "한글.com" IN {
    type master;
    file "zone/한글.com.zone";
    allow-update { none; };
};
```

IDN을 작성할 때, zone 파일의 문자셋이 ***UTF-8***&#xC77C; 경우에는 모든 IDN을 punycode로 변환 없이 사용이 가능하며, ***UTF-8***&#xC774; 아닐 경우에는 ***EUC-KR*** 과 ***EUC-JP***&#xB9CC; 지원을 합니다.

또한, ***EUC-KR*** 또는 ***EUC-JP***&#xB97C; 사용하기 위해서는 ***CH+문자셋.도메인***&#xC758; 형식을 이용해야 합니다.

```
zone "CH+EUC-KR.한글.com" IN {
    type master;
    file "zone/한글.com.zone";
    allow-update { none; };
};
```

### 5.8.3.2 zone file에서의 IDN 사용

zone 설정과 마찬 가지로, ***UTF-8*** 환경이라면, 아무런 제약 없이 ***IDN***&#xC744; 직접 사용할 수 있습니다.

```
자음         IN  A   10.0.0.1
```

이렇게 설정을 하면, 자음.한글.com 의 A record가 10.0.0.1로 설정이 되게 됩니다.

zone 설정과 마찬가지로, ***UTF-8*** 환경이 아니라면, ***EUC-KR*** 및 ***EUC-JP***&#xB9CC;을 지원 하며, IDN 표기를 ***CH+문자셋.도메인***&#xC758; 형식을 이용해야 합니다.

```
CH+EUC-KR.자음         IN  A   10.0.0.1
```

단, 혼용을 하지 않는 다는 가정하에서, ZONE 파일 제일 처음에 ***@CHARSET*** 지시자를 이용할 수 있습니다.

```
@CHARSET "EUC-KR"
$TTL 60
@               IN  SOA ns.oops.org. admin.oops.org.    (
                2017021205  ; Serial
                10800       ; Refresh
                3600        ; Retry
                604800      ; Expire
                60          ; TTL (1day)
                )

자음         IN  A   10.0.0.1
```

위와 같이 사용이 가능 합니다.
