Ubuntu Server 24.04에서 Pi-hole을 사용하여 HTTPS를 통한 DNS를 설정하는 방법

Ubuntu Server 24.04에서 Pi-hole을 사용하려면 업스트림 요청을 를 통해 라우팅 dnscrypt-proxy하고 Pi-hole이 로컬 리스너를 가리키도록 설정 127.0.0.1#5053하십시오. 이렇게 하면 서버와 선택한 업스트림 리졸버 간의 DNS 트래픽이 DNS-over-HTTPS(DoH)로 암호화되는 동시에 Pi-hole은 LAN 클라이언트에 응답하고 차단 목록을 계속 적용할 수 있습니다. Pi-hole 자체는 기본적으로 업스트림에 DoH 전송을 제공하지 않으며, 로컬 프록시가 암호화된 연결을 제공합니다.

먼저 알아야 할 최신 버전 관련 정보가 있습니다. Cloudflare는 cloudflared proxy-dns2026년 2월 2일부터 출시되는 새 버전에서 해당 명령어를 제거했습니다. 따라서 이전 버전에서 해당 명령어를 설치하는 방법을 설명하는 튜토리얼은 최신 cloudflared버전에서 작동하지 않을 수 있습니다. 아래 단계는 dnscrypt-proxyPi-hole의 최신 DoH 가이드를 따릅니다. 이 설정은 Pi-hole과 프록시가 동일한 Ubuntu 호스트에서 실행되는 경우에 적합합니다. Docker 또는 다중 호스트 환경에서는 각 호스트에 다른 리스너 주소 지정 및 방화벽 규칙이 필요합니다.

이 설정이 하는 일과 하지 않는 일은 무엇일까요?

일반 DNS는 일반적으로 리졸버에서 상위 DNS 제공업체로 쿼리를 전송할 때 전송 암호화를 사용하지 않습니다. DoH는 DNS 요청을 HTTPS 내부에 전송하므로 Pi-hole 서버와 리졸버 사이에 있는 네트워크 관찰자가 해당 요청을 읽거나 변경하기가 더 어려워집니다. Pi-hole은 로컬 네트워크의 장치에 광고되는 DNS 서버로 유지되며, 상위 경로만 변경됩니다.

DoH(DoS Holating)는 사용자가 선택한 리졸버에서 DNS 활동을 완전히 숨기지는 않습니다. 상위 제공업체는 여전히 서버에서 전송되는 쿼리를 수신하며, Pi-hole은 자체 개인정보 보호 및 로깅 설정에 따라 클라이언트 쿼리 기록을 보관할 수 있습니다. 또한 HTTPS는 관련 없는 웹 트래픽을 암호화하지 않습니다. 특정 리졸버를 사용하려면 해당 리졸버의 개인정보 보호정책을 확인하고 지원되는 리졸버 목록에서 DoH 지원 항목을 선택하십시오.

시작하기 전에

  • Ubuntu Server 24.04에 Pi-hole이 이미 설치되어 작동 중인지 확인하십시오. 이 가이드에서는 Pi-hole을 설치하는 것이 아니라 기존에 설치된 Pi-hole을 구성하는 방법을 설명합니다.
  • 서버에 안정적인 LAN 주소가 할당되어 있는지 확인하십시오. 주소가 변경되면 라우터의 DHCP 클라이언트가 DNS 서버를 잃을 수 있습니다.
  • 관리자 권한이 있어야 하며, DNS가 일시적으로 작동을 멈출 경우 Pi-hole 호스트에 접근할 수 있는 방법을 확보해야 합니다. 이름 확인을 위해 동일한 Pi-hole에 의존하는 연결을 통해 원격으로 이 변경 작업을 수행하지 마십시오.
  • 롤백 시 복원할 수 있도록 현재 Pi-hole 업스트림 설정을 기록해 두십시오.

프록시는 5053번 포트의 루프백 인터페이스에만 바인딩되어 53번 포트는 Pi-hole에서 사용할 수 있도록 합니다. 이렇게 하면 Pi-hole의 DNS 서비스 및 Ubuntu의 로컬 리졸버와의 충돌을 방지할 수 있습니다. systemd-resolved이 설정을 위해 Pi-hole을 비활성화하지 마십시오. 프록시의 별도 루프백 포트 사용으로 충돌이 방지됩니다.

1. 우분투 패키지 저장소에서 dnscrypt-proxy를 설치합니다.

