You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WireGuard配置咨询:实现VPN子网客户端共用自定义DNS及避免覆盖本地DNS的方法

WireGuard配置咨询:实现VPN子网客户端共用自定义DNS及避免覆盖本地DNS的方法

嘿,我来帮你搞定这两个WireGuard相关的DNS问题,分两部分详细说:

一、服务器端统一管理自定义域名,让客户端自动获取最新解析

要实现只在服务器端修改域名解析,所有客户端自动同步,最靠谱的方式是在WireGuard服务器上搭建一个轻量的本地DNS服务,比如dnsmasq,步骤如下:

  1. 安装dnsmasq
    根据你的服务器系统执行对应命令:

    # Debian/Ubuntu系
    sudo apt update && sudo apt install dnsmasq
    # RHEL/CentOS系
    sudo yum install dnsmasq
    
  2. 配置自定义域名解析
    推荐单独创建一个配置文件来管理WireGuard相关的域名,避免污染主配置:

    sudo touch /etc/dnsmasq.d/wireguard-domains.conf
    

    编辑这个文件,添加你的自定义域名解析规则,格式为address=/自定义域名/目标IP,比如:

    # 示例:把my-vpn-service.com解析到10.1.0.10
    address=/my-vpn-service.com/10.1.0.10
    # 可以添加多条规则
    address=/internal-files.net/10.1.0.15
    
  3. 限制dnsmasq监听范围
    为了安全,让dnsmasq只监听WireGuard接口和本地回环,编辑/etc/dnsmasq.conf,添加或修改以下配置:

    interface=wg0  # 这里改成你的WireGuard接口名
    interface=lo
    bind-interfaces
    

    然后重启dnsmasq服务:

    sudo systemctl restart dnsmasq
    
  4. 客户端配置验证
    确保客户端.conf里的DNS = 10.1.0.1保留着,这样客户端连接VPN后就会自动使用服务器上的dnsmasq服务,你后续在服务器端修改域名解析规则后,客户端刷新DNS缓存就能拿到最新结果,完全不用改客户端配置。

二、避免WireGuard覆盖本地DNS,改为添加模式

wg-quick默认会替换/etc/resolv.conf,导致本地DNS丢失,这里给你两种可靠的解决方法:

方法1:用systemd-resolved管理(推荐,适合用systemd的系统)

如果你的系统用systemd-resolved(现在大部分Linux发行版都默认用),可以在客户端.conf里添加PostUpPostDown脚本,让WireGuard把自定义DNS添加到全局解析列表,同时保留本地原有DNS:

[Interface]
Address = 10.1.0.4/32
PrivateKey = XXXX
# 注释掉原来的DNS行,改用下面的脚本
# DNS = 10.1.0.1
PostUp = resolvectl dns %i 10.1.0.1; resolvectl domain %i ~.
PostDown = resolvectl revert %i
  • resolvectl dns %i 10.1.0.1:给WireGuard接口添加指定DNS
  • resolvectl domain %i ~.:让这个DNS处理所有域名解析(也可以指定特定域名,比如~my-vpn-domain.com,只解析你的自定义域名)
  • PostDown会在断开VPN后恢复原来的DNS配置

方法2:手动修改resolv.conf(适合不用systemd-resolved的场景)

如果你的/etc/resolv.conf是普通文件(不是软链接到systemd-resolved),可以用脚本手动添加/删除DNS:

[Interface]
Address = 10.1.0.4/32
PrivateKey = XXXX
# 注释掉原来的DNS行
# DNS = 10.1.0.1
PostUp = echo "nameserver 10.1.0.1" >> /etc/resolv.conf
PostDown = sed -i '/nameserver 10.1.0.1/d' /etc/resolv.conf

注意:如果resolv.conf是NetworkManager生成的软链接,这种方法可能无效,建议优先用方法1。

方法3:用NetworkManager管理WireGuard(图形化/桌面场景)

如果你是用NetworkManager来管理WireGuard连接,直接在连接设置里修改:

  • 打开NetworkManager的WireGuard连接配置
  • 切换到IPv4设置选项卡
  • 把“DNS”设置为“自动(仅地址)”,然后在“DNS服务器”列表里手动添加10.1.0.1,保留原来的本地DNS服务器
  • 保存后,NetworkManager会自动把所有DNS服务器合并,不会覆盖本地配置

备注:内容来源于stack exchange,提问作者無名前

火山引擎 最新活动