RouterOS / MikroTik Guide

RouterOS 挂 Socks5 代理

用 RouterOS 7 策略路由 + Heimdallr S5 透明网关,或用 Container 直接在路由器内运行 S5,两种方案一次讲清。

一、RouterOS 能直接挂 Socks5 代理吗

RouterOS 自带的是 /ip/proxy,它是一个供内网使用的 HTTP 代理服务端, 并不包含「连接上游 Socks5 节点」的客户端能力。也就是说, 想让 RouterOS 后面的设备通过 Socks5 节点上网,必须在 RouterOS 之外补一层能说 Socks5 的能力。

Heimdallr S5 正是这一层,落地方式有两种:

  • 方案一(推荐):S5 部署在旁路设备上做透明网关,RouterOS 7 用策略路由把内网流量导过去,内网设备无需任何配置。
  • 方案二:RouterOS 7.x 开启 Container 功能后,直接把 S5 镜像跑在路由器里,由路由器本机提供 Socks5 / HTTP 代理端口。

两种方案可以叠加:容器装在同机,策略路由把整网流量导进容器, 这样路由器既是出口、又是调度中心,只需要一台设备。

二、方案一:策略路由 + 旁路透明网关(推荐)

适合已有软路由、NAS、迷你主机或树莓派的场景。S5 以 TUN 模式接管经过它的流量, RouterOS 只负责把「哪些流量要交给它」。整套方案只改路由,不动 NAT 与防火墙,回滚成本极低。

步骤 1:在旁路设备上部署 S5

一条命令启动,默认监听 80 端口提供 Web 管理平台:

# 直接运行二进制(amd64 示例)
sudo ./s5_linux_amd64 -d ./ -p 80

# 或使用 Docker
docker run -d --name s5 --restart always \
  --net=host --cap-add=NET_ADMIN \
  --device /dev/net/tun \
  -v $(pwd)/config.yaml:/app/config.yaml \
  heimdallr:arm64

TUN 透明代理需要管理员权限;Docker 部署时请务必加上 --cap-add=NET_ADMIN 与 --device /dev/net/tun, 并建议使用 --net=host。

步骤 2:在 RouterOS 上配置策略路由

假设旁路网关(运行 S5 的设备)IP 为 192.168.88.10,内网网段为 192.168.88.0/24:

# ① 新建一张策略路由表并下发到 FIB
/routing/table/add name=to-s5 fib

# ② 内网网段改由该表查询(不再回落主表)
/routing/rule/add src-address=192.168.88.0/24 \
  action=lookup-only-in-table table=to-s5

# ③ 该表的默认出口指向 S5 旁路网关
/ip/route/add dst-address=0.0.0.0/0 \
  gateway=192.168.88.10 routing-table=to-s5
!

关键坑位:RouterOS v7 中新建的路由表不会自动包含直连路由, 被策略命中的设备可能因此访问不到路由器管理地址甚至局域网其他网段。 建议补一条直连路由到该表:

# 把内网直连路由也放进 to-s5 表
/ip/route/add dst-address=192.168.88.0/24 \
  gateway=bridge routing-table=to-s5

步骤 3:在 S5 侧配置分流规则

RouterOS 只把流量导过来,具体哪些走代理、哪些直连、哪些阻断,由 S5 的规则决定:

rules:
  # 按来源内网地址指派出口
  - SRC-IP-CIDR,192.168.88.0/24,proxy-1
  # 指定域名走代理
  - DOMAIN-SUFFIX,google.com,proxy-1
  # 关键字匹配直接阻断
  - DOMAIN-KEYWORD,tiktok,REJECT
  # 其余流量直连
  - MATCH,DIRECT

规则改动后无需重启,S5 通过纯内存原子无锁指针替换在微秒级完成热重载,正在传输的连接不会中断。

三、方案二:RouterOS 容器直装 S5(一体机)

如果路由器是 arm64 / x86 架构且存储够用,RouterOS 7.x 的 Container 功能可以直接运行 S5 镜像, 让路由器本身成为提供 Socks5 代理的那台设备。

前置条件

  • RouterOS v7.x,并安装 container 软件包(Extra packages 中的 Container.npk)。
  • 建议使用外置存储(U 盘 / NVMe)存放镜像与数据目录,不要把容器放在内置闪存上。
  • 首次启用容器模式必须物理接触设备确认:/system/device-mode/update container=yes。
  • 镜像架构需与设备一致:arm / arm64 / x86。

配置步骤

