RouterOS 快速生成PCC策略脚本

标签: 路由交换 | 发表时间:2021-11-06 22:14 | 作者:树辉
出处:https://vqiu.cn/

PCC概念

RouterOS 快速生成PCC策略脚本

  PCC 全称 per connection classifier ,是 RouterOS 从 v3.24 版本后提供的功能,允许你将流量按照:源地址,源端口,目的地址,目的端口等规则进行分流,从而实现网络负载均衡功能。大概原理是查看 IP 包头 通过特定 Hash 算法进行比较并根据设置的规则捕获数据包。

  通过 PCC负载,可避免出现多个网关的问题,通过 RouterOS 强大的数据包标记功能 (IP/Firewall/Mangle) ,可以将流量自动分流为多组并创建动态路由表。

时有人咨询PCC策略脚本,作为一个懒人重症者,只能写一简单粗暴的生成脚本去应付(水平有限)。

  • ros-pcc-rule.sh
  #!/usr/bin/env bash
# filename: ros-pcc-rule.sh

lan_int_name=bridge1
wan_int_lists=(
        isp-cu-01
        isp-cu-02
        isp-cu-03
        isp-cu-04
        isp-cu-05
)

num=0
wlan_count=${#wan_int_lists[@]}

echo -en "/ ip firewall mangle\n"
# 标记公网流量
for wan in ${wan_int_lists[@]}
do
        echo "  add chain=prerouting in-interface=$wan connection-mark=no-mark action=mark-connection new-connection-mark=${wan}_conn"
done
echo ''

# 创建 PCC 规则
for wan in ${wan_int_lists[@]}
do
        echo "  add chain=prerouting in-interface=$lan_int_name connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:${wlan_count}/${num} action=mark-connection new-connection-mark=${wan}_conn"
        ((num ++))
done
echo ''

# 根据标记创建动态策略路由
for wan in ${wan_int_lists[@]}
do
        echo "  add chain=prerouting connection-mark=${wan}_conn in-interface=${lan_int_name} action=mark-routing new-routing-mark=to_${wan}"
done
echo ''

# 标记创建动态策略路由
for wan in ${wan_int_lists[@]}
do
        echo "  add chain=output connection-mark=${wan}_conn action=mark-routing new-routing-mark=to_${wan}"
done

# 为出口创建规则创建路由表
echo -en '\n/ip route\n'
for wan in ${wan_int_lists[@]}
do
        echo "  add dst-address=0.0.0.0/0 gateway=${wan} distance=1 routing-mark=to_${wan} check-gateway=ping"
done

# SNAT规则
echo -en '\n/ip firewall nat\n'
for wan in ${wan_int_lists[@]}
do
        echo " add chain=srcnat out-interface=$wan action=masquerade"
done

以上范例生成脚本如下:

  / ip firewall mangle
  add chain=prerouting in-interface=isp-cu-01 connection-mark=no-mark action=mark-connection new-connection-mark=isp-cu-01_conn
  add chain=prerouting in-interface=isp-cu-02 connection-mark=no-mark action=mark-connection new-connection-mark=isp-cu-02_conn
  add chain=prerouting in-interface=isp-cu-03 connection-mark=no-mark action=mark-connection new-connection-mark=isp-cu-03_conn
  add chain=prerouting in-interface=isp-cu-04 connection-mark=no-mark action=mark-connection new-connection-mark=isp-cu-04_conn
  add chain=prerouting in-interface=isp-cu-05 connection-mark=no-mark action=mark-connection new-connection-mark=isp-cu-05_conn

  add chain=prerouting in-interface=bridge1 connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:5/0 action=mark-connection new-connection-mark=isp-cu-01_conn
  add chain=prerouting in-interface=bridge1 connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:5/1 action=mark-connection new-connection-mark=isp-cu-02_conn
  add chain=prerouting in-interface=bridge1 connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:5/2 action=mark-connection new-connection-mark=isp-cu-03_conn
  add chain=prerouting in-interface=bridge1 connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:5/3 action=mark-connection new-connection-mark=isp-cu-04_conn
  add chain=prerouting in-interface=bridge1 connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:5/4 action=mark-connection new-connection-mark=isp-cu-05_conn

  add chain=prerouting connection-mark=isp-cu-01_conn in-interface=bridge1 action=mark-routing new-routing-mark=to_isp-cu-01
  add chain=prerouting connection-mark=isp-cu-02_conn in-interface=bridge1 action=mark-routing new-routing-mark=to_isp-cu-02
  add chain=prerouting connection-mark=isp-cu-03_conn in-interface=bridge1 action=mark-routing new-routing-mark=to_isp-cu-03
  add chain=prerouting connection-mark=isp-cu-04_conn in-interface=bridge1 action=mark-routing new-routing-mark=to_isp-cu-04
  add chain=prerouting connection-mark=isp-cu-05_conn in-interface=bridge1 action=mark-routing new-routing-mark=to_isp-cu-05

  add chain=output connection-mark=isp-cu-01_conn action=mark-routing new-routing-mark=to_isp-cu-01
  add chain=output connection-mark=isp-cu-02_conn action=mark-routing new-routing-mark=to_isp-cu-02
  add chain=output connection-mark=isp-cu-03_conn action=mark-routing new-routing-mark=to_isp-cu-03
  add chain=output connection-mark=isp-cu-04_conn action=mark-routing new-routing-mark=to_isp-cu-04
  add chain=output connection-mark=isp-cu-05_conn action=mark-routing new-routing-mark=to_isp-cu-05

/ip route
  add dst-address=0.0.0.0/0 gateway=isp-cu-01 distance=1 routing-mark=to_isp-cu-01 check-gateway=ping
  add dst-address=0.0.0.0/0 gateway=isp-cu-02 distance=1 routing-mark=to_isp-cu-02 check-gateway=ping
  add dst-address=0.0.0.0/0 gateway=isp-cu-03 distance=1 routing-mark=to_isp-cu-03 check-gateway=ping
  add dst-address=0.0.0.0/0 gateway=isp-cu-04 distance=1 routing-mark=to_isp-cu-04 check-gateway=ping
  add dst-address=0.0.0.0/0 gateway=isp-cu-05 distance=1 routing-mark=to_isp-cu-05 check-gateway=ping

/ip firewall nat
 add chain=srcnat out-interface=isp-cu-01 action=masquerade
 add chain=srcnat out-interface=isp-cu-02 action=masquerade
 add chain=srcnat out-interface=isp-cu-03 action=masquerade
 add chain=srcnat out-interface=isp-cu-04 action=masquerade
 add chain=srcnat out-interface=isp-cu-05 action=masquerade

更多

相关 [routeros pcc 策略] 推荐:

RouterOS 快速生成PCC策略脚本

- - 枯惠
  PCC 全称 per connection classifier ,是 RouterOS 从 v3.24 版本后提供的功能,允许你将流量按照:源地址,源端口,目的地址,目的端口等规则进行分流,从而实现网络负载均衡功能. 大概原理是查看 IP 包头 通过特定 Hash 算法进行比较并根据设置的规则捕获数据包.

【教程】Routeros 5.15使用教程

- - 傻子-王跸西的blog-WangBiXi.com
默认帐号:admin,没有密码. 你就能看到上面的注册信息了. RouterOS的FileSystem不公开,你只能使用限制的几个指令,任何时候你不. 知道可以做什么,你都可以输入“?”显示,而“/”则雷同与dos的“cd”. 上面的指令,有点类似于“进入system目录,然后再进入license目录,然后.

全中文routeros软路由管理系统 rosman

- bin - 开源中国社区最新软件
功能支持列表: 1.与routeros 完全同步; 2.内设有移动管理介面,.

CDN缓存策略

- - 开心平淡对待每一天。热爱生活
   CDN这个东西,当然是个好东西. 所以看到有FAQ就理所当然的复制下来,其实,最近我突然想到一件事情,中国的地区域名还有一个很有意思的地域域名,那就是js.cn,所以,我悄悄的申请了两个域名,cache.js.cn和cdn.js.cn,就是想用来做这种CDN转发,当然,只是简单的. 我最初的想法是(有一小部分),如果我的服务器里有N多人装了DZ论坛,那么这些JS和CSS其实都是共用的.

MySQL安全策略

- - OurMySQL
   MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    数据安全如果只靠MySQL应用层面显然是不够的,是需要在多个层面来保护的,包括网络、系统、逻辑应用层、数据库层等.

Cassandra 1.1的缓存策略

- - NoSQLFan
从0.5和0.6版本开始, Cassandra就提供了主键 缓存和行缓存. 在1.1 版本中,Cassandra的核心开发团队重新对缓存策略进行了设计和实现,以提供配置更简单但同时又更高效的缓存效果. 为什么要将缓存集成到数据库内部. 实际上,缓存既可以储存到数据库内部,也可以是外部的独立缓存层.

Git分支管理策略

- - 阮一峰的网络日志
如果你严肃对待编程,就必定会使用" 版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非 Git莫属. 相比同类软件,Git有很多优点. 其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便. 有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用.

多分支开发策略

- - CSDN博客研发管理推荐文章
ü  功能开发 (开发人员). ü  bug修复,包括测试版本的bugfix和生产版本的hotfix (开发人员). ü  版本集成,包括发布测试版本和生产版本 (项目经理). ü  版本测试 (测试人员). ü  保证bug修复与功能开发并行,不会出现堵塞情形. ü  保证可以快速版本集成. 实现方式就是多分支 + 里程碑标记.

Java异常处理策略

- - 研发管理 - ITeye博客
任务与预先设定的规则不相符的情况都可以称之为异常. 但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性. 用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块. 码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程.