MikroTik路由器基于特定域名的端口转发配置方法咨询
MikroTik路由器基于特定域名的端口转发配置方法咨询
嗨,我来帮你搞定这个基于域名的HTTPS端口转发需求!普通的端口转发只看IP和端口,没法区分不同域名的请求,而咱们要转发的是443端口的HTTPS流量,得靠**SNI(Server Name Indication)**来识别请求里的域名——这是TLS握手阶段明文传输的字段,MikroTik可以精准抓取这个信息来做规则匹配。
下面是具体的配置步骤,不管你用Winbox图形界面还是CLI命令行都能操作:
一、准备工作
首先确保两件事:
- 你的MikroTik路由器已经拿到公网IP,且
office1.example.com、office2.example.com这两个域名已经正确解析到这个公网IP上 - 内网的Server1和Server2都能正常访问,且它们的防火墙允许443端口的入站流量
二、创建SNI匹配规则(Layer7协议)
我们需要先定义两个规则,用来识别对应域名的HTTPS请求:
用Winbox操作:
- 打开Winbox登录路由器,进入IP > Firewall > Layer7 Protocols菜单
- 点击
+添加第一条规则:- 命名为
SNI-office1 - 正则表达式填:
^\\x16\\x03\\x01.*\\x00\\x00.*office1\\.example\\.com
(这个正则专门匹配TLS握手包中的SNI字段,精准度比模糊匹配高很多)
- 命名为
- 再点击
+添加第二条规则:- 命名为
SNI-office2 - 正则表达式填:
^\\x16\\x03\\x01.*\\x00\\x00.*office2\\.example\\.com
- 命名为
用CLI命令操作:
直接在终端输入以下命令:
/ip firewall layer7-protocol add name=SNI-office1 regexp="^\\x16\\x03\\x01.*\\x00\\x00.*office1\\.example\\.com" add name=SNI-office2 regexp="^\\x16\\x03\\x01.*\\x00\\x00.*office2\\.example\\.com"
三、配置NAT转发规则
接下来把匹配到的流量转发到对应服务器:
用Winbox操作:
- 进入IP > Firewall > NAT菜单
- 添加第一条转发规则(对应office1):
- Chain选择
dstnat - Protocol选择
tcp - Dst. Port填
443 - Layer7 Protocol选择刚才创建的
SNI-office1 - Action选择
dst-nat - To Addresses填写Server1的内网IP(比如
192.168.1.10) - To Ports填
443
- Chain选择
- 添加第二条转发规则(对应office2):
- Chain选择
dstnat - Protocol选择
tcp - Dst. Port填
443 - Layer7 Protocol选择刚才创建的
SNI-office2 - Action选择
dst-nat - To Addresses填写Server2的内网IP(比如
192.168.1.20) - To Ports填
443
- Chain选择
用CLI命令操作:
输入以下命令:
/ip firewall nat add chain=dstnat protocol=tcp dst-port=443 layer7-protocol=SNI-office1 action=dst-nat to-addresses=192.168.1.10 to-ports=443 add chain=dstnat protocol=tcp dst-port=443 layer7-protocol=SNI-office2 action=dst-nat to-addresses=192.168.1.20 to-ports=443
四、验证配置
配置完成后,你可以从外网访问office1.example.com:443和office2.example.com:443,测试是否能正常跳转到对应的内网服务器。如果有问题,可以检查:
- 域名解析是否正确
- 内网服务器的防火墙是否放行443端口
- MikroTik的
IP > Firewall > Filter里是否有允许established,related流量的规则(默认一般都有)
备注:内容来源于stack exchange,提问作者Dmitry Nikolaev