dnscrypt-proxy 프로젝트 문서에는 Ubuntu 패키지 설치 경로가 나와 있습니다. 설치하기 전에 구성된 Ubuntu 저장소에 해당 패키지가 있는지 확인하십시오.

sudo apt update
apt-cache policy dnscrypt-proxy

출력 결과에 후보 버전이 표시되면 해당 버전을 설치하십시오.

sudo apt install dnscrypt-proxy

후보가 표시되지 않으면 진행하기 위해 관련 없는 타사 저장소를 추가하지 마십시오. dnscrypt-proxy 프로젝트의 공식 Linux 가이드에 링크된 설치 방법을 사용하고, 릴리스 및 아키텍처를 확인한 후 해당 설치에 맞게 서비스 설정을 조정하십시오. 아래의 systemd 소켓 유닛 및 구성 경로는 Pi-hole에서 설명하는 Ubuntu 패키지 설정에 적용됩니다.

2. 프록시 리스너를 로컬 호스트의 5053 포트로 이동합니다.

Pi-hole은 이미 표준 DNS 포트 53을 사용하고 있습니다. 프록시 소켓이 TCP와 UDP 모두에서 수신 대기하도록 구성하고 127.0.0.1:5053, 동일 호스트에서만 접근 가능하도록 설정합니다. systemd 드롭인을 생성합니다.

sudo systemctl edit dnscrypt-proxy.socket

편집기에 다음 줄을 입력하고 저장하세요.

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053

빈 줄 ListenStream=과 ListenDatagram=괄호는 대체 주소를 설정하기 전에 패키지 기본값을 초기화합니다. 이 줄들을 생략하지 마십시오. 그렇지 않으면 systemd가 사용자 지정 리스너 외에도 기본 포트를 유지할 수 있습니다.

3. DoH 리졸버를 선택하세요

패키지 구성 파일을 엽니다.

sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

systemd 소켓 활성화를 위해서는 프록시 구성에서 빈 리스너 목록을 사용하십시오. 현재 서명된 공개 리졸버 목록에서 리졸버 이름을 선택하십시오. 예를 들어, 다음은 표준 Cloudflare 리졸버를 선택합니다. Pi-hole 가이드에서는 cloudflare-security업스트림 리졸버에서 맬웨어 필터링을 원하는 경우의 예시도 보여줍니다.

listen_addresses = []
server_names = ['cloudflare']

패키지의 나머지 구성은 그대로 유지하십시오. 여기에 있는 이름은 server_names레지스트리 식별자이며 임의의 호스트 이름이나 URL 경로가 아닙니다. 다른 공급자를 선호하는 경우 해당 공급자의 현재 리졸버 항목이 DoH를 지원하는지 확인하고 정확한 이름을 복사하십시오. 맬웨어 또는 기타 범주를 필터링하는 리졸버는 필터링되지 않은 리졸버와 다른 결과를 생성할 수 있습니다.

4. Pi-hole이 로컬 프록시를 가리키도록 설정합니다.

Pi-hole의 업스트림 DNS 주소를 로컬 리스너로 설정합니다.

sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'

접미사는 Pi-hole에서 비표준 DNS 포트를 나타내는 표기법입니다. Pi-hole 관리자 인터페이스의 설정 > DNS#5053 에서도 확인할 수 있습니다 . 미리 설정된 공용 업스트림 선택을 해제하고 사용자 지정 서버를 업스트림으로 유지하세요. 공용 리졸버를 추가 업스트림으로 선택하면 쿼리가 암호화된 프록시를 우회할 수 있으므로, 모든 Pi-hole 업스트림 쿼리가 DoH를 사용하도록 하려면 해당 항목을 제거해야 합니다.127.0.0.1#5053

5. 서비스를 재시작하고 문제가 해결되었는지 확인하십시오.

소켓, 프록시 서비스 및 Pi-hole FTL 데몬을 재시작하여 새 구성을 로드하십시오.

sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service

서비스 상태를 검토하세요:

sudo systemctl status dnscrypt-proxy.socket
sudo systemctl status dnscrypt-proxy.service
sudo systemctl status pihole-FTL.service

각각은 바인딩 오류나 리졸버 시작 실패 없이 활성화되어야 합니다. 프록시를 로컬 DNS 수신기를 통해 직접 테스트하십시오.

dig @127.0.0.1 -p 5053 example.com

DNS 응답이 나오면 로컬 프록시가 응답하고 있는 것입니다. 이제 53번 포트에서 Pi-hole을 테스트해 보세요.

dig @127.0.0.1 example.com

