"상대적으로 쉬운"은 어려운 용어이지만
- 단일 기본 게이트웨이를 사용하여 각 링크에 대한 라우팅 테이블 설정 (링크 당 하나의 테이블)
- netfilter를 사용하여 단일 스트림의 모든 패킷에서 동일한 마크를 찍습니다.
- IP 규칙 테이블을 사용하여 마크에 따라 다른 라우팅 테이블을 통해 패킷을 라우팅
- 게이트웨이 / 링크를 통해 세션 내 첫 패킷의 균형을 맞추려면 멀티 넥스트 가중치 가중 경로를 사용하십시오.
이 항목에 대한 netfilter 메일 링리스트 에서 목록 을 훔치는 토론 이있었습니다 .
1. 라우팅 규칙 (RPDB 및 FIB)
ip route add default via <gw_1> lable link1
ip route add <net_gw1> dev <dev_gw1> table link1
ip route add default via <gw_2> table link2
ip 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 1
ip rule add prio 10 table main
ip rule add prio 20 from <net_gw1> table link1
ip rule add prio 21 from <net_gw2> table link2
ip rule add prio 50 fwmark 0x301 table link1
ip rule add prio 51 fwmark 0x302 table link2
ip rule add prio 100 table lb
ip route del default
2. 방화벽 규칙 (ipset을 사용하여 "흐름"LB 모드 강제 적용)
ipset create lb_link1 hash:ip,port,ip timeout 1200
ipset create lb_link2 hash:ip,port,ip timeout 1200
# Set firewall marks and ipset hash
iptables -t mangle -N SETMARK
iptables -t mangle -A SETMARK -o <if_gw1> -j MARK --set-mark 0x301
iptables -t mangle -A SETMARK -m mark --mark 0x301 -m set !
--match-set lb_link1 src,dstport,dst -j SET \
--add-set lb_link1 src,dstport,dst
iptables -t mangle -A SETMARK -o <if_gw2> -j MARK --set-mark 0x302
iptables -t mangle -A SETMARK -m mark --mark 0x302 -m set !
--match-set lb_link2 src,dstport,dst -j SET \
--add-set lb_link2 src,dstport,dst
# Reload marks by ipset hash
iptables -t mangle -N GETMARK
iptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-set
lb_link1 src,dstport,dst -j MARK --set-mark 0x301
iptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-set
lb_link2 src,dstport,dst -j MARK --set-mark 0x302
# Defining and save firewall marks
iptables -t mangle -N CNTRACK
iptables -t mangle -A CNTRACK -o <if_gw1> -m mark --mark 0x0 -j SETMARK
iptables -t mangle -A CNTRACK -o <if_gw2> -m mark --mark 0x0 -j SETMARK
iptables -t mangle -A CNTRACK -m mark ! --mark 0x0 -j CONNMARK --save-mark
iptables -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-mark
iptables -t mangle -A OUTPUT -m mark --mark 0x0 -j GETMARK
iptables -t mangle -A PREROUTING -m mark --mark 0x0 -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark --mark 0x0 -j GETMARK
위의 일부 변형에 대해서는 netfilter 메일 링리스트 토론을 따르고 싶을 수도 있습니다.