Debian10修改IPV6主机的DNS64(可访问IPV4网站) + 彻底修改debian10系统DNS

完整配置步骤(适用于“内网 IPv4 + 外网 IPv6”服务器)
1️⃣ 安装依赖软件


apt update && apt install -y git build-essential tayga curl resolvconf
git clone https://github.com/toreanderson/clatd
make -C clatd install installdeps

2️⃣ 配置 DNS64(持久化)


# 添加 DNS64 服务器地址
echo "nameserver 2a01:4f8:c2c:123f::1" >> /etc/resolvconf/resolv.conf.d/head
echo "nameserver 2a00:1098:2c::1" >> /etc/resolvconf/resolv.conf.d/head
resolvconf -u

# 如果 resolv.conf 不是符号链接,修复它
if [ ! -L /etc/resolv.conf ]; then
    mv /etc/resolv.conf /etc/resolv.conf.bak
    ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
    resolvconf -u
fi

3️⃣ 创建 clatd 启动前清理脚本 (/etc/clatd-pre.sh)


cat > /etc/clatd-pre.sh <<'EOF' #!/bin/sh # 移除干扰 CLAT 的内网 IPv4 地址和默认路由(请根据实际网卡和地址修改) ip addr del 192.168.4.212/22 dev eth1 2>/dev/null || true
ip route del default via 192.168.4.1 dev eth1 2>/dev/null || true
exit 0
EOF
chmod +x /etc/clatd-pre.sh

⚠️ 注意:将 192.168.4.212/22 和 192.168.4.1 替换为目标服务器实际的内网 IP 地址和网关。

4️⃣ 创建 clatd 启动后配置脚本 (/etc/clatd-up.sh)


cat > /etc/clatd-up.sh <<'EOF' #!/bin/sh # 添加 nftables 规则(确保转换) nft add table ip6 clatd 2>/dev/null
nft add chain ip6 clatd POSTROUTING { type nat hook postrouting priority srcnat\; } 2>/dev/null
nft add rule ip6 clatd POSTROUTING masquerade 2>/dev/null
exit 0
EOF
chmod +x /etc/clatd-up.sh

5️⃣ 创建 clatd 停止后清理脚本 (/etc/clatd-down.sh)


cat > /etc/clatd-down.sh <<'EOF' #!/bin/sh # 清理 nftables 规则 nft delete table ip6 clatd 2>/dev/null
exit 0
EOF
chmod +x /etc/clatd-down.sh

6️⃣ 配置 clatd 主配置文件 (/etc/clatd.conf)


cat > /etc/clatd.conf <<'EOF'
# CLAT 使用的 IPv6 地址(可自定义)
clat-v6-addr=fd00::c1a7
# 禁用代理邻居发现
proxynd-enable=false
# 启动/停止脚本
script-up=/etc/clatd-up.sh
script-down=/etc/clatd-down.sh
# 手动指定 NAT64 前缀(通过 dig AAAA ipv4only.arpa 获取实际前缀)
plat-prefix=2a00:1098:2c::5:0:0/96
EOF

💡 提示:plat-prefix 可通过 dig AAAA ipv4only.arpa 查询得到,取返回的第一个 AAAA 记录的前缀(去掉最后的 c000:aa 部分,保留 /96 网络段)。

7️⃣ 修改 clatd 的 systemd 服务,添加启动前脚本


mkdir -p /etc/systemd/system/clatd.service.d
cat > /etc/systemd/system/clatd.service.d/override.conf <<'EOF'
[Service]
ExecStartPre=/etc/clatd-pre.sh
EOF
systemctl daemon-reload

8️⃣ 启动并验证


systemctl restart clatd
systemctl status clatd   # 应显示 active (running)
curl 1.1.1.1            # 应返回 Cloudflare 页面

第五步:验证配置是否成功


# 尝试直接访问一个 IPv4 地址(Cloudflare 的 DNS 服务器 1.1.1.1)
curl 1.1.1.1

以下是旧方法:

在 Debian 系统中修改 DNS 服务器地址通常涉及编辑 /etc/resolv.conf 文件。然而,从 Debian 版本 Buster(10)开始以及后续版本,包括 Bullseye(11)和 Bookworm(假设为未来版本),该文件可能由网络管理服务(如 systemd-resolved)自动管理,并且直接编辑它可能不是持久化更改的推荐方式。
/etc/resolv.conf 是传统的DNS配置文件
/etc/systemd/resolved.conf是systemd-resolved服务的配置文件
优先级:较高,但会被网络管理器覆盖
控制内容:全局DNS服务器、搜索域等
生效方式:需要重启systemd-resolved服务

对于使用 systemd-resolved 的系统:
临时修改: 如果系统使用了 systemd-resolved,可以通过命令行工具 resolvectl 来临时设置DNS服务器:

sudo resolvectl dns eth0 8.8.8.8 8.8.4.4

其中eth0是网卡名称

永久修改: 若要永久性地更改配置,应编辑 /etc/systemd/resolved.conf 文件并添加或修改 DNS= 行下的DNS服务器列表:

sudo nano /etc/systemd/resolved.conf

在其中找到或添加如下内容:


nameserver 8.8.8.8
nameserver 8.8.4.4
echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/systemd/resolved.conf
或者
nameserver 1.1.1.1
nameserver 1.0.0.1
echo -e "nameserver 1.1.1.1\nnameserver 1.0.0.1" > /etc/systemd/resolved.conf

修改后,重启 systemd-resolved 服务以应用更改:

sudo systemctl restart systemd-resolved.service

如果没有使用systemd-resolved 的系统,则可以直接修改 /etc/resolv.con文件

 

纯IPV6主机修改DNS64(NAT64),可访问IPV4地址和网站

# 使用Google的DNS64服务器
echo "nameserver 2001:4860:4860::6464" | sudo tee /etc/resolv.conf
echo "nameserver 2001:4860:4860::64" | sudo tee -a /etc/resolv.conf
# 或者使用Cloudflare的DNS64
echo "nameserver 2606:4700:4700::64" | sudo tee /etc/resolv.conf
echo "nameserver 2606:4700:4700::6400" | sudo tee -a /etc/resolv.conf

永久配置(不同发行版):
Ubuntu/Debian:

sudo systemctl disable systemd-resolved
sudo rm /etc/resolv.conf
sudo echo "nameserver 2001:4860:4860::6464" > /etc/resolv.conf

CentOS/RHEL:

sudo echo "DNS1=2001:4860:4860::6464" >> /etc/sysconfig/network-scripts/ifcfg-eth0
sudo systemctl restart NetworkManager

发表评论