有没有相对简单的方法来恢复多路径路由的正常行为,以便每个流而不是每个数据包选择下一跳?有没有补丁可以使IPv4下一跳选择基于散列,就像是IPv6一样?或者你们如何处理它?
解决方法 “相对容易”是一个困难的术语,但你可能会>为每个链接设置路由表 – 每个链接一个表,使用一个默认网关
>使用netfilter在单个流的所有数据包上标记相同的标记
>使用ip规则表根据标记通过不同的路由表路由数据包
>使用多次下箍加权路由来平衡网关/链路上的第一个会话数据包.
在这个主题上有一个discussion at the netfilter mailing list我偷了这些列表:
1.路由规则(RPDB和FIB)
ip route add default via <gw_1> lable link1ip route add <net_gw1> dev <dev_gw1> table link1ip route add default via <gw_2> table link2ip route add <net_gw2> dev <dev_gw2> table link2/sbin/ip route add default proto static scope global table lb \ nexthop via <gw_1> weight 1 \ nexthop via <gw_2> weight 1ip rule add prio 10 table mainip rule add prio 20 from <net_gw1> table link1ip rule add prio 21 from <net_gw2> table link2ip rule add prio 50 fwmark 0x301 table link1ip rule add prio 51 fwmark 0x302 table link2ip rule add prio 100 table lbip route del default
2.防火墙规则(使用ipset强制“流”LB模式)
ipset create lb_link1 hash:ip,port,ip timeout 1200ipset create lb_link2 hash:ip,ip timeout 1200# Set firewall marks and ipset hashiptables -t mangle -N SETMARKiptables -t mangle -A SETMARK -o <if_gw1> -j MARK --set-mark 0x301iptables -t mangle -A SETMARK -m mark --mark 0x301 -m set !--match-set lb_link1 src,dstport,dst -j SET \ --add-set lb_link1 src,dstiptables -t mangle -A SETMARK -o <if_gw2> -j MARK --set-mark 0x302iptables -t mangle -A SETMARK -m mark --mark 0x302 -m set !--match-set lb_link2 src,dst -j SET \ --add-set lb_link2 src,dst# Reload marks by ipset hashiptables -t mangle -N GETMARKiptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-setlb_link1 src,dst -j MARK --set-mark 0x301iptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-setlb_link2 src,dst -j MARK --set-mark 0x302# Defining and save firewall marksiptables -t mangle -N CNTRACKiptables -t mangle -A CNTRACK -o <if_gw1> -m mark --mark 0x0 -j SETMARKiptables -t mangle -A CNTRACK -o <if_gw2> -m mark --mark 0x0 -j SETMARKiptables -t mangle -A CNTRACK -m mark ! --mark 0x0 -j CONNMARK --save-markiptables -t mangle -A POSTROUTING -j CNTRACK# Reload all firewall marks# Use OUTPUT chain for local access (SquID proxy,for example)iptables -t mangle -A OUTPUT -m mark --mark 0x0 -j CONNMARK --restore-markiptables -t mangle -A OUTPUT -m mark --mark 0x0 -j GETMARKiptables -t mangle -A PREROUTING -m mark --mark 0x0 -j CONNMARK --restore-markiptables -t mangle -A PREROUTING -m mark --mark 0x0 -j GETMARK
您可能需要按照netfilter邮件列表讨论了解上述的一些变体.
总结以上是内存溢出为你收集整理的linux – 3.6后内核中的多路径路由全部内容,希望文章能够帮你解决linux – 3.6后内核中的多路径路由所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)