更改resolv.conf

更改resolv.conf

bug:resolv.conf 自动填充搜索和名称服务器查找:永久或临时(每次系统启动时运行。)

推荐的解决方案:resolvconf 包解决了自动填充问题(不要与 resolv.conf 混淆)

-https://www.youtube.com/watch?v=NEyXDdBrw2c
-https://unix.stackexchange.com/q/209760/441088
-https://unix.stackexchange.com/q/362587/441088

我的问题与上一个问题(441088)相同,除了需要 resolv.conf 不再更新(自动填充)搜索和名称服务器

#sudo vi resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by    resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual   nameservers.
nameserver 84.200.70.40
nameserver 84.200.69.80
nameserver 192.168.4.1 
nameserver 192.168.4.1
nameserver 192.168.1.1
nameserver 1.1.1.1
search autopopulated-isp-router 1.1.1.1

显然,它只是在现有名称服务器下方添加了额外的自动填充名称服务器。 (这有点偷偷摸摸,所以你必须不断检查 resolv.conf 以捕获名称服务器和搜索服务器的自动填充,这些服务器会自动附加到 resolvconf 设置中)

我如何更改 resolv.conf 以防止自动填充名称服务器并使用 isp IP 地址进行搜索?

尝试过:

# service networking stop && service network-manager start
# service networking start && service network-manager stop

网络管理器:
网络和网络管理器都停止了 Wicd,
然后没有 wicd,只有 nmtui 了网络启动然后与网络管理器启动

可在 debian 10.1 和 kali 2020 上复制(任何版本 - 都尝试过)

可使用 dhcp 或静态配置进行复制(是的,能够 ping 本地网关网络路由器和网络上的其他 ip)

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed,     try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname     mymachines
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

答案1

我认为这里的问题在于填充 resolv.conf 文件的 NetworkManager。

禁用 DNS 更新。

1-使用编辑器打开conf文件:

sudo vi /etc/NetworkManager/NetworkManager.conf

2- 将以上内容添加到 [main] 部分: dns=none

3-重新启动网络管理器:

sudo service network-manager restart

自从你上次编辑以来:

正如我在这里看到的,您正在使用 NetworkManager.service :

A- 如果您的接口使用 dhcp,请检查 DHCP 服务器的 DNS 设置:

cat /var/lib/NetworkManager/*.lease | grep 'domain-name-servers'

您可以直接设置这种情况下所需的 dns 条目并禁用 DHCP 提供它们:

# Edit dhclient configuration file
vi /etc/dhcp/dhclient.conf
# Set the fixed your dns server entries
supersede domain-name-servers 84.200.69.80, 84.200.70.40;

B-很明显,您的 /etc/resolv.conf 显然是由 systemd-resolved 服务管理的。

因此,您可以禁用此服务或让它运行并编辑其配置/etc/systemd/resolved.conf,因此要禁用它:

1- 首先检查当前 systemd-resolved.conf 文件的输出并检查 systemd-resolved 是否正在运行:

sudo cat /run/systemd/resolve/resolv.conf
sudo systemd-resolve status

2-停止/禁用服务:

  sudo systemctl disable systemd-resolved.service
  sudo systemctl stop systemd-resolved.service

3-在 NetworkManager 中设置 DNS 处理模式,使其不再由 systemd-resolved 或 NetworKService 管理(编辑 /etc/NetworkManager/NetworkManager.conf ):

  [main]
  dns=none

4-销毁符号链接 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf :

sudo unlink /etc/resolv.conf

5-重新启动网络管理器:

sudo systemctl restart NetworkManager

6-重新创建 resolv.conf 文件:

sudo touch /etc/resolv.conf
sudo chown root:root /etc/resolv.conf
sudo chmod 644 /etc/resolv.conf

7-手动填充 resolv.conf 文件:

echo 'nameserver 84.200.70.40
nameserver 84.200.69.80
nameserver 192.168.4.1 
nameserver 192.168.4.1
nameserver 192.168.1.1
nameserver 1.1.1.1' > /etc/resolv.conf

答案2

我制作了一个脚本来resolv.conf永久更改文件:

#!/usr/bin/env bash
f="/etc/resolv.conf"
chattr -i "$f"
rm -f "$f"
echo "nameserver 1.1.1.1" >> "$f"
echo "nameserver 8.8.8.8" >> "$f"
chattr +i "$f"

该脚本使文件不可变,因此它不会被更改也无法删除。要删除文件,您需要使用命令:

chattr -i /etc/resolv.conf

然后删除该文件。

相关内容