怎么?ADGuard Home 客户端无法显示对应的设备?
前记
由于我的ADGuard Home是安装在群晖的Docker中的,对外服务是在路由器上设置的DNS,DNS请求如下
client->路由器->群晖->Docker->ADGuard Home
所以ADGuard Home的客户端列表只是显示了群晖Docker的网关地172.17.0.1,没有显示具体的客户端IP地址,导致有很多请求都不知道是从哪个客户端发起的
解决
解决的办法就是将ADGuard Home所在的容器暴露到局域网中来,这就需要Docker的Macvlan网络实现方式
对于Docker的3种网络实现Host、Bridge、Macvlan可以参考这里
第一步
开启Open vSwitch,Open 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/31 是Docker可用 IP,此段为100、101可用
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容器同时加入Bridge和Macvlan网络下,Bridge映射端口到宿主机进行穿透,而Macvlan下的IP用来提供DNS服务
大功告成