核心概念:反向代理
在 RouterOS 上发布网站,我们通常不直接让 RouterOS 运行一个完整的 Web 服务器(如 Apache/Nginx),而是让 RouterOS 充当一个“反向代理”。

工作流程如下:
- 用户在浏览器中输入你的公网 IP 地址或域名(
your.public.ip)。 - 请求到达你的 RouterOS 设备。
- RouterOS 根据你配置的规则,将这个请求转发到局域网内的一台真实的服务器(一台运行着 Nginx 或 Apache 的 Linux 机器,或者一个 Docker 容器)。
- 内部服务器处理请求,生成网页内容。
- 内部服务器将网页内容返回给 RouterOS。
- RouterOS 再将内容转发给用户的浏览器。
这样做的好处是:
- 安全性:内部服务器不直接暴露在公网上,只有 RouterOS 的防火墙端口是开放的。
- 灵活性:你可以将任何内部 Web 服务(如 WordPress, GitLab, 简单的 HTML 页面)发布出去。
- 统一入口:RouterOS 可以管理多个不同内部服务的发布,通过不同的路径(如
/site1,/site2)来区分。
使用 /ip service 和 /ip proxy 发布网站(推荐)
这是最直接、最简单的方法,适用于发布单个网站或服务,它利用了 RouterOS 的 Web Proxy 功能。
场景假设
- RouterOS 公网 IP:
0.113.10 - 内部 Web 服务器 IP:
168.88.20 - 内部 Web 服务器端口:
8080(假设这台服务器上运行着一个非 80 端口的服务) - 希望用户访问的 URL:
http://203.0.113.10
详细步骤
第一步:确保 RouterOS 可以访问内部服务器

在 RouterOS 的终端中 ping 一下内部服务器 IP,确保网络连通。
[admin@MikroTik] > ping 192.168.88.20
192.168.88.20: 80 byte packet, id=0, seq=1/0, ttl=64 time=1.200 ms
192.168.88.20: 80 byte packet, id=0, seq=2/0, ttl=64 time=0.900 ms
...
ping 不通,请检查你的网络配置(如 /ip firewall filter 规则是否阻止了 ICMP)。
第二步:启用 Web Proxy 服务
这个服务是反向代理功能的基础。

