Ubuntu에서 특정 인터페이스의 모든 프로그램/계층에 대해 DNS 확인을 영구적으로 구성하는 방법

Ubuntu에서 특정 인터페이스의 모든 프로그램/계층에 대해 DNS 확인을 영구적으로 구성하는 방법

特定のネットワークインターフェイスに対してUbuntuノートブックのDNS設定を永久に設定する方法はありますか?

私が頼っているWiFiネットワークはそれほど予測できません。 Wi-Fiルーター管理コンソールの編集モードにアクセスできず、Wi-Fi接続が時々切断されてから戻ります。

つまり、DNSエントリを「リフレッシュ」するには、次のコマンドを引き続き呼び出す必要がありますsudo resolvectl dns 3 1.1.1.1 8.8.8.8

この問題は、最初に私が見たWebブラウザのエラー(たとえば、、、、などのDNS_*さまざまなエラー)が原因で発生しました。そのため、このWi-Fiネットワーク(ルーター)がISP(インターネットサービス)のプライベートDNSを使用していることがわかりました。プロバイダ) アイテムです。ルーター設定ダッシュボードにこれらの詳細(カスタムIPアドレス)を表示できますが、これらの設定を変更することはできません。DNS_PROBE_STARTEDDNS_PROBE_FINISHED_NO_INTERNETDNS_PROBE_FINISHED_NXDOMAINDNS_PROBE_FINISHED_BAD_CONFIGDNS_PROBE_FINISHED_NO_INTERNET

また、私のUbuntu DNSがWi-Fiネットワークのデフォルトゲートウェイ(ルーター)に依存していることがわかります。 IPアドレスを一致させるための次のコマンドでこれを見つけました。

# check my local Ubuntu DNS details for all interfaces
resolvectl dns
# find out the default gateway (it should be the router IP address)
ip route

これは、私のラップトップがDNS検証のためにゲートウェイ(ルーター)に動的に依存しており、ルーターがインターネットサービスプロバイダー(ISP)のいくつかのあいまいなIPアドレスを使用するように構成されていることを意味すると思います。そうですか?

/etc/systemd/resolved.conf このファイルを変更し、次を追加してグローバルDNSを変更しました。

DNS=1.1.1.1 8.8.8.8
FallbackDNS=8.8.4.4

それから私はそうしました。

# make sure to restart the DNS daemon
sudo systemctl restart systemd-resolved.service
# check what DNS is being used by each interface
resolvectl status

しかし、もちろん、これは私のWi-Fiインターフェースによって無視され、これを行う方法、または好みのDNSエントリと連携するように設定する方法を知りません。

完全性を期すために、新しいDNSキャッシュに依存するWebブラウザがDNS_*エラーを発生させないようにするために、これもこれを行います(これが正しいかどうかはわかりません。そうですか?)。

# check current DNS cache
resolvectl statistics
# flush DNS cache
resolvectl flush-caches

파일의 하단을 확인하면 /etc/resolv.conf다음이 표시됩니다.

nameserver 127.0.0.53
options edns0 trust-ad
search lan

이 DNS 문제는 해당 항목과 관련이 있을 수 있다고 생각 nameserver 127.0.0.53 하지만 파일이 /etc/resolv.conf자동 생성된다는 것도 알고 있습니다(아마도 자동 새로 고침됨). 이는 systemd-resolved.service노트북 127.0.0.53이 관리되는 DNS의 로컬 IP 주소에 의존한다는 것을 의미합니다. systemd-resolved수동으로 변경할 필요가 없다고 생각합니다.

다른 프로그램/명령이 다른 위치/계층을 사용하여 DNS 구성을 결정한다는 느낌이 듭니다. 특정 방식으로 변경 resolvectl/ 설정하면 systemd-resolved.service브라우저가 /etc/resolv.conf다른 곳(예: 이 파일 또는 이와 유사한 것)에서 DNS 구성을 읽을 수 있습니까 /etc/nsswitch.conf? 그렇습니까?

