AdGuardHome IPv4/IPv6双栈配置:全面网络支持
【免费下载链接】AdGuardHome Network-wide ads & trackers blocking DNS server 项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
随着IPv6网络的普及,家庭网络中同时支持IPv4和IPv6已成为刚需。你是否遇到过部分设备只能通过IPv4联网,而新设备却默认使用IPv6导致广告过滤失效的问题?本文将详细介绍如何在AdGuardHome中配置IPv4/IPv6双栈支持,一次设置即可保护所有网络设备,无论其使用何种IP协议。
读完本文后,你将能够:
- 理解AdGuardHome的双栈网络架构
- 正确配置IPv4和IPv6的DHCP服务
- 设置双协议下的DNS过滤规则
- 验证和排查双栈网络问题
双栈网络架构概述
AdGuardHome作为网络级广告过滤DNS服务器,其双栈架构设计允许同时处理IPv4和IPv6协议的请求。这种设计确保了即使在混合网络环境中,所有设备都能获得一致的广告过滤体验。
AdGuardHome的双栈实现主要依赖于内部的DHCP服务器模块,该模块同时支持DHCPv4和DHCPv6协议。核心实现代码位于internal/dhcpd/dhcpd.go,其中定义了同时处理两个协议的服务器接口:
// Interface is the DHCP server that deals with both IP address families.
type Interface interface {
Start(ctx context.Context) (err error)
Stop() (err error)
Enabled() (ok bool)
Leases() (leases []*dhcpsvc.Lease)
MACByIP(ip netip.Addr) (mac net.HardwareAddr)
HostByIP(ip netip.Addr) (host string)
IPByHost(host string) (ip netip.Addr)
WriteDiskConfig(c *ServerConfig)
}
双栈工作流程
AdGuardHome的双栈处理流程如下:

配置前的准备工作
在开始配置双栈支持前,请确保你的AdGuardHome已正确安装并运行。推荐使用官方提供的自动化安装脚本:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s — -v
如果你倾向于手动安装,可以参考README.md中的"Manual installation"部分进行操作。
环境要求
- AdGuardHome v0.107.0或更高版本
- 支持IPv6的网络环境
- 具有管理员权限的设备
IPv4配置详解
AdGuardHome默认启用IPv4支持,但需要正确配置以确保最佳性能。
DHCPv4设置
核心配置参数在internal/dhcpd/dhcpd.go中定义,包括默认租约时间:
// DefaultDHCPLeaseTTL is the default time-to-live for leases.
DefaultDHCPLeaseTTL = uint32(timeutil.Day / time.Second)
静态IP分配
对于需要固定IP的设备,可以配置静态IP分配:
IPv6配置详解
IPv6配置与IPv4类似,但有一些关键差异需要注意。
DHCPv6设置
AdGuardHome的DHCPv6实现支持多种操作模式,以适应不同的网络环境需求。相关实现代码可在internal/dhcpd/dhcpd.go中找到,特别是服务器初始化部分:
v6conf := conf.Conf6
v6conf.Logger = s.conf.Logger.With("ip_version", "6")
v6conf.InterfaceName = s.conf.InterfaceName
v6conf.notify = s.onNotify
v6conf.Enabled = s.conf.Enabled && len(v6conf.RangeStart) != 0
s.srv6, err = v6Create(v6conf)
IPv6防火墙注意事项
配置IPv6时,需要确保防火墙允许以下流量:
- UDP端口546(客户端)和547(服务器)的DHCPv6流量
- TCP和UDP端口53的DNS流量
- ICMPv6流量(邻居发现等关键网络功能需要)
双栈DNS配置
正确配置DNS服务器是确保双栈环境下广告过滤正常工作的关键。
上游DNS服务器设置
- 208.67.222.222 (OpenDNS IPv4)
- 208.67.220.220 (OpenDNS IPv4)
- 2620:0:ccc::2 (OpenDNS IPv6)
- 2620:0:ccd::2 (OpenDNS IPv6)
访问控制设置
为确保只有授权设备可以使用你的DNS服务器:
验证与故障排除
配置完成后,需要验证双栈是否正常工作。
验证方法
检查设备获取的IP地址:
- IPv4设备应获取配置范围内的地址
- IPv6设备应获取以配置前缀开头的地址
在AdGuardHome管理界面的"客户端"页面,确认所有设备都显示正确的IP版本信息
查看查询日志,确认同时存在IPv4和IPv6的DNS查询:
- 导航到"查询日志"页面
- 检查"客户端IP"列,确认同时有IPv4和IPv6地址出现
常见问题解决
IPv6设备无法获取地址
检查以下可能原因:
- 路由器是否启用了IPv6转发
- IPv6前缀是否正确配置
- 防火墙是否阻止了DHCPv6流量
相关代码实现可参考internal/dhcpd/dhcpd.go中的服务器启动部分:
// Start will listen on port 67 and serve DHCP requests.
func (s *server) Start(ctx context.Context) (err error) {
err = s.srv4.Start(ctx)
if err != nil {
return err
}
err = s.srv6.Start(ctx)
if err != nil {
return err
}
return nil
}
部分网站在IPv6下无法访问
这通常是由于IPv6路由或DNS配置问题:
高级配置选项
对于有特殊需求的用户,AdGuardHome提供了更多高级配置选项。
自定义过滤规则
- ||example.com^$ipv4 仅阻止IPv4上的example.com
- ||example.com^$ipv6 仅阻止IPv6上的example.com
配置文件修改
对于高级用户,可以直接编辑AdGuardHome的配置文件(通常位于/etc/AdGuardHome/AdGuardHome.yaml)来进行更精细的控制。
双栈相关的配置部分通常包括:
dhcp:
enabled: true
interface_name: eth0
dhcpv4:
range_start: 192.168.1.100
range_end: 192.168.1.200
subnet_mask: 255.255.255.0
gateway_ip: 192.168.1.1
lease_duration: 86400
dhcpv6:
range_start: 2001:db8::100
range_end: 2001:db8::200
lease_duration: 86400
ra_slaac_only: false
性能优化建议
在双栈环境中,适当的优化可以提高AdGuardHome的性能。
内存使用优化
网络性能优化
AdGuardHome的缓存实现位于internal/dnsforward/upstreams.go,通过合理配置可以显著提高响应速度。
总结与展望
配置AdGuardHome的IPv4/IPv6双栈支持不仅能确保所有设备都受到广告过滤保护,还为未来完全过渡到IPv6做好了准备。随着物联网设备的普及,家庭网络中的IPv6设备将越来越多,提前配置双栈支持可以避免将来的兼容性问题。
本文介绍的配置方法适用于大多数家庭网络环境,但每个网络都有其特殊性。如果遇到问题,建议查阅官方文档README.md或在AdGuard社区寻求帮助。
未来,AdGuardHome将继续增强双栈支持,包括更精细的每协议过滤规则和更完善的IPv6统计功能。保持AdGuardHome更新到最新版本,可以享受这些新功能和改进。
相关资源
- AdGuardHome官方文档
- DHCP服务器实现代码
- DNS转发器实现
- 网络过滤核心代码
【免费下载链接】AdGuardHome Network-wide ads & trackers blocking DNS server 项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



