持续不断的负载均衡
介绍
这个例子是负载均衡的改进版本。它增加了连续的用户会话,即一个特定用户所有出去的连接使用同一个源IP地址。请看下列拓扑图:
配置代码:
/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=1,1,0 \
action=mark-connection new-connection-mark=odd passthrough=yes
add chain=prerouting in-interface=Local connection-mark=odd action=mark-routing \
new-routing-mark=odd passthrough=no
add chain=prerouting in-interface=Local connection-state=new nth=1,1,1 \
action=mark-connection new-connection-mark=even passthrough=yes
add chain=prerouting in-interface=Local connection-mark=even action=mark-routing new-routing-mark=even passthrough=no
/ ip firewall nat
add chain=srcnat connection-mark=odd action=src-nat to-addresses=10.111.0.2 \
to-ports=0-65535
add chain=srcnat connection-mark=even action=src-nat to-addresses=10.112.0.2 \
to-ports=0-65535
/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 scope=255 target-scope=10 routing-mark=odd
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 routing-mark=even
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10
原理与命令讲解
这里我们来看看持续的负载均衡的基本原理:
通过上面的图,我们从所有的连接中,提取每次新建立的连接connection=new,并对他们做nth的标记,将这些连接中相关的奇数(odd)包和偶数(even)包分离开,并走两个不同的网关(GatewayA与GatewayB)出去。这样就能保持每次连接的持续性。
首先我们通过对每段代码做分析,理解他们是怎么运行
IP 配置:
/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1
路由器的两个WAN口地址分别是10.111.0.2/24和10.112.0.2/24,LAN口的地址是192.168.0.1/24,内网网卡命名为LOCAL
Mangle配置
下面是通过nth来分配用户连接会话:
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=1,1,0 \
action=mark-connection new-connection-mark=odd passthrough=yes
add chain=prerouting in-interface=Local connection-mark=odd action=mark-routing \
new-routing-mark=odd passthrough=no
首先,每隔一个包建立一个新的会话,并用“odd”做标记,因此所有属于同一会话的连续的数据包将被放到标记为odd的连接中,注意,我们将这些数据包传递给第二条和第三条规则(passthrough=yes)。第二条规则在prerouting链表将所有标记属于“odd”的连接放入routing mark的“odd”标记中,并将以上连接在此停止处理。
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=1,1,1 \
action=mark-connection new-connection-mark=even passthrough=yes
add chain=prerouting in-interface=Local connection-mark=even action=mark-routing \
new-routing-mark=even passthrough=no
这两个规则将剩下的传输做之前的同样处理,并将剩下一半的传输标记为“even”。
NAT配置
/ ip firewall nat
add chain=srcnat connection-mark=odd action=src-nat to-addresses=10.111.0.2 \
to-ports=0-65535
add chain=srcnat connection-mark=even action=src-nat to-addresses=10.112.0.2 \
to-ports=0-65535
被标记为ODD的数据NAT为10.111.0.2,以EVEN为标记的数据NAT为10.112.0.2
路由配置
/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 scope=255 target-scope=10 routing-mark=odd
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10 routing-mark=even
被标记为ODD的数据用10.111.0.1为网关,同样,被标记为EVEN的数据从10.112.0.1这个网关出去。
/ ip route
add dst-address=0.0.0.0/0 gateway=10.112.0.1 scope=255 target-scope=10
最后,没有做任何标记的数据从10.112.0.2这个网关出去,也是给路由器一个默然网关。
如果是三条或者多条线路的负载均衡则需要修改NTH参数,比如是三条线路的设置修改为: nth=Every,Counter,Packet nth=2,3,0. 2,3,1. 2,3,2 ,共需要在mangle中添加三组规则。而三条以上则以持类推。在3.0中nth参数做了修改,去掉了counter属性,输入的时候我只需要设置Every,Packet两个参数。
VPN 局域网互相访问
在 IP Pool 里 加如一个 IP 段,例如 NAME 111 192.168.1.1-192.168.1.254
PPP>Profiles 里填加设置时 在 Local Address 和 Remote Address 里 选你 在IP Pool 里创建名字为 111 的 IP 段。
上网,不管单线还是双线,策略路由也好。在 防火墙 NAT 里头 +一条 192.168.1.0/24
也就是+了两条,一个是 192.168.0.0/24 这个是局域网。
一个是 192.168.1.0/24 VPN 的段,+上就能上网了。
让两个段互相可以访问,在防火墙 Mangle 里 填加一条General 里 Chain:postrouting Srs.Address 192.168.1.0/24 Action 里 Action :mark routing 192.168.0.0/24 选中 Passthrough
搞定。
用一台路由可以互相通信
海蜘蛛路由可以添加扩展IP
有事Q我:251851491
用一个互联地址就可以,ROS的端口支持多个IP给ROS2分配一192.168.12的地址,给ROS1分配一个192.168.13的地址