MikroTik proxy
MikroTik 上的代理设置
系统要求
要在 MikroTik 路由器上使用代理,请考虑以下硬件要求:
1) RouterOS版本7或更高版本,因为需要容器化支持
2) 128 MB 以上 RAM\ 的路由器型号
3) 路由器必须具有 arm64、arm 或 x86 CPU 架构,因为仅在这些架构上支持虚拟化。通过链接了解更多信息:
https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container
目前市场上可用的合适路由器示例: hAP ax2、hAP ax3、Chateau PRO ax、RB5009、L009UiGS
警告:
您需要物理访问 RouterOS 设备才能启用对容器功能的支持,默认情况下禁用;
- 一旦启用容器功能,就可以远程添加/配置/启动/停止/删除容器!
- 如果您的 RouterOS 设备遭到入侵,容器可用于轻松地在您的 RouterOS 设备中并通过网络安装恶意软件;
- 您的 RouterOS 设备与您在容器中运行的任何设备一样安全;
- 如果你运行容器,则没有任何类型的安全保证;
- 在 RouterOS 设备上运行第 3 方容器映像可能会打开安全漏洞/攻击向量/攻击面;
- 懂得如何构建漏洞的专家将能够越狱/提升到 root 权限;
https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container#Container-Disclaimer
准备路由器
- 安装所需的包
打开控制台并输入以下命令来设置更新通道。
/system package update set channel=stable然后打印包裹清单。
/system package update check-for-updates启用“容器”包并重新启动路由器。
/system/package enable container
或者从 MikroTik 网站下载 ROS 版本和 架构 的“额外包”后,通过 Winbox 手动安装“容器”包([https://mikrotik.com/download](https://mikrotik.com/download))。
.png?sha=79ea6c0eee34581e86820227a7538d084a74d366)
打开下载的存档,将包复制到文件列表,然后重新启动设备。
.png?sha=8e4563e12804b497f7787660bb2f8d96ff42f4ff)
重新启动后,“Container”包应该出现。
- 启用容器化支持
要在路由器上激活容器化,请在终端中输入以下命令:
/system/device-mode/update container=yes然后在5分钟内重新启动路由器。重启后,容器创建即可使用 .png?sha=d91e08773a704f66853188ccd0fd44a68b7a3ef9)
您还可以通过控制台检查:
/system/device-mode/print“容器”应该是“是”
安装和配置容器
创建VETH接口
为未来的容器创建虚拟接口:
/interface veth add address=10.0.201.2/24 dhcp=no gateway=10.0.201.1 gateway6="" mac-address=6D:F3:B2:85:44:45 name=veth1在哪里:
地址 - 您要分配给容器的地址
gateway - 您的网桥的地址(主网络网关)
Viewing the bridge address
为了清楚起见,我们将在内部网络内执行所有操作,而不将容器网络与家庭网络分开。
- 将接口添加到活动网桥
将创建的接口添加到网桥中。
/interface bridge port
add bridge=bridge1 interface=veth1- 配置虚拟化并添加容器
在此示例中,我们将使用来自 wiktorbgu 的基于 hev-socks5-tunnel 的 Docker 映像。
链接 到 Docker 镜像
为容器创建变量
对于容器,您需要创建包含代理连接参数的变量。为此,请在 MikroTik 控制台中添加以下变量:
/container envs
add key=SOCKS5_ADDR list=proxy1 value=ip/domain_proxy
add key=SOCKS5_INTERFACE list=proxy1 value=xray_eth
add key=SOCKS5_PASSWORD list=proxy1 value=password_proxy
add key=SOCKS5_PORT list=proxy1 value=port_proxy
add key=SOCKS5_UDP_MODE list=proxy1 value=udp
add key=SOCKS5_USERNAME list=proxy1 value=username_proxy必须根据购买订单中的数据填写这些字段。
您可以在 设置指南 中查看代理设置示例。
请注意,测试连接是通过 SOCKS5 进行的!要查找 SOCKS 连接端口,请单击订单内的_显示袜子5_。
添加容器
添加registry-url 和用于下载图像的临时文件夹。
/container config
set registry-url=https://registry-1.docker.io tmpdir=/tmp然后创建容器,指定“工作目录”、“接口”和其他参数。
/container
add check-certificate=no envlists=proxy1 interface=veth1 name=hev-socks5-tunnel-mikrotikS1 remote-image=wiktorbgu/hev-socks5-tunnel-mikrotik root-dir=hev-datas1 workdir=/ start-on-boot=yes启动容器。
/container/start hev-socks5-tunnel-mikrotikS1.png?sha=e14351169b376b6d1017c3fa855ae1e63b2a48b2)
在此阶段,还值得检查与容器的连接性。
ping 10.0.201.2自定义路由设置
- 添加路线
要为各个网络设备或特定资源的流量配置精确路由,您需要创建单独的 FIB。
/routing/table/add name=proxy_s1 fib将默认路由添加到容器以供将来的规则使用。
/ip route
add disabled=no dst-address=0.0.0.0/0 gateway=10.0.201.2 routing-table=
proxy_s1 suppress-hw-offload=yes- 添加规则以将流量重定向到特定资源
要通过代理将流量重定向到所需资源,请在“ip/firewall/address list”中创建静态地址列表。
假设我们想通过代理打开 example.com。创建具有任意名称的列表并指定资源 IP 地址或域。
/ip firewall address-list
add address=example.com list=proxy接下来,创建一个 Mangle 规则,将所有流量标记到指定资源,并在“操作”中指定上一步中创建的新路由路径。
/ip firewall mangle
add action=mark-routing chain=prerouting dst-address-list=proxy new-routing-mark=proxy_s1 passthrough=no使用相同的逻辑,您可以添加其他资源,例如 YouTube:
请注意,并非所有资源都可以通过域完全解析所有地址,如 example.com 示例中所示。因此,您需要指定静态 IPv4 地址的完整列表,如 YouTube 示例中所示。否则,部分网站/资源流量将无法通过代理或可能无法正常工作。对于其他资源,您可以在线搜索静态地址列表。
- 添加规则以重定向来自设备或网络的所有流量
要重定向特定设备或整个网络,请创建明确指定源的 Mangle 规则。
假设网络中有一个地址为10.0.201.244的设备,我们希望它的流量通过代理。创建以下规则:
/ip firewall mangle
add action=mark-routing chain=prerouting src-address=10.0.201.244 new-routing-mark=proxy_s1 passthrough=no作为 src-address,您可以指定整个子网或单个主机,例如 src-address=192.168.0.0/24。这样,来自指定地址/网络的所有流量将仅通过代理。
完毕!您现在可以在路由器上使用代理,同时灵活管理来自网络上设备的流量。
最后更新