RouterOSv7安装DnsMasq
在使用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 会自动重启