Linux'ta yük dengeleme ve çoklu ISS bağlantılarına NAT yükleme


15

İki farklı İSS'den iki internet bağlantım var ve ağımdan gelen ve iki İSS arasındaki trafiği dengelemem gerekiyor. Debian GNU / Linux kullanıyorum.

Kurulumum böyle -

eth0 (192.168.0.0/24) - Yerel ağ

eth1 (192.168.1.0/24) - ISS # 1

eth2 (192.168.2.0/24) - ISS # 2

Yerel ağım bu sunucuya eth0 aracılığıyla bağlı ve kutu LAN'daki tüm makineler için DHCP sunucusu cum Gateway'dir.

Sunucunun iki ISS arasında yük dengelemesi yapması ve ayrıca NAT-ing yapması gerekir.

Lartc.org adresindeki yönlendirme talimatlarını izledim, ancak yine de NAT- ing'in düzgün yapılması için talimatlara ihtiyacım var.

Herhangi bir yardım takdir edilecektir.

PS - pFsense'i biliyorum ama Linux kullanmam gerekiyor.


2
ne tür talimatlara ihtiyacınız var? her şey lartc.org'da açıklanmıştır. Özellikle herhangi bir sorunun mu var?
lorenzog

Yanıtlar:


19

Hem lartc.org hem de iptables yöntemlerini kullanarak yük dengeleme yaptım ve iptables yöntemini anlamak ve uygulamak daha kolay. Tek dezavantajı, istatistik modülünü kullanabilmek için oldukça yeni bir iptables sürümüne ihtiyacınız olması

Diyelim ki birkaç şey var:

LAN: eth0: 192.168.0.1/24

ISP1: eth1: 192.168.1.1/24, ağ geçidi: 192.168.1.2/24

ISP2: eth2: 192.168.2.1/24, ağ geçidi: 192.168.2.2/24

İşte iptables yöntemi kullanarak nasıl yaparım:

Rota tabloları

Öncelikle / etc / iproute2 / rt_tables 'ı düzenleyerek rota tablosu numaraları ve İSS adları arasına bir harita ekleyin

...
10 ISP1
20 ISP2
...

Tablo 10 ve 20, sırasıyla ISP1 ve ISP2 içindir. Bu tablo (bu hxxp: //linux-ip.net/html/adv-multi-internet.html almış) bu kod parçacığı ile ana tablodan yolları ile bu tabloları doldurmak gerekiyor

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

ISP1'in ağ geçidi üzerinden ISP1'e varsayılan ağ geçidi ekleyin:

ip route add default via 192.168.1.2 table ISP1

ISP2 için de aynısını yapın

Şimdi her bir ISS için 1 rota tablosu var.

iptables

Tamam şimdi iptables her yolları tablolara paketleri eşit dağıtmak için kullanın. Bu çalışmanın burada nasıl bulunabileceği hakkında daha fazla bilgi ( http://www.diegolima.org/wordpress/?p=36 ) ve burada ( 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

Peki NAT kolaydır:

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

3
Bağlantılarla iyi cevap. Mutlaka orada daha önce olduğu gibi bunu yapmak için yeni bir iptables gerekmez istatistik vardı maç rastgele ve inci hangi sunucu aynı rolü maçlar.
SiegeX

1
Iptables üzerindeki işaretlerle ilgili bir sorum var. Yayınlanan bağlantıda, yalnızca yeni durumla eşleşen paketleri işaretliyorlar. Neden farklı yapıyorsun?
Matías

ISP3, ISP4 vb. Gibi bir ağ daha kullanabilir miyim?
Vitor Mazuco

3

mefat'ın yanıtı bana çok yardımcı oldu, ancak tüm ana tablo kurallarının bir kopyasını değil, iki ISS tablosuna kopyalamak yerine, ana tablodan sonra varsayılan kuralları eklemek için kural prio'yu kullanmak daha iyi bir yaklaşım olabilir.

/ Etc / iproute2 / rt_tables dosyasını normal şekilde ayarlayın:

...
10 ISP1
20 ISP2
...

Bunu not et

ip rule show

0-> yerel, 32766-> ana ve 32767-> varsayılan kurallarını gösterir. Daha man ipfazla bilgi için bakınız.

Yönlendirme süreci, düşük priodan yüksek prio kurallarına kadar çalışacaktır ... ancak 32767 en yüksek kural # değildir. Dolayısıyla, ana yönlendirme tablosunda varsayılan bir rota yoksa (ancak vpns vb. İçin her türlü dinamik olarak değişen rota içerebilir), bir eşleşme yapılmazsa, varsayılana (normalde boş) düşer ve daha yüksek prio kurallarını arar.

Buradaki 'atma' bölümüne bakın: http://linux-ip.net/html/routing-tables.html

Şimdi kurulum

ip route add default dev $ISP1_IFACE table ISP1
ip route add default dev $ISP2_IFACE table ISP2

ve ana masaya baktıklarından emin olmak için:

ip rule add fwmark 20 table ISP1 prio 33000
ip rule add fwmark 10 table ISP2 prio 33000

kullanım

ip rule show

yine bu kuralların ana kurallardan daha yüksek prio olduğunu doğrulamak için

O zaman mefat dediği gibi CONNMARK mangling kullanın:

# 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

Unutulmaması gereken şeyler: pppd'nin nodefaultrouteaksi takdirde ana olarak kurulması gerekir ; bir cihaz yeniden başlatıldığında ISP1 / ISP2 tabloları temizlenir, bu yüzden bir komut dosyası kullanılarak geri yüklenmesi gerekir.

/Etc/ppp/ip-{up,down {.d/dual-routing içinde bir komut dosyası kullanıyorum

# 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

Bu bağlantı tabanlı yük dengeleme, bu yüzden istatistik kuralını izlemek ve değiştirmek için yükü kullanacağım: iptables -t mangle -R PREROUTING <n>kullanıcı alanından. Dolayısıyla, bir bağlantıda uzun süre çalışan bir indirme varsa ve diğer bağlantı hafif yüklüyse, hafif yüklü bağlantıyı tercih etmeliyiz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.