인터넷 모뎀이 인터넷에서 연결이 끊어지면 인트라넷 클라이언트에서 DNS 확인이 불가능합니다.

인터넷 모뎀이 인터넷에서 연결이 끊어지면 인트라넷 클라이언트에서 DNS 확인이 불가능합니다.

이것은 매우 특이한 질문입니다. 집에 다음과 같은 SOHO가 있습니다.

internet->-|ISPmodem|->-|Firewall/DHCP/DNS/HTTP server|->-intranet

어디

  • ISP 모뎀은 라우터로 전혀 사용되지 않으며 방화벽이 개방된 DMZ로 구성됩니다.
  • 내 서버는 방화벽/라우팅 작업을 수행할 뿐만 아니라 모든 인트라넷에 대한 DHCP 및 DNS(바인딩) 확인자 역할을 합니다. 물론 모든 인트라넷의 인터넷 게이트웨이 역할도 합니다.
  • 인트라넷에는 일부 HTTP 서버, MPD(뮤직 플레이어 데몬), VNC 서버, Raspberry Pi 및 기타 서비스를 포함하여 데스크톱/노트북/프린터/액세스 포인트 등이 포함됩니다.

모뎀이 인터넷에 연결되어 있으면 인트라넷 및 인터넷 주소를 확인하고 ping하면 제대로 작동합니다. FQDN을 사용하여 인트라넷의 HTTP 서버 페이지를 보거나 일부 MPC(Music Player Control)에서 MPD의 FQDN을 사용하여 노래를 변경하는 등의 다른 서비스도 정상적으로 작동합니다. 모든 것에 동일합니다. 내가 이 모든 말을 하는 이유는 기본적으로 내가생각하다DHCP/DNS 부분이 올바르게 설정되어 있습니다.

이제 인터넷이 없으면 중단 중에도 모든 인트라넷 서비스를 계속 확인할 수 있을 것으로 예상하지만 실제로는 그렇지 않은 것 같습니다. FQDN 대신 IP 주소를 사용하면 인트라넷의 모든 것을 계속 사용할 수 있습니다. 또한 서버의 IP 주소를 확인하기 위해 실행할 수 있으며 요청이 DNS 서버에 도달하고 응답이 정상적으로 다시 전송되는 nslookup <hostname|FQDN>것을 볼 수 있습니다 . tcpdump그러나 "서비스"에 액세스하려는 시도는 일반적으로 실패합니다. 따라서 "Firefox"를 사용하여 HTTP 서버에서 웹 페이지를 보려고 하면 "페이지를 찾을 수 없음" 오류와 함께 실패합니다. MPD의 경우나 ssh다른 GNU/Linux IoT 또는 임베디드 컴퓨터를 사용해 볼 때도 마찬가지입니다 . 문제는 항상 서버를 찾을 수 없다는 것입니다.

모든 인트라넷 서비스가 제대로 작동할 것으로 기대하기 때문에 이는 매우 이상합니다. DNS 서버는 DNS "마스터"이고 인트라넷 도메인에 대한 권한을 갖습니다.

tcpdump활동을 추적하고 문제를 해결해 왔기 때문에 상황이 더욱 이상해졌습니다."서버를 찾을 수 없음" 오류 메시지가 표시되면 DNS 요청이 DNS 서버로 전달되지 않는다는 점을 인식하세요.! 이는 마치 클라이언트(모든 인트라넷 컴퓨터!)가 "우리가 대부분의 인터넷 요청을 처리할 수 없기 때문에 아무것도 요청하려고 할 필요가 없다"고 결정한 것과 같습니다.

어리석게 들리는 건 알지만 왜 해결되지 않는지 정말 모르겠습니다! 문제의 범위를 DNS 서버나 기타 구성 요소 또는 액세스 포인트로 좁힐 수도 없습니다.

도움을 요청해도 될까요? named.conf시작점으로 여기에 첨부했습니다 . 어쩌면 몇 가지 중요한 옵션이 실제로 누락되었을 수도 있습니다. 추가 정보가 결론을 도출하는 데 도움이 될 것이라고 생각하시면 언제든지 문의해 주세요!

$ cat /etc/named.conf

include "/etc/rndc.key";

acl skails_dns {
        192.168.12.122/32;
        };

