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