RouterOS配置Container容器安装Sing-Box实现单路由器上网
本帖最后由 xukongyang 于 2024-4-26 20:15 编辑RouterOS配置Container容器安装Sing-Box实现单路由器上网
之前写过2篇 https://www.right.com.cn/forum/thread-8280032-1-1.htmlMikrotik HAP AX3 通过Container安装Frpc,Clash以及Yacd网页界面
https://www.right.com.cn/forum/thread-8281383-1-1.htmlMikrotik HAP AX3通过container运行clash透明网关,抛弃旁路由,单机自由上网
发现感兴趣的小伙伴还是挺多的,但是查看回复基本都在说第2篇看不懂,确实,步骤很复杂,我这个写作者,实践了好多次的都觉得复杂,所以我后面没有用ax3了,跳出了这个坑:)。
因为觉得还是mini小主机安装:pve+虚拟机跑chr版本的ros+Openwrt旁路由+AP(或无线网卡)的方案 适合我,mini小主机系统资源多、性能强、玩法多,能折腾。:)
但是为了某些情况下,就是不想多用设备,一个路由器解决上网问题,还是重新查资料,解决了使用只有RouterOS系统的单路由器,就能完成上内外网的需求:)
而且步骤非常简单,装好Container中的Sing-box后(本例中ip地址配置为192.168.1.6),RouterOS中只需要执行一行命令: /iprouteadd 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.3ros系统chr版本 ip地址 192.168.1.2配置给Container中的sing-box的虚拟网卡 veth1 地址为192.168.1.6sirpdboy的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镜像到本地sudodocker pull gzxhwq/sing-box:latest@sha256:6af40e97fc9ac4cca80f741ccafac63160f1c3fd2d9a9b47350b44f0917f9372
导出docker镜像为文件sudodocker save gzxhwq/sing-box>./sing-box-chr.tar
将生成的sing-box-chr.tar 上传到ros系统的根目录执行如下命令将docker镜像文件导入ros系统/container/add file=sing-box-chr.tar interface=veth1root-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 mountsadd 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的错误/containeradd interface=veth1 logging=yes mounts=sing-box root-dir=/docker/sing-box workdir=/然后最重要的一条命令,将所有的fake ip都路由到sing-box中ip中(本例是192.168.1.6)达到访问外网的目的 /ip routeadd 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 static/image/common/back.gif
没有,以为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
谢谢楼主,不过你这个方法到底是行还是不行,看你下面的楼层回复,我都懵逼了 ...
行的,之前发的回复删除不掉清除不了,只能留下了 写的很好,不过还是更喜欢用xray,如果楼主也能出一个教程就好了 zhaofamily 发表于 2024-6-10 14:21
写的很好,不过还是更喜欢用xray,如果楼主也能出一个教程就好了
同样的想法................. tun透明网关模式怎么实现 配置文件在哪? 能用fake ip模式分流吗?
页:
[1]
2