크라우니 DNS 자체 호스팅 전략
배경
- crowny.org 서브도메인 54개 + crownybus.com + crowny.kr
- 현재 hosting.kr의 DNS 사용 중
- Cloudflare 사용하지 않기로 결정
- 자체 DNS 서버(한선씨) 구축 완료
핵심 결론
도메인 등록 vs DNS 서비스
| 구분 | 역할 | 자체 운영 |
|---|
| 도메인 등록 | crowny.org 소유권 | 불가 (ICANN 규정, 등록기관 필수) |
| DNS 서비스 | xxx.crowny.org → IP 응답 | 가능 (DNS서버v3.한선 완성) |
| 웹 호스팅 | 서버 운영 | 이미 자체 (crowny-gateway) |
- hosting.kr은 등록비(연 1.5만원)만 납부하는 관계로 축소
- DNS와 호스팅은 전부 자체 운영
고정IP 확보 전
- hosting.kr DNS 그대로 유지
- 크라우니 DNS는 내부 테스트용 (포트 5353)
- 더블 운영 불필요
고정IP 1개 확보 시
- ISP에 고정IP 신청 (월 5,000~11,000원)
- ns1과 ns2가 같은 IP 가리켜도 동작함 (RFC 권장이지 필수 아님)
- 공유기 포트포워딩 53 → mac-studio
- hosting.kr에서 NS 레코드만 변경 → 끝
고정IP 2개 확보 시 (최종)
- ns1 = IP-A (mac-studio)
- ns2 = IP-B (macbook-intel 또는 다른 위치)
- 완전 자립
기술 구현
DNS서버v3.한선
- 위치:
/Users/ef/CrownyOS/crownyc/DNS서버v3.한선
- 한선씨 + crownyc VM (버퍼 기반)
버퍼바이트() opcode 850 추가 (raw byte write, UTF-8 무관)
바닥() 함수 (균형3진 자연반올림 보정)
지원 레코드
| 레코드 | 내용 |
|---|
| A | 54개 도메인 → gateway IP |
| NS | ns1.crowny.org, ns2.crowny.org |
| SOA | serial=2026042501, refresh=3600, retry=600, expire=86400 |
| NXDOMAIN | 미등록 도메인 |
| AAAA | 빈 응답 (IPv6 미지원) |
| 와일드카드 | *.crowny.org → 주 IP |
테스트 결과 (9/9 통과)
- A crowny.org → 192.168.219.153 TTL=300
- A bank.crowny.org → 192.168.219.153
- NS crowny.org → ns1.crowny.org, ns2.crowny.org
- SOA crowny.org → serial=2026042501
- A future.crowny.org (와일드카드) → 192.168.219.153
- A crownybus.com → 192.168.219.153
- A ns2.crowny.org → 192.168.219.111 (보조)
- NXDOMAIN example.com
- AAAA crowny.org → 빈 응답
전환 스위치
bashcd /Users/ef/crowny-gateway
# 상태 확인
bash scripts/dns-switch.sh status
# 전환 (고정IP 확보 후)
bash scripts/dns-switch.sh crowny <고정IP>
# 서버 시작 (sudo)
bash scripts/dns-switch.sh start
# 비상 복귀
bash scripts/dns-switch.sh hosting
설정 파일
/Users/ef/crowny-gateway/dns-config.yaml — 모드(hosting/crowny/hybrid), IP 설정
/Users/ef/crowny-gateway/scripts/dns-switch.sh — 전환 스크립트
/Users/ef/CrownyOS/crownyc/DNS서버v3.한선 — DNS 서버 소스
VM 확장 (이번에 추가)
| opcode | 한선씨 | 용도 |
|---|
| 850 | 버퍼바이트(버퍼, 위치, 값) | raw byte 쓰기 (0-255) |
| 851 | 버퍼바이트읽기(버퍼, 위치) | raw byte 읽기 |
글자변환()은 UTF-8 인코딩이라 128+ 바이트가 2바이트로 확장됨.
DNS 패킷처럼 바이너리 프로토콜은 반드시
버퍼바이트() 사용.
관련 파일
/Users/ef/crowny-gateway/CLAUDE.md — DNS 전환 섹션 추가됨
/Users/ef/CrownyOS/crownyc/crownyc.c — opcode 850/851 추가
/Users/ef/CrownyOS/crownyc/hanseonc_high.c — 버퍼바이트 등록
/Users/ef/CrownyOS/crownyc/DNS서버v3.한선 — 서버 소스
/Users/ef/CrownyOS/crownyc/DNS서버.한선 — v2 (백업)