[admin@MikroTik] /ip service
[admin@MikroTik] /ip service> enable www-proxy
[admin@MikroTik] /ip service> print
Flags: X - disabled, S - static
# SERVICE PORT ADDRESS
0 S ftp 21
1 S ssh 22
2 S www 80
3 S www-ssl 443
4 S api 8728
5 S winbox 8291
6 XS www-proxy 8080 ; <-- 确保这一行是 enabled 状态
我们默认启用 www (端口 80) 和 www-ssl (端口 443) 来让外部访问,而 www-proxy 是 RouterOS 内部用来做代理的,它监听在 8080 端口。
第三步:创建反向代理规则
这是最关键的一步,我们需要告诉 RouterOS,当收到发往 www (80端口) 的请求时,应该把它转发到哪里。
[admin@MikroTik] /ip proxy
[admin@MikroTik] /ip proxy> add action=redirect dst-host=192.168.88.20 dst-port=8080 src-address=0.0.0.0/0
参数解释:
action=redirect: 表示将请求重定向(转发)到另一个地址。dst-host=192.168.88.20: 目标内部服务器的 IP 地址。dst-port=8080: 目标内部服务器的端口号。src-address=0.0.0.0/0: 对所有来源的 IP 地址都应用此规则,你可以限制为特定的 IP 地址段,168.88.0/24,这样只有你的内网用户才能访问。
第四步:配置防火墙(NAT)
为了让外网用户能够访问,你必须配置 NAT(网络地址转换),将外网请求的端口转发到 RouterOS 自身的代理服务端口。
注意: 这里有一个常见的误区,我们不是将端口直接转发到内部服务器,而是转发到 RouterOS 的 www-proxy 服务端口。
[admin@MikroTik] /ip firewall nat
[admin@MikroTik] /ip firewall nat> add chain=dst-nat action=dst-nat to-addresses=0.0.0.0 to-ports=8080 protocol=tcp dst-port=80 in-interface=your_wan_interface
参数解释:
chain=dst-nat: 目标链,用于修改目标地址/端口。action=dst-nat: 动作为目标地址转换。to-addresses=0.0.0.0: 转发到本机(RouterOS 自己)。to-ports=8080: 转发到本机的 8080 端口(即我们启用的www-proxy服务)。protocol=tcp: 针对 TCP 协议。dst-port=80: 匹配来自外网的、目标端口为 80 的请求。in-interface=your_wan_interface: 请替换为你的外网接口名称,ether1,pppoe-out1等。
第五步:验证
从外网任何一台电脑上,打开浏览器,访问你的 RouterOS 的公网 IP 地址 http://203.0.113.10,你应该能看到你内部服务器 168.88.20:8080 上提供的网站内容。
使用 /ip firewall nat 的 dst-nat 直接转发
这种方法更接近传统路由器的“端口转发”,它不使用 RouterOS 的 Web Proxy 功能,而是直接将外网请求的端口完整地转发到内部服务器。
场景假设(同上)
- RouterOS 公网 IP:
0.113.10 - 内部 Web 服务器 IP:
168.88.20 - 内部 Web 服务器端口:
80 - 希望用户访问的 URL:
http://203.0.113.10
详细步骤
第一步:确保网络连通
同上,ping 内部服务器。
第二步:配置防火墙(NAT)直接转发
[admin@MikroTik] /ip firewall nat
[admin@MikroTik] /ip firewall nat> add chain=dst-nat action=dst-nat to-addresses=192.168.88.20 protocol=tcp dst-port=80 in-interface=your_wan_interface
参数解释:
chain=dst-nat: 目标链。action=dst-nat: 动作为目标地址转换。to-addresses=192.168.88.20: 直接将目标地址修改为内部服务器的 IP。protocol=tcp: 针对 TCP 协议。dst-port=80: 匹配来自外网的、目标端口为 80 的请求。in-interface=your_wan_interface: 请替换为你的外网接口名称。
第三步:验证
从外网访问 http://203.0.113.10,你应该能看到内部服务器的内容。
两种方法的对比与选择
| 特性 | 方法一 (/ip proxy) |
方法二 (/ip firewall nat 直接转发) |
|---|---|---|
| 工作原理 | 反向代理 | 端口转发 |
| 安全性 | 更高,内部服务器完全隔离,不直接与公网通信。 | 较低,内部服务器直接暴露在公网(虽然经过 NAT,但攻击者可以直接尝试攻击其 IP)。 |
| 灵活性 | 更高,可以轻松添加代理头信息、缓存等高级功能。 | 较低,功能单一,只做简单的端口映射。 |
| 适用场景 | 发布复杂的 Web 应用、需要增强安全性、作为多个内部服务的统一入口。 | 发布简单的、非关键性的服务、快速测试、对 RouterOS 资源要求极低。 |
| 资源消耗 | 稍高,因为 RouterOS 需要处理和应用代理逻辑。 | 极低,几乎是纯粹的二层数据包转发。 |
| HTTPS 支持 | 相对简单,可以结合 /ip service 的 www-ssl 和 /ip proxy 的 ssl 参数实现 HTTPS 终止。 |
复杂,需要在内部服务器上配置 HTTPS 证书,并将 443 端口也转发过去。 |
推荐:
对于绝大多数情况,强烈推荐使用方法一 (/ip proxy),它更安全、更灵活,也更符合 RouterOS 的设计哲学,方法二虽然在某些简单场景下更直接,但牺牲了安全性。
重要注意事项
- 动态公网 IP:如果你的公网 IP 是动态变化的,你需要使用 DDNS(动态域名解析)服务,将一个域名(如
myhome.ddns.net)指向你的动态 IP,然后在 RouterOS 中配置ddns-client实现自动更新。 - 防火墙规则:确保你的
/ip firewall filter规则没有阻止外网访问你的www(80) 和www-ssl(443) 端口,默认的input链规则通常是允许的,但如果你做过修改,需要检查。 - HTTPS (SSL/TLS):对于生产环境,强烈建议使用 HTTPS。
- 最佳实践:在内部服务器上配置好 HTTPS(例如使用 Let's Encrypt 获取免费证书),然后将 443 端口通过方法一或方法二转发过去。
- RouterOS 终止 HTTPS:RouterOS 也可以自己处理 HTTPS(作为 SSL 终止点),然后将纯 HTTP 流量转发到内部服务器,这需要配置
/ip service的www-ssl和/ip proxy的ssl证书,配置稍复杂,但可以减轻内部服务器的 SSL 解密负担。
- 性能:RouterOS 的 CPU 和内存资源有限,如果你要发布高流量的网站,其性能可能会成为瓶颈,对于大型网站,专业的 Web 服务器(如 Nginx, Apache)仍然是更好的选择。
- 备份:在进行任何配置更改前,请务必备份你的配置,以防配置错误导致设备无法访问。
[admin@MikroTik] /system backup save name=my-website-config
希望这份详细的指南能帮助你在 RouterOS 上成功发布你的网站!