acl outbound_subnet { 192.168.321.0/24; }; //this is the modem subnet side
acl skails_subnet { 192.168.12.0/24; };    //this is the intranet side
acl local_host { 127.0.0.1/32; };
acl local_nets {
    local_host;
    skails_subnet;
    };
acl other_subnets { outbound_subnet; };
acl trusted_subnets {
    local_nets;
    skails_dns;
    };
acl all_my_nets {
    trusted_subnets;
    other_subnets;
    };

options {
    directory "/var/named";
    /*
     * If there is a firewall between you and name servers you want
     * to talk to, you might need to un-comment the query-source
     * directive below.  Previous versions of BIND always asked
     * questions using port 53, but BIND 8.1 uses an unprivileged
     * port by default.
     */
    // query-source address * port 53;
    forwarders {
        192.168.321.72;     //modem
        .....               //some other servers (openDNS, google, others)
        };
//  forward first;

    allow-recursion { trusted_subnets; }; //for whom will bind go the extra mile to find the final address
    listen-on { trusted_subnets; }; //ifs on which bind listens for queries
    allow-transfer { trusted_subnets; };
    allow-query { trusted_subnets; };
};



controls {
    inet 127.0.0.1 port 953 allow { local_host; } keys { rndc-key; };
};

// 
// a caching only nameserver config
// 
zone "." IN {
    type hint;
    file "caching-example/named.root";
};

zone "localhost" IN {
    type master;
    file "caching-example/localhost.zone";
    allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "caching-example/named.local";
    allow-update { none; };
};
zone "skails.home" {
    type master;
    file "/var/named/skails.home.hosts";
    notify yes;
    allow-update { key rndc-key; };
};
zone "12.168.192.in-addr.arpa" {
    type master;
    file "/var/named/192.168.12.rev";
    notify yes;
    allow-update { key rndc-key; };
};

편집: 제안한 대로 나도 이것을 시도했는데 host <intranet pc name|FQDN> <ip address of server>이것도 예상대로 작동합니다. 그래서 임의의 인트라넷 컴퓨터에서 나는:

  • cli에서 올바르게 ping, nslookup, 호스트, ssh, wget을 수행할 수 있습니다(cli는 유효함).
  • Apache 서버에 액세스할 수 없습니다(간단한 HTTP 웹페이지).

나는 전화로:

  • nslookup 가능
  • ping, HTTP 액세스, MPD 액세스 또는 기타 인트라넷 서비스에 액세스할 수 없습니다.

이 모든 경우에 이상하게도 DNS 조회가 발생하지 않습니다.

EDIT2: 명명된.루트가 비어 있지 않습니다.

$ cat /var/named/caching-example/named.root | egrep -v "(;)"
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     199.9.14.201
B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:200::b
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::c
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13
D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
E.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:a8::e
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
G.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:12::d0d
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     198.97.190.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::53
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fe::53
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:c27::2:30
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:9f::42
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35

답변1

전체 설명필수 구성(Digital Ocean은 평판이 좋은 웹사이트입니다.) 길이가 길고 세부 정보가 많습니다. 기본 전제는 dig(을 사용하고 있으므로 ) bind로컬 DNS 서버에서 bind로컬 이름을 확인할 수 있어야 한다는 것입니다. 기본 쿼리:

$ dig @192.168.12.122 skails.home.      # assuming your server
                                        # is at 192.168.12.122

bind서버는 인터넷이 있는지 여부를 올바르게 확인해야 합니다.

DNS 서버가 수신된 답변을 캐시할 수 있다는 점을 이해하시기 바랍니다. 특별한부정적인답변. DNS 서버가 해결을 시도하는 경우.(점) 주소 또는집.주소를 지정하고 부정적인 답변을 받으면 다른 문제는 해결되지 않습니다(서버 자체가 이러한 문제를 우회하는 방법을 알고 있지 않는 한). 이것이 서버를 다음과 같이 구성해야 하는 이유입니다.독립적인섬기는 사람. 위에 제공된 구성 링크.

그것만 이해해주세요하나가리키다(.)는 mini-DNS(또는 avahi 등)로 연결될 수 있습니다. 간단히 말해서: 로컬 DNS 주소해서는 안 된다(로컬이 아니며 예시가 아닙니다). 합리적인 설명을 해준다이 종이(이것은 정책이 아닌 초안이지만 문제에 대한 건전한 전반적인 견해를 제공합니다).

이것현재 BCP(Best Current Practice)는 다음과 같습니다..

관련 정보