# ① 启用容器模式(执行后需按设备 reset 键确认)
/system/device-mode/update container=yes

# ② 创建 veth,把容器接入内网(等效 host 网络模式)
/interface/veth/add name=veth-s5 \
  address=192.168.88.10/24 gateway=192.168.88.1
/interface/bridge/port/add bridge=bridge interface=veth-s5

# ③ 导入镜像、透传 tun 设备、设置开机自启
/container/add file=disk1/s5.tar name=s5 \
  interface=veth-s5 root-dir=disk1/s5 \
  devices=/dev/net/tun start-on-boot=yes

# ④ 启动容器
/container/start s5

容器启动后,路由器内网地址 192.168.88.10 的 1080 端口即为 Socks5 代理端口, 内网设备可直接填写该地址,也可以配合方案一的策略路由让整网流量自动导入。

!

安全提示:运行第三方容器镜像会引入额外攻击面,MikroTik 官方对此不做安全保证。 请只在可控网络中使用,并及时更新镜像与 RouterOS 版本;生产环境建议优先采用方案一(旁路网关)。

四、按来源与目标精细分流

实际使用中很少需要「全屋都走代理」,更常见的是只让部分设备或部分目标走 Socks5 节点。

1. 只让指定设备走代理

把 /routing/rule 的 src-address 改成具体 IP 即可,例如只让电视盒子走代理:

/routing/rule/add src-address=192.168.88.50/32 \
  action=lookup-only-in-table table=to-s5

2. 只让指定目标走代理

把条件换成 dst-address,其余流量继续走主表:

# 例:访问 203.0.113.0/24 时改走 S5 网关
/routing/rule/add dst-address=203.0.113.0/24 \
  action=lookup-only-in-table table=to-s5

3. 按域名分流(在 S5 侧完成)

RouterOS 的策略路由基于 IP,无法直接匹配域名。 让流量先进入 S5,再在 S5 内用域名规则判断,可以实现「同一台设备,部分域名走代理、部分域名直连」:

rules:
  - DOMAIN-SUFFIX,example.com,proxy-1
  - DOMAIN-REGEX,^ads?\..*\.net$,REJECT
  - DOMAIN-KEYWORD,update,DIRECT
  - MATCH,DIRECT

支持 DOMAIN / DOMAIN-SUFFIX / DOMAIN-KEYWORD / DOMAIN-REGEX 四种全形态匹配。

五、常见问题排查

  • 配策略路由后设备上不了网、也打不开路由器管理页:新建路由表不含直连路由,按方案一步骤 2 的提示补一条内网直连路由。
  • 只有部分流量走代理:检查 /routing/rule 的顺序,规则自上而下匹配;同时确认 S5 侧的 MATCH 兜底规则没有把流量判成 DIRECT。
  • 容器起不来:确认已安装 container 软件包、已执行 device-mode 物理确认、镜像架构与设备一致(arm / arm64 / x86)。
  • TUN 网卡创建失败:容器需要透传 /dev/net/tun(devices=/dev/net/tun)。
  • 路由器内存吃紧:S5 常驻内存约 10MB、二进制体积约 2MB,并内置主动内存守护,内存占用率 ≥ 90% 时自动重置服务并归还堆空闲页,避免 OOM 宕机。

六、为什么用 Heimdallr S5 做 RouterOS 的代理出口

  • 极致轻量:纯 Go 自研代理核心,常驻物理内存约 10MB,arm64 UPX 压缩后二进制约 2MB,低配路由器也能稳定承载。
  • 稳定不宕机:摆脱外部代理内核连接泄漏导致的 Linux 内核 OOM Panic,长时间高负载运行风险显著降低。
  • 透明接管:TUN 模式(tun0 198.19.0.1/30)内核级接管流量,内网设备无需安装任何客户端。
  • 分流灵活:SRC-IP-CIDR 按来源网段指派出口,域名规则支持四种匹配形态与 REJECT 阻断。
  • 热重载无中断:配置更新走纯内存原子指针替换,微秒级生效,不需要重启、不依赖外部 API。
  • 开箱即用:内置 Web 管理平台,节点、规则、巡检、系统状态全部可视化。

需要按你的网络拓扑出一份 RouterOS 部署方案?

我们提供一对一的路由策略设计、分流规则编排与部署支持,覆盖透明网关、多出口调度与企业内容管控。

把 10MB 的稳定,装进你的路由器

一次部署,长期免维护。彻底告别代理内核内存膨胀导致的系统 OOM 宕机。