找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 932|回复: 9

[Router OS] RouterOS配置Container容器安装Sing-Box实现单路由器上网

[复制链接]
本帖最后由 xukongyang 于 2024-4-26 20:15 编辑

RouterOS配置Container容器安装Sing-Box实现单路由器上网

之前写过2篇
Mikrotik HAP AX3 通过Container安装Frpc,Clash以及Yacd网页界面

Mikrotik HAP AX3通过container运行clash透明网关,抛弃旁路由,单机自由上网

发现感兴趣的小伙伴还是挺多的,但是查看回复基本都在说第2篇看不懂,确实,步骤很复杂,我这个写作者,实践了好多次的都觉得复杂,所以我后面没有用ax3了,跳出了这个坑:)。

因为觉得还是mini小主机安装:pve+虚拟机跑chr版本的ros+Openwrt旁路由+AP(或无线网卡)的方案 适合我,mini小主机系统资源多、性能强、玩法多,能折腾。:)

但是为了某些情况下,就是不想多用设备,一个路由器解决上网问题,还是重新查资料,解决了使用只有RouterOS系统的单路由器,就能完成上内外网的需求:)

而且步骤非常简单,装好Container中的Sing-box后(本例中ip地址配置为192.168.1.6),RouterOS中只需要执行一行命令:
/iproute
add disabled=no distance=1 dst-address=198.18.0.0/15 gateway=192.168.1.6pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
不用像之前的操作要维护国内ip地址文件,ros系统还要执行很多设置路由的命令,现在统统不需要了。

然后再将需要上外网的电脑的:
1、网关设置成运行在Container中的sing-box的ip地址(本例中是192.168.1.6),就能正确上内网和外网了:)
2、dns服务器随便设置成一个公网的dns例如 223.5.5.5 即可

如果不想手工指定电脑的网关和dns服务器,可以设置dhcp option,配置好网关和dns(随便一个公网dns 例如223.5.5.5),将需要上内外网的电脑固定ip后,分配做好的dhcp option即可。
或者简单粗暴,在dhcp的配置中,
1、将网关指定为运行在Container中的sing-box的ip地址(本例中是192.168.1.6),
2、dns服务器随便设置成一个公网的dns例如 223.5.5.5 即可

达成效果:
国内外自动分流,国内外访问均正常,丝般流畅:)
Tele运行正常
微信,贴吧等图片显示正常
browserleaks.com/ip 的dns泄露检测通过