제 생각에는:

  • 이 명령을 sudo resolvectl dns 3 1.1.1.1 8.8.8.8영구적으로 만듭니다(재부팅 및 Wi-Fi 연결 해제/연결 주기 전반에 걸쳐).
  • /etc/resolv.conf유사 하거나 /etc/nsswitch.conf유사한 다른 모든 구성 파일을 변경하십시오.

내가 선호하는 DNS 구성 세부 정보에 의존합니다. 어떻게 해야 하나요?

ベストアンサー1

데스크톱 설치인지 서버 설치인지 표시하지 않았습니다. 어쨌든 설명하려고 노력하겠습니다.

먼저 내용을 살펴보겠습니다 /etc/resolv.conf.

nameserver 127.0.0.53
options edns0 trust-ad
search lan

127.0.0.53이는 예상되는 이름 서버로 표시되며 로컬 캐시 스텁 확인자입니다. 실제로 command 를 입력하면 로컬 네임서버가 정의된 ls -l /etc/resolv.conf심볼릭 링크 /run/systemd/resolve/stub-resolv.conf(또는 최소한 그래야 함)임을 알 수 있습니다.

$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 31  2021 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

스텁 확인자는 향후 쿼리가 더 빨라지고 업링크 이름 서버를 쿼리할 필요가 없도록 DNS 쿼리를 캐시합니다. 실제로 무슨 일이 일어나는지 봅시다.