Pi-hole 쿼리 로그 또는 대시보드를 확인하여 요청이 Pi-hole에 도달했는지 확인하고, 테스트가 실패한 경우 프록시의 로그를 검토하십시오.

sudo journalctl -u dnscrypt-proxy.service -b --no-pager

추가 확인을 위해 프록시 시작 로그 또는 저널 출력에서 ​​선택한 리졸버와 DoH 프로토콜 상태를 확인하십시오. 확인이 성공했다는 사실 dig만으로는 DNS 확인이 정상적으로 작동함을 증명할 수 없으며, 요청이 HTTPS를 사용했음을 보장하는 것은 아닙니다.

일반적인 문제 및 안전한 복구

  • "주소가 이미 사용 중입니다": 다른 프로세스가 이미 5053번 포트를 사용 중이거나 소켓 오버라이드가 로드되지 않았을 수 있습니다. 리스너를 확인하고 sudo ss -lntup, 드롭인을 검토하고 systemctl cat dnscrypt-proxy.socket, 빈 리셋 라인이 5053 항목 앞에 있는지 확인하십시오.
  • 프록시가 활성화되어 있지만 조회 시간이 초과됩니다. 아웃바운드 HTTPS 액세스, 확인자 이름 및 프록시 로그를 확인하십시오. 일부 네트워크에서는 DNS over HTTPS 연결을 차단하거나 TCP 포트 443을 제한합니다.
  • 프록시 테스트는 작동하지만 Pi-hole에서 업스트림 응답이 없습니다. Pi-hole 설정이 정확한지 확인한 127.0.0.1#5053후 재시작하십시오 pihole-FTL. 표준 업스트림 체크박스가 자동으로 다른 경로를 제공하지 않는지 확인하십시오.
  • 변경 후에는 Ubuntu 자체에서 이름을 확인할 수 없습니다. 이 설정은 호스트의 파일이 아닌 Pi-hole의 업스트림 파일을 변경합니다 /etc/resolv.conf. systemd-resolved따라서 문제 해결을 위해 해당 파일을 교체하거나 비활성화하는 것은 피해야 합니다.

롤백하려면 Pi-hole에 기록해 둔 업스트림 DNS 설정을 복원하고 다시 시작하십시오 pihole-FTL. Pi-hole이 더 이상 프록시를 가리키지 않게 되면 dnscrypt-proxy패키지 관리자를 사용하여 비활성화하거나 제거할 수 있습니다. 이 서버가 Pi-hole을 통해 자체 DNS를 확인하는 경우, 서비스를 변경하기 전에 로컬 복구 경로를 확보해 두십시오.

어떤 옵션이 네트워크에 적합합니까?

Pi-hole에서 중앙 집중식 DNS 필터링을 사용하고 Pi-hole에서 선택한 하나의 리졸버로의 트래픽을 암호화하려는 경우 이 단일 호스트 프록시 구성을 사용하십시오. 프록시는 로컬 주소와 포트가 하나뿐이므로 검사가 비교적 쉽습니다. Pi-hole을 Docker, 다른 서버 또는 여러 네트워크에서 실행하는 경우 루프백 주소 대신 컨테이너 네트워크 주소가 필요할 수 있으며, 프록시 리스너가 공개 리졸버로 노출되지 않도록 제한해야 합니다. 정책 기반 필터링, 장치별 ID 또는 가정 외부 로밍 장치에 대한 암호화된 DNS가 필요한 경우 해당 클라이언트 또는 관리형 게이트웨이를 별도로 구성하십시오. Pi-hole의 업스트림 DoH 연결은 각 클라이언트의 Pi-hole까지의 경로를 자동으로 암호화하지 않습니다.

마지막으로, 라우터나 클라이언트가 두 번째 DNS 서버를 광고하는 경우 Pi-hole을 우회할 수 있다는 점을 기억하십시오. 네트워크 전체 필터링을 위해서는 DHCP를 통해 클라이언트에게 Pi-hole 주소만 제공하고 IPv4뿐만 아니라 IPv6 DNS 광고도 고려해야 합니다. 라우터 설정을 변경한 후에는 여러 장치에서 확인하십시오. 서버에서 프록시를 올바르게 설정하더라도 클라이언트가 다른 리졸버를 직접 사용하는 것을 막을 수는 없기 때문입니다.

공식 참고 자료

댓글 남기기

Ubuntu Server 24.04에서 Pi-hole을 사용하여 HTTPS를 통한 DNS를 설정하는 방법

Ubuntu Server 24.04에서 Pi-hole을 사용하여 HTTPS를 통한 DNS를 설정하는 방법

