Linux에서 DNS over HTTPS 구성하기
이 가이드는 Linux 시스템에서 DNS over HTTPS (DoH)를 설정하고 구성하는 방법을 여러 구성 방법과 모범 사례를 포함하여 설명합니다.
필수 조건
- Linux 운영 체제
- 관리자 (root) 권한
- 기본 명령줄 지식
- 안정적인 네트워크 연결
systemd-resolved 사용
1단계: systemd-resolved 버전 확인
systemctl --version
systemd-resolve --version
DoH를 지원하는 버전 247 이상인지 확인합니다.
2단계: resolved.conf 구성
/etc/systemd/resolved.conf
를 편집합니다:
[Resolve]
DNS=1.1.1.1 1.0.0.1
DNSOverTLS=yes
DNSSEC=yes
Cache=yes
DNSStubListener=yes
DoH를 위해 다음 구성을 추가합니다:
[Resolve]
DNS=https://cloudflare-dns.com/dns-query
https://dns.google/dns-query
DNSOverTLS=no
DNSSEC=yes
Cache=yes
DNSStubListener=yes
3단계: 서비스 재시작
sudo systemctl restart systemd-resolved
sudo systemctl status systemd-resolved
NetworkManager 사용
1단계: NetworkManager 버전 확인
nmcli --version
DoH 기능을 지원하는 버전인지 확인합니다.
2단계: 연결 구성
nmcli를 사용하여 DoH를 구성합니다:
# 현재 연결 목록 표시
nmcli connection show
# 지정된 연결 수정
sudo nmcli connection modify "연결 이름" ipv4.dns "1.1.1.1,1.0.0.1" ipv4.dns-over-tls yes
sudo nmcli connection modify "연결 이름" ipv6.dns "2606:4700:4700::1111,2606:4700:4700::1001" ipv6.dns-over-tls yes
3단계: 변경사항 적용
sudo nmcli connection up "연결 이름"
독립 실행형 클라이언트 사용
dnscrypt-proxy
- 설치
# Debian/Ubuntu
sudo apt install dnscrypt-proxy
# Fedora
sudo dnf install dnscrypt-proxy
# Arch Linux
sudo pacman -S dnscrypt-proxy
- 구성
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
을 편집합니다:
server_names = ['cloudflare', 'google']
listen_addresses = ['127.0.0.1:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = true
dnscrypt_servers = true
doh_servers = true
require_dnssec = true
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
- 서비스 시작
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy
Stubby
- 설치
# Debian/Ubuntu
sudo apt install stubby
# Fedora
sudo dnf install stubby
# Arch Linux
sudo pacman -S stubby
- 구성
/etc/stubby/stubby.yml
을 편집합니다:
resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
- GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
round_robin_upstreams: 1
idle_timeout: 10000
listen_addresses:
- 127.0.0.1@53
- 0::1@53
upstream_recursive_servers:
- address_data: 1.1.1.1
tls_auth_name: "cloudflare-dns.com"
- address_data: 1.0.0.1
tls_auth_name: "cloudflare-dns.com"
- 서비스 시작
sudo systemctl enable stubby
sudo systemctl start stubby
sudo systemctl status stubby
구성 확인
방법 1: dig 사용
# DNS 확인 테스트
dig @127.0.0.1 example.com
# DNSSEC 확인
dig @127.0.0.1 example.com +dnssec
# DoH 서버 확인
dig @127.0.0.1 whoami.cloudflare CH TXT
방법 2: resolvectl 사용
# 현재 DNS 설정 보기
resolvectl status
# DNS 확인 테스트
resolvectl query example.com
# DNSSEC 확인
resolvectl query --dnssec example.com
방법 3: 온라인 테스트
- DNS 유출 테스트 웹사이트 방문
- 포괄적인 테스트 실행
- DNS 요청 라우팅 확인
문제 해결
일반적인 문제
-
확인 실패
- 네트워크 연결 확인
- 구성 파일 확인
- 서비스 상태 확인
- 시스템 로그 검토
-
성능 문제
- 가장 가까운 서버 선택
- 캐시 설정 최적화
- 응답 시간 모니터링
- 시스템 리소스 확인
-
호환성 문제
- 패키지 업데이트
- 종속성 확인
- 시스템 요구사항 확인
- 대체 구성 테스트
로그 분석
- 시스템 로그
# systemd-resolved 로그 보기
journalctl -u systemd-resolved
# NetworkManager 로그 확인
journalctl -u NetworkManager
# dnscrypt-proxy 로그 보기
journalctl -u dnscrypt-proxy
- 네트워크 진단
# 네트워크 연결 테스트
ping 1.1.1.1
# DNS 확인 확인
nslookup example.com
# DNSSEC 확인
dig example.com +dnssec
모범 사례
-
제공업체 선택
- 개인정보 보호 정책 평가
- 서비스 가용성 확인
- 지리적 위치 고려
- 연결 속도 테스트
-
보안 권장사항
- 신뢰할 수 있는 제공업체 사용
- DNSSEC 활성화
- 정기적인 시스템 업데이트
- 네트워크 활동 모니터링
-
성능 최적화
- 가장 가까운 서버 선택
- 캐시 설정 최적화
- 성능 메트릭 모니터링
- 정기적인 유지보수
기업 배포
시스템 전체 구성
-
구성 파일 생성
- systemd-resolved 설정
- NetworkManager 구성
- 클라이언트 소프트웨어 배포
-
배포 전략
- 구성 관리 사용
- 모니터링 구현
- 유지보수 시간대 계획
-
유지보수 관리
- 정기적인 업데이트
- 성능 모니터링
- 문제 추적
- 백업 절차