kubernetes(DNS over HTTPS)에 pihole와wireguard를 배치하는 방법

이 강좌에서, 우리는 pihole가 있는 dns에 차단 프로그램을 추가하고, 귀속 dns를 상위 서버로 사용하며,wireguardvpn을 통해 LAN 네트워크와 인터넷에 접근할 것이다.우리는 K3Skubernetes 공급업체로 사용한다.

가설


이 강좌를 배우려면 다음이 필요합니다.
  • 모든 linux 버전을 실행하는 컴퓨터 (이 강좌에서 debian buster를 사용합니다)
  • 이 컴퓨터는 최소한 1Gb의 램과 2개의 핵이 필요하다.
  • 이 컴퓨터는 정적 IP 주소가 있어야 한다(내 예는 192.168.10.10, LAN: 192.168.10.1/24)
  • 방화벽은 다음 포트에서 인바운드 연결을 허용하도록 구성됩니다.
  • 53/tcp
  • 53/udp
  • 80/tcp
  • 443/tcp
  • 51820/udp
  • 인터넷에서 연결하려면 ISP 라우터에서 다음 포트를 열어야 합니다.
  • 80/tcp(Pihole Web Interface HTTP)
  • 443/tcp(Pihole Web Interface HTTPS)
  • 51820/tcp(Wireguard VPN)
  • 인터넷 사용자 인터페이스를 통해 인터넷에서pihole로 연결하기 위해서는 FQDN 인터넷을 가리키는 것이 필요합니다. (이 강좌에서 저는 구글 도메인을 사용합니다. 도메인이 없으면 사용할 수 있습니다duckdns
  • 기능성 K3S 클러스터Installation guide 참조.이 자습서는 K8S에 적용되어야 하지만 Traefik Ingress, Klipper Service 로드 밸런서
  • 와 같은 추가 기능을 배포해야 합니다.
  • K3S 클러스터
  • 에서 작업을 수행하려면 kubectl가 필요합니다.

    시스템 구조


    다음 그림에서 우리가 실현하고자 하는 도표를 볼 수 있습니다.우리는 로컬 네트워크(192.168.10.1/24)의 pihole에 접근하고 인터넷 액세스 관리 인터페이스를 통해 마지막으로 Wireguard를 통해 VPN을 통해 그룹 자원에 접근하거나 dns로만 조회할 수 있다.

    리소스


    모든 목록이 이 GitHub repository에 있습니다. 마음대로 복제하고 맞춤형으로 만들 수 있습니다.

    방법론


    이름 공간


    우리가 설정해야 할 첫 번째 일은 namespace 이다. 피홀, unbound,wireguard에 두 개의 명칭 공간을 만들어야 한다. piholecert-managerpihole UI 인터페이스에서 HTTPS를 사용할 수 있도록 인증서 관리자를 배치합니다.
    $ kubectl apply -f k8s/01-namespaces.yaml
    

    동적 DNS


    만약 정적 IP 주소를 분배하지 않았다면, 동적 dns가 제공하는 공공 IP를 사용할 수 있습니다. 제 예에서 구글 도메인을 사용했기 때문에curl로 하위 영역을 업데이트할 수 있습니다.나는 5분마다 ISP가 분배한 공공 IP를 업데이트하는 cronJob를 만들었다.
    $ kubectl apply -f k8s/02-dynamic-dns-google.yaml
    

    디렉토리 만들기


    구성 파일을 저장하려면 마스터 노드에 두 개의 디렉토리를 생성해야 합니다.
    $ sudo mkdir -p /var/lib/{pihole,wireguard}
    

    피공


    Pihole은 dns에서 차단 프로그램을 추가하는 것입니다.Pihole을 설정하고 LAN 네트워크에 접근하기 위해서 53/tcp udp에서 로컬 호스트에 연결된 LoadBalancer 서비스를 설정해야 합니다.포털 컨트롤러를 통해 웹 UI에 접근할 수 있습니다. (방문하지 않으려면 NodePortpihole-ui-svc 서비스만 사용하면 됩니다.)
    이 목록에는 세 가지 구성이 있습니다.
  • 업스트림 서버가 있는 Pihole
  • 바인딩 해제
  • Pihole
  • cloudflare DNS 서버
  • 를 사용하여 HTTP를 통해 DNS를 연결하는 Pihole
    일반적인 구성:
  • 영구 볼륨 유형hostPath/var/lib/pihole
  • 지속적인 대량 클레임
  • 설정 맵(시간대, 이메일 관리 및 상위 dns)
  • 기밀(네트워크 비밀번호)
  • 바늘구멍Deployment
  • 클러스터 IP 서비스(Pihole UI, Pihole DNS)
  • LoadBalancer 서비스(Pihole DNS를 호스트에 바인딩)
  • 다음을 구성해야 합니다.
  • 시구(pihole 설정도)
  • 관리자 이메일(pihole configmap)
  • 네트워크 비밀번호(pihole 기밀)
  • Pihole 및 업스트림 서버


    이 설정은 dns 조회를 클라우드flare dns1.1.1.1와 구글 dns8.8.8.8 등 상위 서버로 전송하며 암호화할 필요가 없습니다.
    이 설정을 적용하려면 다음 명령을 사용하십시오
    $ kubectl apply -f k8s/03-pihole-upstream-dns.yaml
    

    바인딩되지 않은 Pihole


    Unbound은 인증, 재귀속, 캐시 DNS 분석 프로그램입니다.dns 조회를 해석하기 위해서, 연결되지 않은 조회를 루트 (.com) 로 해석한 다음, 하위 필드 (example.com) 에 조회하고 필요한 필드 (pihole.example.com) 를 찾을 때까지 계속 실행합니다.유행하는 dns 서버(예를 들어 구글)에서 어떤 유형의 추적을 피하는 것은 매우 유용하다.이 강좌에서, 우리는 귀속 dns로 사용할 이 이미지 mvance/unbound 를 미리 설정할 것입니다.
    이 설정을 적용하려면 다음 명령을 사용하십시오
    $ kubectl apply -f k8s/03-pihole-unbound.yaml
    
    바인딩되지 않은 설치 테스트

    HTTP를 통해 cloudflare DNS 서버에 DNS 연결


    이 설정은https를 통해 DNS 조회를cloudflare DNS 서버로 전송합니다. 모든 조회는 TLS를 사용하여cloudflare와의 연결을 실행하기 때문에 암호화됩니다.ISP에서 어떤 DNS 요청을 보내고 있는지 알 수 없습니다.
    이 설정을 적용하려면 다음 명령을 사용하십시오
    $ kubectl apply -f k8s/03-pihole-DoH-cloudflare.yaml
    

    테스트 구멍 설치



    철조망


    WireGuard는 커널 레벨에서 작동하는 현대 VPN 서버입니다.본 강좌에서 우리는 vpn을 이용하여 인터넷에서 LAN 자원을 방문하거나 인터넷에서 pihole에 설치된 dns 조회만 암호화한다.
    이 목록에는 다음이 포함됩니다.
  • 영구 볼륨 유형hostPath/var/lib/wireguard
  • 지속적인 대량 클레임
  • 설정 맵(시간대, 서버 URL, 대등점 수량 등)
  • 강선 보호판StatefulSet
  • LoadBalancer 서비스(Wireguard 스니퍼 포트 51820/udp)
  • 다음을 구성해야 합니다.
  • 시구(wireguard 설정도)
  • 서버 URL(wireguard 구성도)
  • 대등점 수량(wireguard configmap)
  • $ kubectl apply -f k8s/04-wireguard.yaml
    

    Wireguard 클라이언트 구성


    다음 그림과 같이wireguardpod의 로그를 볼 수 있습니다.
    /var/lib/wireguard/config/peer<N>/peer<N>.conf에 있는 각 피어의 구성 파일도 복제할 수 있습니다.

    추가(Pihole UI에 대한 포털 구성)


    이 절차는 인터넷 HTTP/HTTPS 입구에서 Pihole 웹 사용자 인터페이스를 제공하는 방법을 설명한다.만약 당신이 이러고 싶지 않다면 Traefik 중의 NodePort 서비스를 사용하면 됩니다.

    배포 인증서 관리자


    HTTPS에 TLS 인증서를 제공하려면 인증서 관리자를 배치해야 합니다.
    $ kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml
    

    클러스터 게시자 배포(암호화)


    이 목록에는 Let's encrypt에 대한 클러스터 게시자가 배치됩니다.알림을 받기 위해 전자 우편을 설정해야 합니다.
    $ kubectl apply -f k8s/05-cluster-issuer-letsencrypt.yaml
    

    들어가다


    이 목록은 피홀 호스트의 영역을 따라옵니다.이전에 설정한 하위 영역을 설정해야 합니다.
    $ kubectl apply -f k8s/06-ingress.yaml
    

    사용 방법


    LANpihole-ui-svc 서버를 Pihole 설치로 변경할 수 있습니다.만약 VPN에 있다면, 기본적으로wireguard를 통해 dns 조회를 포함한 모든 데이터를 공유할 수 있습니다.wireguard 루트 dns를 통해서만 조회하려면 DNS 에서 다음 루트만 루트해야 합니다. AllowedIPS 10.0.0.0/8 (로컬 네트워크 CIDR로 교체)
    이 강좌를 계속 공부하고 있다면kubernetes 그룹에서 다음 자원을 볼 수 있습니다
    192.168.10.0/24 인터넷을 통한 Pihole 관리 사용자 인터페이스

    좋은 웹페이지 즐겨찾기