系统环境:
正版 ros chr(Cloud Hosted Router) 7.14.3 (p1 千兆)版本
使用wincp软件上传文件到ros系统(ros系统要打开ftp服务

网络拓扑如下:
pve宿主机系统 ip地址 192.168.1.3
ros系统chr版本 ip地址 192.168.1.2
配置给Container中的sing-box的虚拟网卡 veth1 地址为192.168.1.6
sirpdboy的openwrt作为旁路由 ip地址 192.168.1.1
内网电脑的网关和dns都配置成openwrt旁路由的 192.168.1.1
(配置好Container中的sing-box后,测试机的网关配置为192.168.1.6,dns配置为223.5.5.5 这样可以再不影响内网其他电脑的情况下进行测试)

好像好多小伙伴初次折腾ros的Container容器,都还不知道怎么配置和安装,这里就简单说一下:

1、在ros的终端窗口中执行
/system/device-mode/update container=yes

然后给ros设备断电,注意,是断电!!!ros设备直接断电,装在mini小主机pve系统中的ros系统直接拔mini小主机的电源,切记切记。


2、下载对应设备ros系统的Extra packages软件包,将里面的Container-版本号.npk上传到ros的Files中,然后重启ros系统(只需在winbox中执行reboot即可,不用断电),ros在重启后会自动安装这个npk。


做完这2个操作后,在ros的winbox界面中,能在左侧看到Container菜单即可。(如果重启后还是看不到,再重复第2步的上传、重启操作应该就能看到了)

然后是添加Container容器需要的虚拟网卡veth1,自行按需添加即可,本例中是veth1,配置ip为 192.168.1.6 网关为ros系统的192.168.1.2

注意添加的虚拟网卡veth一定要指定网关,本例中是ros所在的192.168.1.2,确保关闭openwrt旁路由,测试sing-box上外网时能正常上网。

/interface/veth/add name=veth1 address=192.168.1.6/24 gateway=192.168.1.2
(虚拟网卡 veth1 的 ip地址 和 网关 按需修改)
然后将此veth1加入bridge1,切记切记
注意一定要加到对应的bridge中,否则后面启动sing-box会提示不能连接到外网下载规则文件,导致sing-box容器无法启动!!!

下面再简单说下如何制作能在ros的Container中运行的docker镜像

sudo docker images
sudo docker rmi (IMAGE ID)

本例中使用的是gzxhwq 提供的sing-box镜像,版本1.9.0-rc.9,linux/amd64版本,使用arm64的ros设备的小伙伴自行制作arm64版本

https://registry.hub.docker.com/layers/gzxhwq/sing-box/1.9.0-rc.9/images/sha256-709d5da259428c22f7232c939cf5f73c44415773be8ab6c55cdbc97797def6a6?context=explore

下载docker镜像到本地
sudo  docker pull gzxhwq/sing-box:latest@sha256:6af40e97fc9ac4cca80f741ccafac63160f1c3fd2d9a9b47350b44f0917f9372

导出docker镜像为文件
sudo  docker save gzxhwq/sing-box  >  ./sing-box-chr.tar

将生成的sing-box-chr.tar 上传到ros系统的根目录
执行如下命令将docker镜像文件导入ros系统
/container/add file=sing-box-chr.tar interface=veth1  root-dir=/docker/sing-box logging=yes


因为使用的sing-box的docker镜像中,没有在/etc/sing-box中生成config.json配置文件,自己上传一个config.json文件进去sing-box启动会报没有读取的权限,
因此需要自己在ros中新建一个目录,例如 /docker/config/sing-box 然后将自己的config.json配置文件上传到这个目录,这样sing-box启动时才能读取config配置文件

所以要执行下面的这条新增1个mounts命令
/container mounts
add dst=/etc/sing-box name=sing-box src=/docker/config/sing-box

然后使用winscp在ros系统的根目录下新建一个docker目录,再在docker目录下新建一个config目录,再在config目录下新建sing-box目录
也就是新建目录的结构为 /docker/config/sing-box
然后将sing-box的配置文件config.json修改其中的上外网的服务器信息后,上传到这个目录 /docker/config/sing-box 中
再执行下面这条将这个mount设置到sing-box容器的命令,否则sing-box容器启动时会报找不到config.json的错误
/container
add interface=veth1 logging=yes mounts=sing-box root-dir=/docker/sing-box workdir=/
然后最重要的一条命令,将所有的fake ip都路由到sing-box中ip中(本例是192.168.1.6)达到访问外网的目的
/ip route
add disabled=no distance=1 dst-address=198.18.0.0/15 gateway=192.168.1.6 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10

然后在ros系统的ip的dns中,将dns设置为空
也可不设置为空,我这里是为了确保能上外网时不受其他干扰
file:///C:/Users/xukon/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
我这里只是抛转引玉,给出一个能跑通的配置文件,之后大家可以按需修改自己的配置文件,达到更好的使用效果。

只看到一个标题。标题党么
回复

使用道具 举报

 楼主| | 显示全部楼层
没有,以为ros+sing-box能直接上内外网了,结果不行,帖子又删不掉,只能清除内容了
回复

使用道具 举报

 楼主| | 显示全部楼层
lutao114 发表于 2024-4-25 02:44
只看到一个标题。标题党么

没有,以为ros单路由+容器sing-box就能直接上内外网了,结果不行,帖子又删不掉,只能清除内容了,那我就简单写下装Container容器的步骤吧。
回复

使用道具 举报

xukongyang 发表于 2024-4-25 16:46
没有,以为ros单路由+容器sing-box就能直接上内外网了,结果不行,帖子又删不掉,只能清除内容了,那我就 ...

刚搞定了克隆盘,准备物理机搞一下ros,也不知道为啥ros不在开启Docker时自己生成一个网桥,都要自己新建,我看别的帖子,指定IP和网关各种各样的,也不知道和ros的网络有啥关系没。
  因为我在别的设备上搞容器,容器一般都是单独的类似172.0.0这种的IP段
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 xukongyang 于 2024-4-27 14:37 编辑

config.json 内容

{
    "log": {
        "level": "info",
        "timestamp": true
    },
    "dns": {
        "servers": [
            {
                "tag": "dns_proxy",
                "address": "https://1.1.1.1/dns-query",
                "address_resolver": "dns_resolver",
                "strategy": "ipv4_only",
                "detour": "proxy"
            },
            {
                "tag": "dns_direct",
                "address": "https://dns.alidns.com/dns-query",
                "address_resolver": "dns_resolver",
                "strategy": "ipv4_only",
                "detour": "proxy"
            },
            {
                "tag": "dns_resolver",
                "address": "223.5.5.5",
                "detour": "direct"
            }
        ],
        "rules": [
            {
                "outbound": "any",
                "server": "dns_resolver"
            },
            {
                "rule_set": "geosite-geolocation-!cn",
                "server": "dns_proxy"
            }
        ],
        "final": "dns_proxy"
    },
    "route": {
        "rule_set": [
            {
                "tag": "geosite-geolocation-!cn",
                "type": "remote",
                "format": "binary",
                "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs",
                "download_detour": "proxy"
            },
            {
                "tag": "geoip-cn",
                "type": "remote",
                "format": "binary",
                "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs",
                "download_detour": "proxy"
            }
        ],
        "rules": [
            {
                "protocol": "dns",
                "outbound": "dns-out"
            },
            {
                "port": 853,
                "network": "tcp",
                "outbound": "block"
            },
            {
                "port": [
                    443,
                    853
                ],
                "network": "udp",
                "outbound": "block"
            },
            {
                "type": "logical",
                "mode": "and",
                "rules": [
                    {
                        "rule_set": "geoip-cn",
                        "invert": true
                    },
                    {
                        "rule_set": "geosite-geolocation-!cn"
                    }
                ],
                "outbound": "proxy"
            },
            {
                "rule_set": "geoip-cn",
                "outbound": "direct"
            },
            {
                "ip_is_private": true,
                "outbound": "direct"
            }
        ],
        "final": "proxy",
        "auto_detect_interface": true
    },
    "inbounds": [
        {
            "type": "tun",
            "tag": "tun-in",
            "inet4_address": "192.168.1.1/30",
            //重要,修改为你自己的内网的网段,我家里是192.168.1.*的网段,所以这里写成192.168.1.1/30
            //如果是其他网段,估计写法是 *.*.*.1/30 的格式
            "inet6_address": "fd00::1/126",
            "mtu": 1492,
            "auto_route": true,
            "strict_route": true,
            "stack": "system",
            "sniff": true,
            "sniff_override_destination": false
        }
    ],
    "outbounds": [
            {
                "tag": "proxy",//重要,和上面配置的proxy名称一致
            "type": "hysteria2",//歇斯底里协议2
            "server": "1.2.3.4",
            "server_port": 5678,
            "up_mbps": 200,
            "down_mbps": 1000,
            "password": "Password",
            "tls": {
                "enabled": true,
                "server_name": "",
                "alpn": [
                    "h3"
                ],
            "insecure": true //重要,是否跳过证书验证,使用自己的签名时必须设置为ture
            }
        },
        /*
        {
            "tag": "proxy",
            "type": "shadowsocks",//丝丝协议
            "server": "1.2.3.4",
            "server_port": 5678,
            "method": "xchacha20-ietf-poly1305",
            "password": "Password"
        },
        */
        /*
        {
            "tag": "proxy",
            "type": "trojan",
            "server": "",
            "server_port": 443,
            "password": "",
            "tls": {
                "enabled": true,
                "server_name": "",
                "utls": {
                    "enabled": true,
                    "fingerprint": "chrome"
                }
            },
            "multiplex": {
                "enabled": true
            }
        },
        */
        /*
        {
            "tag": "proxy",
            "type": "vless",
            "server": "",
            "server_port": 443,
            "uuid": "",
            "tls": {
                "enabled": true,
                "server_name": "",
                "utls": {
                    "enabled": true,
                    "fingerprint": "chrome"
                },
                "reality": {
                    "enabled": true,
                    "public_key": "",
                    "short_id": ""
                }
            },
            "packet_encoding": "xudp",
            "transport": {
                "type": "grpc",
                "service_name": ""
            }
        },
        */
        {
            "type": "direct",
            "tag": "direct"
        },
        {
            "type": "block",
            "tag": "block"
        },
        {
            "type": "dns",
            "tag": "dns-out"
        }
    ],
    "experimental": {
        "cache_file": {
            "enabled": true,
            "path": "cache.db"
        }
    }
}
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 xukongyang 于 2024-4-26 22:28 编辑



http://rn-107.dynv6.net:81


config.json 配置文件实例 和 sing-box 的 chr 版本 和 arm64 版本的镜像文件我放到了上面的服务器,这台服务器2024年9月到期。
回复

使用道具 举报

谢谢楼主,不过你这个方法到底是行还是不行,看你下面的楼层回复,我都懵逼了
回复

使用道具 举报

值得实践一下,虽然我也是  pve+ros+openwrt 的组合, pve里的ros里的container里,运行,总觉套娃很别扭,不过ros的container里也能做点其他的事情。 例如跑个alpine。
回复

使用道具 举报

 楼主| | 显示全部楼层
WeDone 发表于 2024-4-28 13:27
谢谢楼主,不过你这个方法到底是行还是不行,看你下面的楼层回复,我都懵逼了 ...

行的,之前发的回复删除不掉清除不了,只能留下了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-21 03:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表