mefat의 대답은 많은 도움이되었지만 모든 기본 테이블 규칙을 두 ISP 테이블에 한 번만 복사하는 것이 아니라 규칙 prio를 사용하여 기본 테이블 뒤에 기본 규칙을 추가하는 것이 더 좋습니다.
/ etc / iproute2 / rt_tables를 정상적으로 설정하십시오 :
...
10 ISP1
20 ISP2
...
참고
ip rule show
규칙 0-> 로컬, 32766-> 주 및 32767-> 기본을 표시합니다. 자세한 내용 man ip
은 참조하십시오.
결정적으로 라우팅 프로세스는 낮은 prio에서 높은 prio 규칙으로 작동하지만 32767이 가장 높은 규칙은 아닙니다. 메인 라우팅 테이블이 에 기본 경로가없는 (vpn에 대한 모든 종류의 동적으로 변경되는 경로가 포함될 수 있음) 일치하지 않으면 기본값으로 넘어 가고 (일반적으로 비어 있음) 더 높은 prio 규칙을 찾습니다.
여기에서 '투구'섹션을 참조하십시오. http://linux-ip.net/html/routing-tables.html
이제 설정
ip route add default dev $ISP1_IFACE table ISP1
ip route add default dev $ISP2_IFACE table ISP2
메인 테이블 다음에 있는지 확인하십시오.
ip rule add fwmark 20 table ISP1 prio 33000
ip rule add fwmark 10 table ISP2 prio 33000
사용하다
ip rule show
이 규칙이 main보다 높은 prio인지 다시 확인하십시오.
그런 다음 mefat이 말한 것처럼 CONNMARK mangling을 사용하십시오.
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
주목할 사항 : pppd needs nodefaultroute
는 기본 설정이 . 장치가 다시 시작되면 ISP1 / ISP2 테이블이 정리되므로 스크립트를 사용하여 복원해야합니다.
/etc/ppp/ip-{up,down}.d/dual-routing에서 스크립트를 사용합니다.
# One of my connections is ~2x faster than the other
BALANCED=0.3
ALL_ISP1=0
ALL_ISP2=1
RULENUM=4
set_balance() {
iptables -t mangle -R PREROUTING $RULENUM -m statistic --mode random --probability $0 -j MARK --set-mark 2
}
# if both up
set_balance $BALANCED
# if ppp1 down:
set_balance $ALL_ISP1
# if ppp0 down:
set_balance $ALL_ISP2
이것은 연결 기반로드 밸런싱이므로로드를 사용하여 통계 규칙을 모니터링하고 바꾸는 방법을 살펴 보겠습니다 iptables -t mangle -R PREROUTING <n>
. 사용자 공간에서. 따라서 한 연결에서 오래 실행되는 다운로드가 있고 다른 연결이 약간로드 된 경우 약간로드 된 연결을 선호해야합니다.