多地组网,这两年基本都是各端都通过RouterOS来组隧道了,偶尔还是会有其他的诉求,自从RouterOS更新7.1以后就正式支持Docker容器了,当然,在RouterOS上这个功能是Container。这次,就以部署gost为例,简单的快速完成部署。

RouterOS开启Container

如果你的RouterOS没有安装Container组件,可以去官网下载对应版本的Extra packages https://mikrotik.com/download,解压后把container.npk拖到winbox里面,重启RouterOS后,就能看到Container功能了。

但是这个时候Container还不能正常使用,还需要开启,在winbox里面打开Teminal,执行以下命令,系统会提示你需要断开电源重新启动才会生效,注意一定要断开电源重启(不能通过系统的reboot重启),硬件机器比较简单,如果是vps安装的,可以尝试硬重启。

1
/system/device-mode/update container=yes

重启后,检查是否开启成功:

1
2
3
/system/device-mode/pr
mode: enterprise
container: yes

配置Container网络

创建VETH设备,并配置IP地址和网关,同时,创建一个网桥,网桥的IP就是VETH的网关IP,并将VETH设备加入该网桥,在最后配置masquerade,命令参考如下:

1
2
3
4
5
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
/interface/bridge/add name=dockers
/ip/address/add address=172.17.0.1/24 interface=dockers
/interface/bridge/port add bridge=dockers interface=veth1
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24

配置Container基础配置

1
/container/config/set ram-high=512 registry-url=https://registry-1.docker.io tmpdir=disk1/pull

准备镜像

虽然Container支持拉取远程镜像,但是实测稳定性极差,所以我们选择找一台相同架构的linux服务器,部署docker后,通过这台设备来到处镜像供RouterOS使用,这里不提供导出后的镜像下载链接了,有需要的可以联系我。

以下操作在同架构的服务器上执行,供参考:

1
docker save xxxx:latest > xxxx.tar

创建容器

准备好镜像后,将镜像文件上传到winbox,然后在winbox的Container菜单,通过添加创建,选择File对应刚才的镜像文件,interface选择刚才创建的设备veth1,其他参数根据需要配置即可。

我这里的镜像是基于gost v3创建的,创建容器命令参考:

1
2
3
/container
add cmd="-L=ss://chacha20-ietf-poly1305:passwd@:port -L=ssu://chacha20-ietf-p\
oly1305:passwd@:port" interface=veth1 start-on-boot=yes

配置端口转发

配置容器启动后,我们需要访问到容器,还需要配置一下dst-nat规则,以下配置供参考:

1
2
3
4
5
/ip firewall nat
add action=dst-nat chain=dstnat comment=Gost dst-port=端口 \
protocol=tcp to-addresses=172.17.0.2 to-ports=端口
add action=dst-nat chain=dstnat comment=Gost dst-port=端口 protocol=udp \
to-addresses=172.17.0.2 to-ports=端口

参考文档

https://help.mikrotik.com/docs/display/ROS/Container