禁用 IPv6 后 BIND9 停止解析名称 - Ubuntu Server 20.04 LTS

禁用 IPv6 后 BIND9 停止解析名称 - Ubuntu Server 20.04 LTS


我是 Linux 新手,我正在家里安装一个服务器,其中包含以下服务:用于名称解析的 Bind9、ISC-DHCP 服务器/中继、Fw iptables。
据我所知,BIND 有时使用 IPv6 地址而不是 IPv4 来解析查询。
由于我对 IPv6 已经不太熟悉,为了简化我的内部配置并防止通过 IPv6 在我的网络上出现安全问题,我决定在内部网络中禁用 IPv6。
我已将 BIND 仅配置为 IPv4(已添加-u bind -4),一切正常,直到我在网络中禁用 IPv6 后,BIND 不再解析我的查询。

我添加了以下几行/etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

并启用 IPv4 转发

net.ipv4.ip_forward=1

这是我的 BIND9 配置文件

命名的.conf.选项

acl "trusted" {
    10.10.1.0/24;
    10.10.10.0/24;
    10.10.20.0/24;
    10.10.30.0/24;
    10.10.40.0/24;
    192.168.0.0/24;
    localhost;
};
options {
    directory "/var/cache/bind";
    recursion yes;
    allow-query { trusted; };
        forwarders {
                8.8.8.8;
                8.8.4.4;
                201.21.192.116;
                201.21.192.111;
        };
    forward only;
    listen-on { 10.10.1.254;
        10.10.10.254;
        10.10.20.254;
        10.10.30.254;
        10.10.40.254;
     };
    auth-nxdomain no;
    version "not current available";
    querylog yes;
};

名称.conf.本地

# Forward Zone
zone "internal.home" {
  type master;
  file "/etc/bind/zones/db.internal.home";
  allow-transfer { 10.10.1.254; };
};


# Reverse Zone
# Server IP 10.10.1.10
zone "1.10.10.in-addr.arpa" {
  type master;
  file "/etc/bind/zones/db.10";
  allow-transfer { 10.10.1.254; };
};

数据库.内部.主页

$TTL    604800
@    IN    SOA    ns1.internal.home. root.internal.home. (
                  3        ; Serial
             604800        ; Refresh
              86400        ; Retry
            2419200        ; Expire
             604800 )      ; Negative Cache TTL
;
                         IN    NS    ns1.internal.home.
                         IN    NS    ns2.internal.home.
ns1.internal.home.       IN    A    10.10.1.254
ns2.internal.home.       IN    A    10.10.1.254
server.internal.home.    IN    A    10.10.1.254
iap225.internal.home.    IN    A    10.10.1.1

分贝.10

$TTL    604800
@    IN    SOA    internal.home. root.internal.home. (
                  3        ; Serial
             604800        ; Refresh
              86400        ; Retry
            2419200        ; Expire
             604800 )            ; Negative Cache TTL
;
     IN    NS    ns1.internal.home.
     IN    NS    ns2.internal.home.
;
254  IN    PTR    ns1.internal.home.
254  IN    PTR    ns2.internal.home.
254  IN    PTR    server.internal.home.
1    IN    PTR    iap225.internal.home.

我已经用named-checkconf和测试了我的配置named-checkzone,所有输出均正常。

在我的 iptablesrules.v4文件中我有以下规则:

*nat
:PREROUTING ACCEPT [1679:401995]
:INPUT ACCEPT [592:40310]
:OUTPUT ACCEPT [1740:164981]
:POSTROUTING ACCEPT [509:46285]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

*filter
:INPUT DROP [1:36]
:FORWARD ACCEPT [20:1358]
:OUTPUT DROP [0:0]

#Reject forwarding communication in the eth0 (Flood atack)
-A FORWARD -i eth0 -o eth0 -j REJECT
# Allow incoming traffic to loopback interface
-A INPUT -i lo -j ACCEPT
#Allow any existing connections or anything related
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#Allow new connections only from internal network (! means except)
-A INPUT -m state --state NEW ! -i eth0 -j ACCEPT
#Allow HTTP/S incoming connections
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
#Allow SSH incoming connections only in eth1.10 and from 10.10.10.0
-A INPUT -i eth1.10 -p tcp --dport 22 -s 10.10.10.0/24 -j ACCEPT
#Allow DNS incoming requests only internal
-A INPUT -i eth1+ -p udp --dport 53 -j ACCEPT
-A INPUT -i eth1+ -p tcp --dport 53 -j ACCEPT
#Allow DHCP incoming requests only internal
-A INPUT -i eth1+ -p udp --dport 67:68 -j ACCEPT
#Allow incoming ICMP
-A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -f -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#Allow forward traffic
-A FORWARD -i eth1+ -o eth0 -j ACCEPT
#Allow output traffic
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 1900 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 1900 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5353 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5938 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5938 -j ACCEPT
#Allow output ICMP
-A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
COMMIT

