openresolv + dnsmasq를 사용하여 네트워크 관리자가 도메인별 네임서버를 구성하도록 하는 방법

openresolv + dnsmasq를 사용하여 네트워크 관리자가 도메인별 네임서버를 구성하도록 하는 방법

동시에 여러 네트워크에 연결되는 경우가 많습니다. 이러한 각 네트워크는 dhcp를 통해 이름 서버 구성을 제공합니다. 예를 들어 네트워크 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

네트워크 2(tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# 이름이 변경되었습니다

동시에 두 개의 네트워크에 연결된 경우:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

첫 번째 이름 서버는 company1.corp 이름만 알고 있으므로 service.company2.corp 확인은 작동하지 않습니다.

이것에 영감을 받아기사, 내가 설정했습니다공개 분석(resolvconf 구현) Arch Linux 설치에서 로컬 dnsmasq 서비스를 구성합니다.

resolvconf를 사용하여 네임서버를 수동으로 구성하는 경우:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

그런 다음 company1.corp 및 company2.corp의 이름을 확인할 수 있었습니다(로컬 dnsmasq 서버가 이를 처리합니다.)

수동 구성 후에는 verifyconf -l이 각각 2가지 구성을 표시합니다.

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

그러나 네트워크 관리자가 /etc/resolve.conf에 쓰는 경우처럼 네트워크 관리자가 구성을 수행하도록 하는 경우 이 두 구성은 별개가 아닙니다.

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

내 질문은 각 인터페이스의 이름 서버가 개별적으로 등록되도록 네트워크 관리자가 Resolveconf를 올바르게 호출하도록 하는 방법입니다. (안타깝게도 구글은 "resolveconf" == "resolve.conf"라고 생각하기 때문에 구글링은 쓸모가 없습니다)

답변1

NetworkManager에는 내장된 로컬 dnsmasq 서버를 관리하는 기능이 있습니다. 이 작업을 수행하기 위해 resolvconf/openresolv를 사용할 필요는 없습니다.

이 기능을 활성화하려면:

  • resolvconf/openresolv dnsmasq 구성이 이전에 활성화된 경우 이를 비활성화하고 실행 중인 dnsmasq 인스턴스가 없는지 확인하세요.
  • dnsmasq가 설치되어 있는지 확인하세요
  • 에 추가하세요.dns=dnsmasq/etc/NetworkManager/NetworkManager.conf
  • 네트워크 관리자 다시 시작

이 작업이 완료되면 NetworkManager가 dnsmasq 프로세스를 시작한 것을 확인할 수 있습니다.

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.conf로컬 dnsmasq 인스턴스를 가리켜야 합니다.

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

dnsmasq가 어떤 서버를 사용하고 있는지 확인할 수 있습니다.

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239

답변2

Gary van der Merwe의 답변을 따르십시오.

/etc/NetworkManager/NetworkManager.conf

추가해야 해요

[main]
dns=dnsmasq

파일로. 뿐만 아니라

dns=dnsmasq

이는 파일의 모든 설정이 하나의 섹션 아래에 있어야 하고 내 배포판의 NetworkManager 패키지의 manjaro(archlinux) 버전이 구성 파일을 채우지 않기 때문입니다. (나는 그가 제안한 라인이 그와 다른 사람들에게 효과가 있었기 때문에 이것이 실제로 Gary의 배포판의 경우라고 가정합니다.)

또한 모든 dnsmasq 구성은 이 구성 파일에 입력되어야 합니다.

/etc/NetworkManager/dnsmasq.d/

목차. 컴퓨터의 다른 디렉토리일 수도 있습니다. NetworkManager가 dnsmasq 데몬을 시작하는 데 사용하는 줄을 보고 어떤 디렉터리가 사용되었는지 알아냈습니다. 를 실행하면 이 줄을 볼 수 있습니다 ps aux|grep dnsmasq. 이 명령을 실행하기 전에 NetworkManager의 구성을 수정하고 해당 서비스를 다시 시작할 때까지 기다려야 합니다.

답변3

/etc/resolv.confOpenresolv를 사용하는 대신 NetworkManager가 재정의되는 것처럼 보입니다 . ~에 따르면FS#24635, NetworkManager는 openreslov를 지원하지만 빌드에서는 처음에 활성화되지 않습니다. 어떤 버전의 Arch Linux를 실행하고 있나요? 네트워크 관리자 패키지의 버전은 무엇입니까?

관련 정보