Linux에서 여러 ISP 연결로드 밸런싱 및 NAT


15

두 개의 서로 다른 ISP에서 두 개의 인터넷 연결이 있으며 두 ISP간에 네트워크에서 발생하는 트래픽의 균형을 유지해야합니다. 데비안 GNU / 리눅스를 사용하고 있습니다.

내 설정은 다음과 같습니다-

eth0 (192.168.0.0/24)-로컬 네트워크

eth1 (192.168.1.0/24)-ISP # 1

eth2 (192.168.2.0/24)-ISP # 2

내 로컬 네트워크는 eth0을 통해이 서버에 연결되며 상자는 LAN의 모든 컴퓨터에 대한 DHCP 서버 겸 게이트웨이입니다.

서버는 두 ISP 사이에서로드 밸런싱을 수행하고 NAT 연결도 수행해야합니다.

lartc.org 의 라우팅 지침을 따랐 지만 여전히 NAT를 올바르게 수행하기위한 지침이 필요합니다.

도움을 주시면 감사하겠습니다.

추신-pFsense에 대해 알고 있지만 Linux를 사용해야합니다.


2
어떤 종류의 지시가 필요합니까? 모든 것은 lartc.org에 설명되어 있습니다. 특히 문제가 있습니까?
lorenzog

답변:


19

lartc.org 및 iptables 메소드 를 모두 사용하여로드 밸런싱을 수행 했으며 iptables 메소드를 이해하고 구현하기가 더 쉽다는 것을 알게되었습니다 . 유일한 단점은 통계 모듈 을 사용하려면 최신 iptables 버전 이 필요하다는 것입니다

몇 가지를 가정 해 봅시다.

LAN : eth0 : 192.168.0.1/24

ISP1 : eth1 : 192.168.1.1/24, 게이트웨이 : 192.168.1.2/24

ISP2 : eth2 : 192.168.2.1/24, 게이트웨이 : 192.168.2.2/24

다음은 iptables 방법을 사용하여 수행하는 방법입니다.

라우팅 테이블

먼저 / etc / iproute2 / rt_tables를 편집하여 라우팅 테이블 번호와 ISP 이름 사이에 맵을 추가하십시오.

...
10 ISP1
20 ISP2
...

따라서 표 10과 20은 각각 ISP1과 ISP2에 대한 것입니다. 이 코드 스 니펫으로 메인 테이블의 경로 로이 테이블을 채워야합니다 (hxxp : //linux-ip.net/html/adv-multi-internet.html에서 가져 왔습니다)

ip route show table main | grep -Ev '^default' \
   | while read ROUTE ; do
     ip route add table ISP1 $ROUTE
done

그리고 ISP1의 게이트웨이를 통해 ISP1에 기본 게이트웨이를 추가하십시오.

ip route add default via 192.168.1.2 table ISP1

ISP2에 대해서도 동일하게 수행

이제 각 ISP에 대해 2 개의 라우팅 테이블이 있습니다.

IP 테이블

이제 iptables를 사용하여 각 라우팅 테이블에 패킷을 고르게 분배합니다. 이 작업 방법에 대한 자세한 정보는 여기 ( http://www.diegolima.org/wordpress/?p=36 ) 및 여기 ( http://home.regit.org/?page_id=7 ) 에서 찾을 수 있습니다 .

# 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

NAT

NAT는 쉽다 :

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

3
링크가 좋은 답변입니다. 통계가 일치 하기 전에 같은 역할 을하는 임의n 번째 일치 서버 가 있었기 때문에이를 수행하기 위해 반드시 새로운 iptables가 필요하지는 않습니다 .
SiegeX 2009

1
iptables의 마크에 관한 질문이 있습니다. 게시 된 링크에서 새 상태와 일치하는 패킷 만 표시합니다. 왜 다르게합니까?
Matías

ISP3, ISP4 등과 같은 하나 이상의 네트워크를 사용할 수 있습니까?
Vitor Mazuco

3

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>. 사용자 공간에서. 따라서 한 연결에서 오래 실행되는 다운로드가 있고 다른 연결이 약간로드 된 경우 약간로드 된 연결을 선호해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.