目标:客户端通过 Tailscale 访问 DN42(172.20/14、fd00/8),并让 .dn42 域名使用 DN42 DNS(例如 fd42:d42:d42:54::1)解析

1) VPS:启用 Subnet Router 并批准路由

1.1 VPS 上执行

tailscale up --advertise-routes=172.20.0.0/14,fd00::/8

1.2 管理台批准

Tailscale Admin Console → Machines → 选择该 VPS → Approve routes:
勾选并批准 172.20.0.0/14fd00::/8

2) VPS:开启转发与关闭 rp_filter

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.default.forwarding=1

sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.tailscale0.rp_filter=0

(推荐)持久化:

cat <<'EOF' >/etc/sysctl.d/99-relay.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.tailscale0.rp_filter=0
EOF
sysctl --system

3) VPS:配置 DN42 IPv4 SNAT(重要:不要用 MASQUERADE)

172.23.246.73 替换为你的 DN42 IPv4 出口地址

iptables -t nat -I POSTROUTING 1 \
  -s 100.64.0.0/10 \
  -d 172.20.0.0/14 \
  -j SNAT --to-source 172.23.246.73

(如果配置了iptables防火墙)放行转发:

iptables -I FORWARD 1 -s 100.64.0.0/10 -d 172.20.0.0/14 -j ACCEPT
iptables -I FORWARD 1 -s 172.20.0.0/14 -d 100.64.0.0/10 -j ACCEPT

4) VPS:配置 DN42 IPv6 SNAT(NAT66)

fd75:1204:2fa8:1::1 替换为你的 DN42 IPv6 出口地址。
Tailscale 的 IPv6 通常为 fd7a:115c:a1e0::/48;如你的实际不同,替换 -s

ip6tables -t nat -I POSTROUTING 1 \
  -s fd7a:115c:a1e0::/48 \
  -d fd00::/8 \
  -j SNAT --to-source fd75:1204:2fa8:1::1

(如果配置了iptables防火墙)放行转发:

ip6tables -I FORWARD 1 -s fd7a:115c:a1e0::/48 -d fd00::/8 -j ACCEPT
ip6tables -I FORWARD 1 -s fd00::/8 -d fd7a:115c:a1e0::/48 -j ACCEPT

5) 检查规则是否命中

iptables  -t nat -L POSTROUTING -v -n --line-numbers
ip6tables -t nat -L POSTROUTING -v -n --line-numbers

访问 DN42 时,SNAT 规则 pkts/bytes 应增长。
若计数为 0,确认规则是否在链首(必须 -I POSTROUTING 1)。

6) Tailscale Split DNS:配置使用 DN42 公共 DNS

Admin Console → DNS → Nameservers → Add nameserver

  • Nameserver:填 fd42:d42:d42:54::1
  • 打开 "Split DNS"
  • Domain 填:dn42

效果:仅 xxx.dn42fd42:d42:d42:54::1,其余域名仍走本地/公网 DNS。

7) 客户端测试

7.1 路由测试

IPv4:

ping 172.23.246.65

IPv6:

ping -6 fd42:d42:d42:54::1

7.2 DNS 测试

nslookup example.dn42 fd42:d42:d42:54::1

或:

dig @fd42:d42:d42:54::1 example.dn42 AAAA

以上完成后,客户端可通过 Tailscale 访问 DN42 IPv4/IPv6 服务,并且 .dn42 解析仅使用 DN42 内部 DNS,不影响公网 DNS。