侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 145 篇文章
  • 累计创建 60 个标签
  • 累计收到 2 条评论

RouterOS 通过 VRRP 实现单线多拨以及 PCC 负载均衡

liveJQ
2023-12-27 / 0 评论 / 0 点赞 / 80 阅读 / 3,819 字 / 正在检测是否收录...
广告 广告

实验环境

20240110_pcc_vrrp_topology.png

本次实验通过 Mikrotik RouterOS 实现单线双拨,以及将这两条拨号线路实现负载均衡,底下接入一台 Windows 做最后的带宽测试。

VRRP 单线多播

单线多播的几个前提条件,一是需要看各地区运营商的支持情况,一般能支持2-3拨;二是需要有独立的MAC地址。我们能够做的就是首先满足第二个条件。根据以往的经验,将端口加入到 bridge 就可以更改 MAC 地址,但是一个端口只能对应一个 bridge,也就是说只能单线单播或多线多拨,特别适用于某些运营商绑定了特定 MAC 地址拨号的情况。

这里用到了 VRRP (Virtual Router Redundancy Protocol)协议,但目的只是为了通过它获取到多个独立的 MAC 地址。至于它的 IP 地址可以随便设置,不重复就行了,不设置 IP 地址的话接口无法使用。由于它自己生成的 MAC 地址总是相同的,非常有可能与运营商底下的其他接入线路重复,导致拨号失败。因此,需要将 VRRP 接口都加入到 bridge,通过它提供的 firewall 做 MAC 地址映射,达到自定义拨号线路 MAC 地址的目的。

命令实现

add name=bridge1
/interface vrrp
add interface=bridge1 name=vrrp1
add interface=bridge1 name=vrrp2 vrid=2
/interface pppoe-client
add disabled=no interface=vrrp1 name=pppoe-out1 password=pppoetest01 user=\
    pppoetest01@livejq.top
add disabled=no interface=vrrp2 name=pppoe-out2 password=pppoetest01 user=\
    pppoetest01@livejq.top
/interface bridge nat
add action=dst-nat chain=dstnat dst-mac-address=\
    50:2C:E8:00:14:06/FF:FF:FF:FF:FF:FF to-dst-mac-address=00:00:5E:00:01:01
add action=src-nat chain=srcnat src-mac-address=\
    00:00:5E:00:01:01/FF:FF:FF:FF:FF:FF to-src-mac-address=50:2C:E8:00:14:06
add action=dst-nat chain=dstnat dst-mac-address=\
    50:2C:E8:00:14:07/FF:FF:FF:FF:FF:FF to-dst-mac-address=00:00:5E:00:01:02
add action=src-nat chain=srcnat src-mac-address=\
    00:00:5E:00:01:02/FF:FF:FF:FF:FF:FF to-src-mac-address=50:2C:E8:00:14:07
/interface bridge port
add bridge=bridge1 interface=ether1
/interface bridge settings
set use-ip-firewall=yes
/ip address
add address=192.168.1.1/24 interface=ether2 network=192.168.1.0
add address=172.16.0.254/24 interface=bridge1 network=172.16.0.0
add address=172.17.0.254/24 interface=vrrp1 network=172.17.0.0
add address=172.18.0.254/24 interface=vrrp2 network=172.18.0.0

这里的 ether1 是 WAN 拨号接口,ether2 是 LAN 口,接的是一台 Windows 测试机,内网网段设为 192.168.1.0/24,网关 192.168.1.1。

设置 DHCP 服务

这里顺便设置了两条拨号线路的带宽分别为 5M(只要不超过你向运营商购买的最大带宽就可以了,我这里设置小点比较容易看出效果),方便后面负载均衡的验收测试。

命令实现

/ip pool
add name=pool1 ranges=192.168.1.100-192.168.1.200
/ip dhcp-server
add add-arp=yes address-pool=pool1 always-broadcast=yes disabled=no \
    interface=ether2 name=server1
/ip dhcp-server network
add address=192.168.1.0/24 dns-server=192.168.1.1 gateway=192.168.1.1
/ip dns
set allow-remote-requests=yes servers=223.6.6.6
/queue simple
add max-limit=5M/5M name=queue1 target=pppoe-out1
add max-limit=5M/5M name=queue2 target=pppoe-out2

PCC 负载均衡

每条线路对应一个 input 标记连接、一个 output 标记路由,还有两个 prerouting 分别标记连接与标记路由。both-addresses:2/0 其中的 both-addresses 表示取目标 IP 和源 IP 的哈希值,2 表示 2 条线路,0 表示哈希值除于 2 的余数为 0 标记为第一条,余数为 1 标记为第二条,以此类推,除数值随线路数一起改变。

命令实现

/ip firewall mangle
add action=mark-connection chain=prerouting comment=PCC1 dst-address-type=\
    !local new-connection-mark=PCC1 passthrough=yes \
    per-connection-classifier=both-addresses:2/0 src-address=192.168.1.0/24
add action=mark-routing chain=prerouting connection-mark=PCC1 \
    new-routing-mark=R1 passthrough=yes src-address=192.168.1.0/24
add action=mark-connection chain=input in-interface=pppoe-out1 \
    new-connection-mark=PCC1 passthrough=yes
add action=mark-routing chain=output connection-mark=PCC1 new-routing-mark=R1 \
    passthrough=yes
add action=mark-connection chain=prerouting comment=PCC2 dst-address-type=\
    !local new-connection-mark=PCC2 passthrough=yes \
    per-connection-classifier=both-addresses:2/1 src-address=192.168.1.0/24
add action=mark-routing chain=prerouting connection-mark=PCC2 \
    new-routing-mark=R2 passthrough=yes src-address=192.168.1.0/24
add action=mark-connection chain=input in-interface=pppoe-out2 \
    new-connection-mark=PCC2 passthrough=yes
add action=mark-routing chain=output connection-mark=PCC2 new-routing-mark=R2 \
    passthrough=yes
/ip firewall nat
add action=masquerade chain=srcnat out-interface=pppoe-out1
add action=masquerade chain=srcnat out-interface=pppoe-out2
/ip route
add distance=1 gateway=pppoe-out1 routing-mark=R1
add distance=1 gateway=pppoe-out2 routing-mark=R2
add comment="\C4\AC\C8\CF\CD\F8\B9\D8" distance=1 gateway=pppoe-out1
add comment="\B1\B8\D3\C3\C4\AC\C8\CF\CD\F8\B9\D8" distance=2 gateway=\
    pppoe-out2

验收测试

这里将两条线路分别设置成 5M 带宽,由下图可以看出,在 Windows 带宽测试中是能够正常跑满两条线路的总带宽的,由此证明两条线路的负载均衡设置生效了。

20240110_pcc_speedtest_full.png

0

评论区