*mangle
:PREROUTING ACCEPT [226702:271091885]
:INPUT ACCEPT [8236:8159908]
:FORWARD ACCEPT [218466:262931977]
:OUTPUT ACCEPT [8709:7959666]
:POSTROUTING ACCEPT [227009:270858537]
COMMIT


以下是我禁用 IPv6 的测试(所有测试均在服务器上执行)

正在 Ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=25.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=24.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=27.5 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=50 time=25.1 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=26.7 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 24.835/25.820/27.506/1.068 ms

正在 Ping www.google.com

ping: www.google.com: Temporary failure in name resolution


如果全部设置net.ipv6.conf.*.disable_ipv60,则一切都正常。

net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0

正在 Ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=26.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=27.2 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=26.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=50 time=26.2 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=25.6 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 25.633/26.325/27.185/0.524 ms

正在 Ping www.google.com

PING www.google.com (172.217.28.4) 56(84) bytes of data.
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=1 ttl=50 time=26.6 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=2 ttl=50 time=27.1 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=3 ttl=50 time=27.8 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=4 ttl=50 time=27.2 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=5 ttl=50 time=26.0 ms
^C
--- www.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 26.012/26.962/27.795/0.601 ms


我真的被这个问题难住了。我搜索了很多论坛,但没找到解决这个问题的方法。

有人能帮我吗?

执行后我也收到许多此类消息dmesg

audit: type=1400 audit(1589236716.310:45): apparmor="DENIED" operation="open" profile="/usr/sbin/named" name="/proc/sys/kernel/random/boot_id" pid=894 comm="named" requested_mask="r" denied_mask="r" fsuid=0 ouid=0

我向大家致以最诚挚的问候。
拉斐尔。

答案1

经过多次研究和重新安装后,我认为我已经找到了最适合我的配置,即禁用服务器中的所有 IPv6。

首先,我使用 grub 禁用了 IPv6。以下是我在 grub 中添加的内容/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

这禁用了 Ubuntu 的所有 IPv6。良好的起点。

然后我已经安装了BIND9。

apt install bind9 bind9utils bind9-doc

我对 BIND 的最终配置只有一点变化。我有 4 个使用 VLAN 的内部网络,那么为什么我的受信任 acl 中有许多网络呢?

/etc/bind/named.conf.options

acl "trusted" { localhost; 10.10.1.0/24; 10.10.10.0/24; 10.10.20.0/24; 10.10.30.0/24; 10.10.40.0/24; 192.168.0.0/24; };

options {
        directory "/var/cache/bind";
        auth-nxdomain no;
        recursion yes;
        allow-query { trusted; };
        forwarders { 8.8.8.8; 8.8.4.4; 201.21.192.116; 201.21.192.111; };
        forward only;
        listen-on port 53 { localhost; 10.10.1.254; 192.168.0.254; };
        version "not current available";
        querylog yes;
        dnssec-validation no;
};

/etc/bind/named.conf.local

# Forward Zone
zone "pegasus.home" {
  type master;
  file "/etc/bind/forward.pegasus.home";
};

# Reverse Zone
# Server IP 10.10.1.254
zone "1.10.10.in-addr.arpa" {
  type master;
  file "/etc/bind/reverse.pegasus.home";
};

/etc/bind/forward.pegasus.home

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.pegasus.home. root.ns1.pegasus.home. (
                              6         ; Serial
                         604820         ; Refresh
                          86600         ; Retry
                        2419600         ; Expire
                         604600 )       ; Negative Cache TTL
;
@               IN      NS      ns1.pegasus.home.
ns1             IN      A       10.10.1.254
centaurus       IN      A       10.10.1.254

/etc/bind/reverse.pegasus.home

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.pegasus.home. root.pegasus.home. (
                             21         ; Serial
                         604820         ; Refresh
                         864500         ; Retry
                        2419270         ; Expire
                         604880 )       ; Negative Cache TTL
;
@       IN      NS      ns1.pegasus.home.
ns1     IN      A       10.10.1.254
254     IN      PTR     ns1.pegasus.home.
254     IN      PTR     centaurus.pegasus.home.

IPTables 中的规则没有改变。
我还在所有网络接口中将 IPv6 设置为禁用,并且没有在 sysctl.conf 文件中添加有关 IPv6 的配置。
现在一切正常。

以下是我用作配置起点的地方。
如何在 Linux 中通过 GRUB 禁用 IPv6网址:www.techrepublic.com
如何在 Ubuntu / Debian 上安装和配置 DNS 服务器(Bind 9)在 www.linuxtechi.com

希望这可以帮助其他遇到同样问题的人。

相关内容