두 개의 터미널 창을 엽니다. 터미널(터미널 #1이라고 함)에서 tcpdump다음 명령을 사용하여 실행합니다. wlp9s0DNS 쿼리가 실행될 것으로 예상되는 인터페이스로 바꿉니다 . 그것이 인터넷에 연결된 유일한 인터페이스라면 그것을 사용하십시오.

sudo tcpdump -ni wlp9s0 -p port 53

그런 다음 다른 창(터미널 #2)에서 다음 명령을 실행합니다.

dig google.com

터미널 #2의 출력은 다음과 같으며 127.0.0.53이름 서버를 나타냅니다.

$ dig google.com

; <<>> DiG 9.16.1-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54920
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     294 IN  A   142.251.46.206

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Wed Jul 12 19:47:07 PDT 2023
;; MSG SIZE  rcvd: 55

터미널 #1에서 실행할 때 tcpdump출력이 없거나 일부 활동이 없습니다. 이전에 이 사이트를 방문한 적이 있다면 쿼리는 로컬 캐시에 있어야 하며 출력은 표시되지 않습니다 tcpdump. 그렇지 않은 경우 업링크 서버에 대한 쿼리가 포함된 출력이 표시됩니다. 계속 진행하면서 이전에 google.com에 쿼리한 적이 있다고 가정합니다. 이는 아직 출력이 없음을 의미합니다.

다음으로 로컬 DNS 캐시를 지워 보겠습니다. 터미널 #2에 다음을 입력합니다.

sudo resolvectl flush-caches

그런 다음 dig google.com터미널 #2에서 다시 실행하세요. 이번에는 tcpdump정의했거나 DHCP를 통해 수신한 업링크 서버를 쿼리하는 출력이 터미널 #1에 표시됩니다. 아래 출력에서는 208.65.212.34Wi-Fi 링크의 DHCP를 통해 나에게 제공되는 DNS 서버 중 하나인 서버가 쿼리되는 것을 볼 수 있습니다.

$ sudo tcpdump -ni wlp9s0 -p port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp9s0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:50:55.534164 IP 172.23.123.82.39024 > 208.65.212.34.53: 36626+ [1au] A? google.com. (39)
19:50:55.550242 IP 208.65.212.34.53 > 172.23.123.82.39024: 36626 1/0/1 A 142.251.46.206 (55)

우리가 완료한 두 쿼리 모두에서 쿼리 중인 네임서버가 출력에 dig google.com표시되었으며 127.0.0.53이는 항상 그랬습니다. 그러나 백그라운드에서는 이전에 쿼리되지 않은 업링크 서버를 쿼리하여 캐시에 저장합니다.

이제 데스크탑 환경에 DNS 서버를 설정하고 서버에 특정 인터페이스를 설정해 보겠습니다.


각 인터페이스에 대한 DNS 서버 정의 - DESKTOP

데스크탑 환경에서는 각 인터페이스에 DNS 서버를 할당하는 것이 매우 쉽습니다. Wi-Fi 인터페이스가 있는 경우 DHCP를 통해 설정될 가능성이 높습니다. 따라서 Wi-Fi 설정을 열고 IPv4 페이지를 클릭한 다음 아래 이미지와 유사한 DNS 서버를 추가하면 됩니다. 이를 8.8.8.8추가 DNS 서버로 정의합니다.

ここに画像の説明を入力してください。

DHCP 서버에서 제공하는 DNS 서버를 사용하지 않으려면 선택을 취소하세요.자동적 인.

터미널에서 실행하면 resolvectl status이 추가 DNS 서버가 인터페이스에 추가된 것을 볼 수 있습니다. 그렇지 않은 경우 Wi-Fi 어댑터를 켜거나 끄거나 재부팅해야 할 수도 있습니다.

Link 3 (wlp9s0)
      Current Scopes: DNS          
DefaultRoute setting: yes          
       LLMNR setting: yes          
MulticastDNS setting: no           
  DNSOverTLS setting: no           
      DNSSEC setting: no           
    DNSSEC supported: no           
  Current DNS Server: 208.65.212.34
         DNS Servers: 208.65.212.34
                      208.65.212.2 
                      8.8.8.8      
          DNS Domain: ~. 

다른 인터페이스의 경우 필요에 따라 반복하면 됩니다.


각 인터페이스에 대한 DNS 서버 정의 - SERVER

서버 환경에서는 Netplan 구성 파일의 각 인터페이스에 대한 이름 서버를 정의합니다. 다음 예는 두 개의 인터페이스로 만든 가상 머신의 예입니다. 첫 번째 인터페이스는 eth0DHCP를 통해 IP 주소를 얻지만 나에게 제공된 DNS 서버를 재정의하여 효과적으로 무시한 다음 내 자신의 DNS 서버를 정의합니다. 두 번째 인터페이스 eth1는 고정 IP 주소와 수동으로 정의된 DNS 서버로 구성됩니다.

version: 2
renderer: networkd
ethernets:
  eth0:
    dhcp4: true
    dhcp4-overrides:
      use-dns: false
    nameservers:
      addresses:
        - 1.1.1.1
        - 9.9.9.9
  eth1:
    dhcp4: false
    addresses: [192.168.5.11/24]
    nameservers:
      addresses:
        - 8.8.8.8
        - 8.8.4.4

변경한 후 실행하여 sudo netplan try변경 사항을 적용합니다. 그런 다음 를 실행하면 resolvectl status각 인터페이스에 자체 DNS 서버가 있음을 알 수 있습니다. 그렇지 않은 경우 변경 사항을 실제로 적용하려면 시스템을 재부팅해야 할 수도 있습니다. 이는 제가 변경했을 때 발생했습니다.

$ resolvectl status
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 1.1.1.1
       DNS Servers: 1.1.1.1 9.9.9.9

Link 3 (eth1)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
       DNS Servers: 8.8.8.8 8.8.4.4

그러나 이 구성은 Netplan의 한계에 도달했습니다. 특히 DNS 기본 경로와 관련하여 인터페이스 DNS 설정을 완전히 제어하려면 인터페이스를 구성해야 합니다.네트워킹Netplan 대신 직접. 매뉴얼 페이지를 참조하세요시스템 네트워크(5).


마지막으로 여기서 이야기하고 있는 것은 기본적으로 분할 DNS로, 특정 서버에 쿼리하도록 특정 도메인을 구성합니다. 이는 VPN, DNS 기본 경로, 검색 도메인 등에 도움이 됩니다. 이 주제에 대해 자세히 알아보려면 다음 링크를 확인하세요.

おすすめ記事