怎么?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
服务
大功告成