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

  1. 설치
# Debian/Ubuntu
sudo apt install dnscrypt-proxy

# Fedora
sudo dnf install dnscrypt-proxy

# Arch Linux
sudo pacman -S dnscrypt-proxy
  1. 구성

/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
  1. 서비스 시작
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy

Stubby

  1. 설치
# Debian/Ubuntu
sudo apt install stubby

# Fedora
sudo dnf install stubby

# Arch Linux
sudo pacman -S stubby
  1. 구성

/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"
  1. 서비스 시작
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: 온라인 테스트

  1. DNS 유출 테스트 웹사이트 방문
  2. 포괄적인 테스트 실행
  3. DNS 요청 라우팅 확인

문제 해결

일반적인 문제

  1. 확인 실패

    • 네트워크 연결 확인
    • 구성 파일 확인
    • 서비스 상태 확인
    • 시스템 로그 검토
  2. 성능 문제

    • 가장 가까운 서버 선택
    • 캐시 설정 최적화
    • 응답 시간 모니터링
    • 시스템 리소스 확인
  3. 호환성 문제

    • 패키지 업데이트
    • 종속성 확인
    • 시스템 요구사항 확인
    • 대체 구성 테스트

로그 분석

  1. 시스템 로그
# systemd-resolved 로그 보기
journalctl -u systemd-resolved

# NetworkManager 로그 확인
journalctl -u NetworkManager

# dnscrypt-proxy 로그 보기
journalctl -u dnscrypt-proxy
  1. 네트워크 진단
# 네트워크 연결 테스트
ping 1.1.1.1

# DNS 확인 확인
nslookup example.com

# DNSSEC 확인
dig example.com +dnssec

모범 사례

  1. 제공업체 선택

    • 개인정보 보호 정책 평가
    • 서비스 가용성 확인
    • 지리적 위치 고려
    • 연결 속도 테스트
  2. 보안 권장사항

    • 신뢰할 수 있는 제공업체 사용
    • DNSSEC 활성화
    • 정기적인 시스템 업데이트
    • 네트워크 활동 모니터링
  3. 성능 최적화

    • 가장 가까운 서버 선택
    • 캐시 설정 최적화
    • 성능 메트릭 모니터링
    • 정기적인 유지보수

기업 배포

시스템 전체 구성

  1. 구성 파일 생성

    • systemd-resolved 설정
    • NetworkManager 구성
    • 클라이언트 소프트웨어 배포
  2. 배포 전략

    • 구성 관리 사용
    • 모니터링 구현
    • 유지보수 시간대 계획
  3. 유지보수 관리

    • 정기적인 업데이트
    • 성능 모니터링
    • 문제 추적
    • 백업 절차

다음 단계