在使用hAP ac3上网,正需要DNS的Foreword转发,不知道v7.7beta8的DNS出了什么鬼问题,配置FWD转发不生效,正好hAP ac3是IPQ4018采用ARM平台,支持USB扩展,干脆用容器安装DNSMasq解决,我的思路是使用ubuntu的镜像,然后在通过apt-get安装DNSMasq 需要一个U盘,作为Docker的镜像存储,hAP ac3的存储空间只要有128M,首先插上U盘,并格式化,Winbox在/system/disk进行格式化,选择ext4格式: 命令行/disk/print查看情况,格式化完成后,已经将U盘挂载到disk4
[admin@ac3] /disk> print
Flags: M, r - RAID-MEMBER; p - PARTITION
Columns: SLOT, MODEL, SERIAL, INTERFACE, NAME, FS, FREE, SIZE
#  SLOT   MODEL       SERIAL  INTERFACE     NAME  FS    FREE     SIZE
0  usb1   Kingston  B06EBF60xx  USB2.10 480Mbps             30943995904
1 Mp usb1-part1                       disk4 ext4 30 299017216  30943995392

[admin@ac3] /disk>
初始化container配置,需修改Tmp dir,镜像源站地址我使用默认,可以根据自己需要修改,设置disk4/pull为拉取镜像下载的缓存目录 命令行查看配置
[admin@ac3] /container/config> print
ram-high: 0
registry-url: https://registry-1.docker.io
tmpdir: disk4/pull

[admin@ac3] /container/config>
进入/interface/veth创建veth网口,并设置网关为172.17.0.1,后面会分配给网桥的docker接口
[admin@ac3]/interface/veth> add address=172.17.0.2/24 gateway=172.17.0.1 name=veth1
在RouterOS创建一个docker的桥接
[admin@ac3]/interface/bridge>add name=docker
将veth1加入docker的bridge中
[admin@ac3]/interface/bridge/port>add bridge=docker interface=veth1
分配docker桥接的IP地址
[admin@ac3]/ip/address>add address=172.17.0.1/24 interface=docker
添加配置,remote-image=ubuntu:latest,拉取镜像名称,设置interface=veth1,,设置文件目录为disk4/ubuntudns,命令如下: add remote-image=ubuntu:latest interface=veth1 root-dir=disk4/ubuntudns  logging=yes cmd="tail -f /dev/null" 容器启动时常会遇到问题导致启动失败,可以利用tail -f /dev/null让容器一直处于runing状态。 下面通过命令执行添加
[admin@ac3] /container> add remote-image=ubuntu:latest interface=veth1 root-dir=disk4/ubuntudns  logging=yes cmd="tail -f /dev/null"
添加完成,等待从源拉取文件,status为extracting
[admin@ac3] /container> print
0 name="aadeaf01-572e-4672-b82d-16b08a0a1dc5" tag="ubuntu:latest" os="" arch="" interface=veth1
cmd="tail -f /dev/null" root-dir=disk4/ubuntudns mounts="" dns="" logging=yes status=extracting
当前ubuntu的镜像拉取完成后,status会变为stop
[admin@ac3] /container> print
0 name="aadeaf01-572e-4672-b82d-16b08a0a1dc5" tag="library/ubuntu:latest" os="linux" arch="arm" interface=veth1
cmd="tail -f /dev/null" root-dir=disk4/ubuntudns mounts="" dns="" logging=yes status=stopped

[admin@ac3] /container>
Winbox查看配置 Status变为stopped后,可以启动,点击start,或者命令行配置:
[admin@ac3] /container> start 0
然后通过print命令查看状态,一直running表示运行成功
[admin@ac3] /container> print
0 name="aadeaf01-572e-4672-b82d-16b08a0a1dc5" tag="library/ubuntu:latest" os="linux" arch="arm" interface=veth1
cmd="tail -f /dev/null" root-dir=disk4/ubuntudns mounts="" dns="" logging=yes status=running
[admin@ac3] /container>
使用shell命令进入ubuntu系统
[admin@ac3] /container> shell 0
0;root@ac3: /root@ac3:/#
剩下的就和ubuntu操作一样,首先update下
0;root@ac3: /root@ac3:/# apt-get update
Get:1 http://ports.ubuntu.com/ubuntu-ports jammy InRelease [270 kB]
0% [1 InRelease 270 kB/270 kB 100%]
安装需要的工具
0;root@ac3: /root@ac3:/# apt-get install net-tools
0;root@ac3: /root@ac3:/# apt-get install vim
安装dnsmasq
0;root@ac3: /root@ac3:/# apt-get install dnsmasq
在/etc/dnsmasq.d/下创建一个新的域名配置文件
0;root@ac3: ~root@ac3:~# vi /etc/dnsmasq.d/domain.conf
大致写入这些内容转发到223.5.5.5
server=/taobao.com/223.5.5.5
server=/aliyun.com/223.5.5.5
...
启动dnsmasq服务
0;root@ac3: ~root@ac3:~#service dnsmasq start
使用netstat查看dnsmasq服务是否启动
0;root@ac3: ~root@ac3:~# netstat -ntupl
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)

Proto Recv-Q Local Address  Foreign Address  State PID/Program name
tcp   0   0 0.0.0.0:53    0.0.0.0:*   LISTEN      797/dnsmasq
tcp6  0   0 :::53         :::*        LISTEN      797/dnsmasq
udp   0   0 0.0.0.0:53    0.0.0.0:*               797/dnsmasq
udp6  0   0 :::53         :::*                    797/dnsmasq
需要注意RouterOS的/ip/firewall/nat规则要允许172.17.0.2的主机能后被nat转换, 在命令行设置开机启动
[admin@ac3] /container> set 0 start-on-boot=yes
[admin@ac3] /container> print
0 name="aadeaf01-572e-4672-b82d-1608a1dc5" tag="library/ubuntu:latest" os="linux" arch="arm" interface=veth1 cmd="tail -f /dev/null" root-dir=disk4/ubuntudns mounts="" dns="" logging=yes start-on-boot=yes status=running
最后使用内网主机测试172.17.0.2的DNS解析,注意此配置,不支持重启后自动启动dnsmasq服务,需要进入shell启动dnsmasq的服务 特别说明下hAP ac3的内存只有256M,运行的docker只能是哪些内存需求小的的应用,如果内存耗尽,hAP 会自动重启