ros之pcc

PCC匹配器允許分離傳輸流做到平衡流量的功能(能指定這個屬性選擇src-address, src-port,dst-address,dst-port)

PCC原理

PCC從一定範圍內分析選擇IP數據包頭,通過哈西散列算法的幫助下,將選定的區域轉換爲32bit值。這個值除以指定Denominator(分母),餘數將比較一個指定的餘數(Remainder),如果相等這時數據包將會被捕獲,你可以選擇src-address,dst-address, src-port, dst-port等使用此操作。

per-connection-classifier=

PerConnectionClassifier::= [!]ValuesToHash:Denominator/Remainder

 Remainder ::= 0..4294967295    (integer number)

 Denominator ::= 1..4294967295    (integer number)

 ValuesToHash ::=src-address|dst-address|src-port|dst-port[,ValuesToHash*]


per-connection-classifier分類器,通過判斷源地址、目標地址、源端口和目標端口,對數據進行分類,如

事例:

這個配置將所有連接基於源地址和端口分類的3個組:

/ipfirewall mangle add chain=prerouting action=mark-connectionnew-connection-mark=1st_conn per-connection-classifier=both-addresses:3/0

/ipfirewall mangle add chain=prerouting action=mark-connectionnew-connection-mark=2nd_conn per-connection-classifier=both-addresses:3/1

/ipfirewall mangle add chain=prerouting action=mark-connectionnew-connection-mark=3rd_conn per-connection-classifier=both-addresses:3/2


per-connection-classifier=both-addresses:3/0,這條規則的含義爲我們對原地址的端口進行分類,3/0爲一共有3條出口,定義第一條,3/1則是第二條,以此類推。

注意:

PCCRouterOS v3.24開始支持,這個功能解決了多網關的負載均衡問題。

PCC的負載均衡事例

一、雙向地址負載均衡

通分組源地址和源端口實現負載平衡,這裏我們建立2WAN出口分別是wan1wan2,網絡環境如下:

·ISP1地址10.200.15.99/24,網關:10.200.15.1

·ISP2地址10.200.100.99/24,網關:10.200.100.2

·內網IP地址192.168.100.1/24

·啓用DNS緩存功能,用192.168.100.1作內網DNS解析;

基本配置

首先進入ip address配置IP地址:

ip dns setting中配置好DNS緩存,DNS爲:61.139.2.69

Mangle標記配置

接下來我們進入ip firewall mangle標記連接和路由,我們使用per-connection-classifier雙向地址進行分類做連接分類標記。

首先我們需要將進入路由的的鏈接進行標記

如下圖,我們進入一條mangle規則,中的advanced標籤內容可以看到per-connection-classifier分類器,選擇both-addresses的分類:

然後選擇dst-address-type=!local,即除了目標地址是本地以前的地址:

注:2條線的分類代碼定義是第一條線爲2/0,第二條爲2/1

同樣選擇一下地址類型:

下面命令是提取走第一條線路的連接標記取名位1st_conn,並從連接裏提取路由標記名位1st_route,設置:per-connection-classifier=both-addresses:2/0,設置in-interface=lan

/ipfirewall mangle

addaction=mark-connection chain=prerouting comment="" disabled=no \

   in-interface=lannew-connection-mark=1st_conn passthrough=yes \

   per-connection-classifier=both-addresses:2/0

addaction=mark-routing chain=prerouting comment=""connection-mark=1st_conn \

   disabled=no in-interface=lannew-routing-mark=1st_route passthrough=yes


提取走第二條線路的連接標記取名位2nd_conn,並從連接裏提取路由標記名位2nd_route,設置:per-connection-classifier=both-addresses:2/1,設置in-interface=lan:

/ipfirewall mangle

addaction=mark-connection chain=prerouting comment="" disabled=no \

   in-interface=lannew-connection-mark=2nd_conn passthrough=yes \

  per-connection-classifier=both-addresses:2/1

addaction=mark-routing chain=prerouting comment=""connection-mark=2nd_conn \

   disabled=no in-interface=lannew-routing-mark=2nd_route passthrough=yes


winboxmangle中設置完成後如下:

回程路由設置

我們需要將從那個口進入就從相應的口回去,即保證每個外網口的數據能得到正確的路由

/ipfirewall mangle

addchain=input in-interface=wan1 action=mark-connectionnew-connection-mark=1st_conn

addchain=input in-interface=wan2 action=mark-connectionnew-connection-mark=2nd_conn


winbox設置

標記完進入接口的鏈接後,將這些鏈接指定到相應的路由標記上:

addchain=output connection-mark=1st_conn action=mark-routingnew-routing-mark=1st_route

addchain=output connection-mark=2nd_conn action=mark-routing new-routing-mark=2nd_route


winbox設置

路由配置

配置完標記後路由後,我們進入ip route配置路由,首先設置負載均衡的標記路由,首先設置第一條線路的路由標記,設置routing-mark=1st_route

設置第二條線路的路由標記,設置routing-mark=2nd_route

配置默認網關和備份網關,默認網關的distance設置爲1,並設置check-gateway=ping,通過ping監測網關狀態:

備份網關的distance設置爲2,並設置check-gateway=ping,通過ping監測網關狀態:

配置完成後的路由標如下圖:

配置nat

最後配置nat轉換規則,進入ip firewall nat中配置action=masquerade,分別對2條線路做僞裝:

/ipfirewall nat

addaction=masquerade chain=srcnat out-interface=wan1

addaction=masquerade chain=srcnat out-interface=wan2





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章