怎么?ADGuard Home 客户端无法显示对应的设备?

前记

由于我的ADGuard Home是安装在群晖的Docker中的,对外服务是在路由器上设置的DNSDNS请求如下

client->路由器->群晖->Docker->ADGuard Home

所以ADGuard Home的客户端列表只是显示了群晖Docker的网关地172.17.0.1,没有显示具体的客户端IP地址,导致有很多请求都不知道是从哪个客户端发起的

解决

解决的办法就是将ADGuard Home所在的容器暴露到局域网中来,这就需要DockerMacvlan网络实现方式

对于Docker3种网络实现HostBridgeMacvlan可以参考这里

参考文档

第一步

开启Open vSwitchOpen vSwitch的作用是开启虚拟网络交换机,通过软件实现交换机的作用

控制面板->网络->网络界面->管理->Open vSwitch设置->启用Open vSwitch

第二步

创建Macvlan模式网络,SSH到群晖上

1
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 --ip-range=192.168.50.100/31 -o parent=ovs_eth0 macvlan

192.168.50.0/24 是路由器中DHCP的网段

192.168.50.1 是路由器管理IP

192.168.50.100/31Docker可用 IP,此段为100101可用

ovs_eth0 是群晖的网卡名称,可用ip addr查看

第三步

ADGuard Home容器分配到Macvlan网络下

Docker->网络->macvlan->管理->新增

当然你也可以选择通过 Docker 命令的模式来创建容器指定网络

1
docker run -d --restart=always --network macvlan --ip=192.168.50.50 --name nginx nginx

问题

本来是Bridge下的一个Frp容器提供穿透服务,由于Macvlan下容器无法与宿主机通信,所以ADGuard Home管理平台也就无法穿透出外网

解决方案就是将ADGuard Home容器同时加入BridgeMacvlan网络下,Bridge映射端口到宿主机进行穿透,而Macvlan下的IP用来提供DNS服务


大功告成