Ubuntu Server 24.04에서 Pi-hole을 구성하여 dnscrypt-proxy를 사용한 DNS-over-HTTPS를 사용하도록 설정한 다음, 로컬 업스트림을 확인하여 일반적인 DNS 충돌을 방지하십시오.

SSH X11 포워딩을 통해 YaST GUI가 실행되지 않는 문제를 해결하는 방법

SSH X11 포워딩을 통해 YaST GUI가 실행되지 않는 문제를 해결하는 방법

SSH X11 포워딩을 통한 YaST GUI 오류를 해결합니다. DISPLAY를 테스트하고, 문서에 명시된 Qt XIO 오류를 수정하고, SSH 설정을 확인하고, 필요한 경우 ncurses로 전환합니다.

SUSE RMT 서버(SMT 대체) 로컬 설정 방법

SUSE RMT 서버(SMT 대체) 로컬 설정 방법

SLES 15에 SUSE RMT를 설정하고, SCC 메타데이터를 동기화하고, 선택한 저장소를 미러링하고, HTTPS를 통해 클라이언트를 등록하고, SMT에서 마이그레이션할 때의 한계를 이해합니다.

Pardus Linux 23에서 사운드 카드 드라이버가 감지되지 않는 문제 해결

Pardus Linux 23에서 사운드 카드 드라이버가 감지되지 않는 문제 해결

Pardus Linux 23에서 사운드 카드가 인식되지 않는 문제를 해결합니다. ALSA 감지, 커널 모듈, 오디오 서비스, 출력 프로필, 펌웨어 및 업데이트를 안전하게 점검하세요.

Pardus KVM 게스트에서 디스플레이 해상도가 1024x768로 고정된 문제 해결

Pardus KVM 게스트에서 디스플레이 해상도가 1024x768로 고정된 문제 해결

Pardus KVM 게스트가 1024x768 해상도에 고정된 문제를 해결하려면 가상 GPU, SPICE 에이전트, X11 또는 Wayland 세션을 확인하고 더 높은 해상도의 디스플레이 모드가 올바르게 설정되었는지 확인하십시오.

데비안에서 부팅 시 원격 SSHFS 디렉터리를 자동으로 마운트하는 방법

데비안에서 부팅 시 원격 SSHFS 디렉터리를 자동으로 마운트하는 방법

키 기반 SSH, /etc/fstab, systemd 네트워크 옵션, 자동 마운트 및 검증 단계를 사용하여 Debian에서 부팅 시 원격 SSHFS 디렉터리를 자동으로 마운트합니다.

SLES 시스템 업그레이드 중 발생하는 "메모리를 할당할 수 없습니다" 오류 해결 방법

SLES 시스템 업그레이드 중 발생하는 "메모리를 할당할 수 없습니다" 오류 해결 방법

SLES 업그레이드 중 발생하는 "메모리를 할당할 수 없습니다" 오류를 해결합니다. RAM, 스왑, OOM 로그 및 프로세스 제한을 확인한 다음 패키지 트랜잭션을 중단하지 않고 복구합니다.

Harmonica OS 태블릿의 터치스크린 보정 문제 해결: 적합한 Linux 해결 방법을 선택하세요

Harmonica OS 태블릿의 터치스크린 보정 문제 해결: 적합한 Linux 해결 방법을 선택하세요

Harmonica OS(HamoniKR) 태블릿에서 터치 오프셋, 회전 및 디스플레이 매핑 문제를 해결하세요. X.Org와 libinput의 해결 방법을 비교하고, 안전하게 테스트하고, 보정이 도움이 되지 않는 경우를 알아보세요.

기존 Debian 12에 암호화된 SWAP 파티션을 설정하는 방법

기존 Debian 12에 암호화된 SWAP 파티션을 설정하는 방법

dm-crypt, 매 부팅 시 새로운 임의 키 생성, /etc/crypttab, /etc/fstab 파일 및 안전한 검증 단계를 사용하여 기존 Debian 12 스왑 파티션을 암호화합니다.

우분투에서 이메일 알림을 통해 SMART 드라이브 상태를 모니터링하는 방법

우분투에서 이메일 알림을 통해 SMART 드라이브 상태를 모니터링하는 방법

Ubuntu에 smartmontools를 설치하여 드라이브 상태를 모니터링하고 SMART 이메일 알림을 전송하세요. 장치 지원 여부를 확인하고, 메일 전송을 구성하고, 알림을 테스트하고, 오류를 해결할 수 있습니다.