找回密码
 立即注册
查看: 10|回复: 0

MikroTik PCC 负载均衡完整配置教程

[复制链接]

47

主题

15

回帖

982万

积分

管理员

积分
9820456
发表于 前天 16:39 | 显示全部楼层 |阅读模式
       MikroTik PCC(Per Connection Classifier)是一种多线路负载均衡技术,它的核心逻辑是把每个网络连接(比如一个下载任务或一次网页访问)通过哈希算法分配到不同的宽带线路上,而不是把一个连接拆开分到多条线。这意味着 PCC 无法让单个下载任务速度翻倍(1+1≠2),但能让不同的任务分别跑在不同的线路上,互不抢网速,实现带宽叠加利用和线路冗余备份(1+1=1+1)。


1. PCC 工作原理简介
PCC 从 IP 包头中选取指定字段(如 src-address、dst-address、src-port、dst-port),通过哈希算法生成一个 32 位值。将这个值除以你设定的 分母(Denominator),得到的余数(Remainder) 决定该数据包属于哪一条线路 。
关键参数:
  • Denominator:线路总数(例如 2 条线,分母就是 2)。
  • Remainder:线路编号(从 0 开始,例如第一条线为 0,第二条线为 1)。
  • ValuesToHash:分类依据。建议家庭用户使用 both-addresses(源+目标地址),可保证访问某个特定网站(如网银)始终走同一条线路,避免 IP 地址频繁跳动导致掉线 。

2. 适用场景与前提条件
  • 适用场景:拥有两条或以上不同运营商(或同一运营商的多条线路)的宽带接入。
  • 不适用场景:Hotspot(热点认证) 环境无法使用 PCC,因为 Hotspot 强制使用默认路由表 。
  • 硬件要求:确保路由器 CPU 性能足够,PCC 规则较多时会占用一定的 CPU 资源。

3. 配置案例:双线 PCC 负载均衡
假设你有两条 ISP 线路,配置如下:
  • WAN1 (ISP1):接口 ether1,网关 10.10.4.1,IP 10.10.4.100/24
  • WAN2 (ISP2):接口 ether2,网关 10.10.5.1,IP 10.10.5.100/24
  • LAN:接口 ether3,网段 192.168.100.1/24

第一步:基础 IP 与路由表配置
首先配置接口 IP,并创建两条新的路由表(Routing Table),用于策略路由。
  1. # 设置 IP 地址
  2. /ip address
  3. add address=10.10.4.100/24 interface=ether1 network=10.10.4.0
  4. add address=10.10.5.100/24 interface=ether2 network=10.10.5.0
  5. add address=192.168.100.1/24 interface=ether3 network=192.168.100.0

  6. # 创建路由表
  7. /routing table
  8. add disabled=no fib name=ISP1_table
  9. add disabled=no fib name=ISP2_table
复制代码
第二步:防火墙标记(Mangle)—— PCC 核心
这是最关键的步骤。我们需要在 mangle 表中标记连接,再将连接标记应用到路由。
2.1 处理外部访问(可选)
如果允许外网主动访问你的路由器(如端口映射),需要标记入站连接,确保回包走原路 。
  1. /ip firewall mangle
  2. # 标记从 WAN1 进入的新连接
  3. add action=mark-connection chain=input connection-state=new in-interface=ether1 new-connection-mark=ISP1_conn
  4. # 标记从 WAN2 进入的新连接
  5. add action=mark-connection chain=input connection-state=new in-interface=ether2 new-connection-mark=ISP2_conn
复制代码
2.2 标记局域网出站连接(核心 PCC)
这里使用 per-connection-classifier 将 LAN 口发出的流量均匀分配到两条线路上。
  1. /ip firewall mangle
  2. # 使用 both-addresses 分类器,分母为 2,余数 0 分配给 ISP1
  3. add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new \
  4.     dst-address-type=!local in-interface=ether3 new-connection-mark=ISP1_conn \
  5.     per-connection-classifier=both-addresses:2/0

  6. # 余数 1 分配给 ISP2
  7. add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new \
  8.     dst-address-type=!local in-interface=ether3 new-connection-mark=ISP2_conn \
  9.     per-connection-classifier=both-addresses:2/1
复制代码
2.3 标记路由
将刚才标记的连接,映射到具体的路由表。
  1. /ip firewall mangle
  2. # 标记路由到 ISP1_table
  3. add action=mark-routing chain=prerouting connection-mark=ISP1_conn in-interface=ether3 new-routing-mark=ISP1_table
  4. add action=mark-routing chain=output connection-mark=ISP1_conn new-routing-mark=ISP1_table

  5. # 标记路由到 ISP2_table
  6. add action=mark-routing chain=prerouting connection-mark=ISP2_conn in-interface=ether3 new-routing-mark=ISP2_table
  7. add action=mark-routing chain=output connection-mark=ISP2_conn new-routing-mark=ISP2_table
复制代码
第三步:路由配置
配置两条默认路由,分别指向 ISP1_table 和 ISP2_table,并添加主路由表作为备份(实现故障转移)。
  1. /ip route
  2. # 策略路由:带有 ISP1_table 标记的流量走 WAN1 网关
  3. add check-gateway=ping dst-address=0.0.0.0/0 gateway=10.10.4.1 routing-table=ISP1_table
  4. # 策略路由:带有 ISP2_table 标记的流量走 WAN2 网关
  5. add check-gateway=ping dst-address=0.0.0.0/0 gateway=10.10.5.1 routing-table=ISP2_table

  6. # 主路由表(默认):设置距离(Distance)实现故障转移
  7. add distance=1 dst-address=0.0.0.0/0 gateway=10.10.4.1
  8. add distance=2 dst-address=0.0.0.0/0 gateway=10.10.5.1
复制代码
第四步:NAT 伪装
最后,配置源地址转换,让内网设备上网。
  1. /ip firewall nat
  2. add action=masquerade chain=srcnat out-interface=ether1
  3. add action=masquerade chain=srcnat out-interface=ether2
复制代码
4. 特殊场景处理:端口映射
如果你需要从外网访问内网的服务器(如 NAS),需要注意 PCC 可能会导致回包走错线路。
解决方法:需要单独标记来自外网的连接,并确保回包走原路 。
假设你要映射内网 192.168.100.100 的 5001 端口:
  1. /ip firewall nat
  2. # 目标地址转换(DNAT)
  3. add chain=dstnat dst-address=10.10.4.100 protocol=tcp dst-port=5001 action=dst-nat to-addresses=192.168.100.100 to-ports=5001
  4. add chain=dstnat dst-address=10.10.5.100 protocol=tcp dst-port=5001 action=dst-nat to-addresses=192.168.100.100 to-ports=5001

  5. /ip firewall mangle
  6. # 提前标记进入的流量,防止 PCC 规则干扰
  7. add chain=prerouting in-interface=ether1 dst-address=192.168.100.100 protocol=tcp dst-port=5001 action=mark-connection new-connection-mark=ISP1_conn passthrough=yes
  8. add chain=prerouting in-interface=ether2 dst-address=192.168.100.100 protocol=tcp dst-port=5001 action=mark-connection new-connection-mark=ISP2_conn passthrough=yes
复制代码
5. 进阶技巧与故障排查
  • 调整负载比重:如果两条线路带宽不同(如 100M 和 500M),可以通过修改 PCC 规则的数量来调整比例。例如,如果你希望 500M 线路承担 5 倍于 100M 的流量,可以将分母设为 6,让 500M 线路占用 5 个 Remainder,100M 线路占用 1 个 Remainder。
  • 不要忘记排除本地流量:在 PCC 规则中务必加上 dst-address-type=!local,否则访问路由器本身的流量(如 WinBox)也会被负载均衡,导致断连 。
  • 验证配置:

    • 使用 /tool torch 观察接口流量是否均匀分布。
    • 在终端使用 /ip firewall connection print 查看连接标记是否按预期分配。

6. 常见误区
  • 单线无用:如果你只有一条物理宽带,配置 PCC 没有任何意义。PCC 是用于多线路负载均衡的技术,单线情况下使用 ECMP 或其他 QOS 即可 。
  • PPPoE 多拨:如果是单线多拨(同一运营商),请确保 VRRP 或 VLAN 拨号成功后,每条虚拟接口都能获取到独立的网关,否则需要额外处理路由问题 。

通过以上步骤,你可以在 MikroTik 路由器上实现高效、稳定的 PCC 负载均衡,既能享受叠加带宽,又能保障关键应用不断线。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|培训报名|EDCwifi.BBS ( 粤ICP备17065502号-1 粤公网安备44030702001530号 )

GMT+8, 2026-4-3 08:51 , Processed in 0.175072 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表