Linux'ta paket başına çoklu yol yönlendirmesi nasıl yapılır?


9

3.6'dan önceki Linux Çekirdeği, IPv4 çok yollu yönlendirme yapmak için rota önbelleğe alma özelliğini kullandı; bu, iki ayrı satır / İSS arasında yönlendirme yapmak oldukça kolaydı. 3.6'dan itibaren algoritma paket başına değişti, yani iki çizgiyi / İSS'yi elde etmek için bazı rota tablosu / kural / iptables işaret hileleri gerekliydi.

Bununla birlikte, aynı ISP'ye sahip iki hattınız varsa, tek bir IP'yi her paketin başına dengeli / yük devretme tarzında yönlendirebilirse, 3.6'dan dolayı, her iki yönde paket başına yönlendirme.

4.4'ten itibaren çekirdek , kaynak ve hedef adresler üzerindeki bir karışıma dayalı olarak tekrar akışa dayalı yük dengelemeye dönüştü .

Şu anda Çekirdek 4.4.36 çalıştırıyorum ve PPPoE bağlantıları üzerinden çok yollu yönlendirme kullanıyorum. ISS'den gelen sonraki trafiğim, paket başına iki ayrı hat üzerinden yönlendirilir (bir IP her iki hatta da yönlendirilir). Bu bana tek bir satırın hızından daha hızlı bir indirme hızı verir. Neredeyse her iki çizginin hızı birbirine eklendi. Gerçekten iyi çalışıyor, Skype video, VoIP (UDP), YouTube vb. Hepsi harika çalışıyor.

Böyle iyi bir aşağı akış deneyimine sahip olduğundan, yukarı akışta denemek istiyorum, ancak yukarı akış trafiğim her iki ppp cihazında (aynı IP adresine sahip) yeni akış tabanlı algoritmaya göre yönlendiriliyor. Bu, tek bir satırın hızından daha yüksek bir yükleme hızına erişemediğim anlamına gelir.

Geçerli Çekirdeği paket başına algoritmayı kullanacak şekilde yapılandırmanın bir yolu var mı? Veya paket başına çok yollu yönlendirme elde etmek için başka bir yöntem mi? Eski bir Çekirdeğe geri dönmem gerekir mi (başka nedenlerle yapmak istemiyorum)?

ISS'm çok bağlantılı ppp'yi desteklemiyor.

İlgili olması durumunda, şu anda Raspberry Pi 3 üzerinde Arch Linux ARMv7 kullanıyorum.


3
Bu çok kötü bir fikir. L2'deki paket başına dengeleme (yani MLPPP), paketleri sırayla yeniden birleştirmek için yeterli mantık içerir. IP üzerinden çalıştırmak, sipariş dışı teslimat için muazzam bir fırsat (kesin olarak yakın değilse) bırakır. Bu, yavaş TCP oturumları, tamamen kırık UDP, her türlü gerçek zamanlı akış, vb. İle ilgili çok sayıda soruna neden olacaktır. kesinlikle size karşı dengelenecekleri konusunda hiçbir öneri yok.
rnxrx

@rnxrx yorumunuz için teşekkürler - soruyu daha fazla ayrıntı sağlamak için düzenlediniz. Sorumdan: "İSS'den gelen aşağı akım trafiği, paket başına iki ayrı hatta yönlendiriliyor". ISP bir kontrol paneli sağlar - her iki hat üzerinden yönlendirilecek bir IP seçtiğimde, paket başına mükemmel dengelenmiş yuvarlak robin yönlendirir. Her iki hattın toplam hızlarının yaklaşık% 90'ında iyi çalışır ve anında yük devretme sağlar. Skype video, VOIP aramaları, YouTube, BBC streaming vb. Hepsi harika - Böyle harika bir aşağı akış deneyimi beni yukarı doğru denemek istiyor
bao7uo

1
Ahh - anladım ... Şu anda iki benzersiz IP'niz var (bağlantı başına bir tane) veya iki paralel yolla yanınızda tek bir IP'ye (veya bir alt ağa) mı yönlendiriliyorlar? Herhangi bir NAT çalıştırıyorsanız, bu dengelemeden önce gerçekleşmesi çok önemlidir. Her neyse - support.aa.net.uk/… sitesine bir göz attınız mı? Temelde açıkladığınız şeyi gerçekleştirmek için iptables uzantılarını kullanıyor ve bu nedenle makul derecede modern çekirdek sürümleri arasında oldukça tutarlı olmalıdır.
rnxrx

Teşekkürler @rnxrx - evet Her iki seçeneği de yapabilirim (iki benzersiz IP veya paralel yollar üzerinden tek bir IP). Daha anlamlı göründüğü için tek IP seçeneğini tercih ettim.
bao7uo

Yanıtlar:


3

Tamam, bu yüzden araştırmak için daha fazla zaman geçirdikten sonra Linux TEQL (True Link Equalizer) kullanarak bunu yapmanın bir yolunu buldum. İşte gevşek takip ettiğim bir bağlantı, ama bazı ince ayarlarla.

http://lartc.org/howto/lartc.loadshare.html

Arch Linux ARMv7 (Raspberry Pi 3) üzerinde bu şekilde çalıştım

Ön yüklemede:

Uygun Çekirdek modülünü yüklemek için önyüklemede aşağıdaki komut çalıştırılmalıdır.

modprobe sch_teql

Aşağıdaki komutlar ayrıca eth0 üzerinde yerel bir ağdan NAT istediğinizi varsayarsak önyükleme üzerinde çalışır.

sysctl -w net.ipv4.ip_forward=1
iptables -A INPUT -i ppp+ -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -o teql+ -j MASQUERADE

İLERİ dönüş trafiği ppp + 'da ve POQROUTING MASQUERADE, teql +' da.

Ppp bağlantıları geldiğinde:

Bağlantıların yük dengeli olduğu varsayıldığında ppp olduğu varsayılırsa, aşağıdaki komutlar bir komut dosyasında bir /etc/ppp/ip-up.d/komut dosyasında çalıştırılır .

sysctl -w net.ipv4.conf.ppp1.rp_filter=2
sysctl -w net.ipv4.conf.ppp2.rp_filter=2
tc qdisc add dev ppp1 root teql0
tc qdisc add dev ppp2 root teql0
ip address add 1.1.1.1/32 dev teql0
# you can add additional public IP addresses teql0 if you need to
ip link set teql0 up
ip route replace default scope global dev teql0

1.1.1.1ISS'ye bakan genel IP adresiniz nerede . Teql0 cihazına ek genel IP'ler atanabilir, ancak ppp cihazlarına atanmasına gerek yoktur. Kurulumumda, iki ppp bağlantısı aynı IP'yi paylaşıyor (pppoe vb. Tarafından müzakere ediliyor) Yukarıda gösterildiği gibi manuel olarak atanan teql bağlantısı. İSS'nin IP için her iki bağlantıda da eşit şekilde trafik göndermesi gerekir.

Yukarıdaki komut dosyasında ters yol ( rp_filter) 2(gevşek ) olarak ayarlanır, böylece dönüş paketleri teql0 yerine ppp arabirimlerinde geri gelmeleri nedeniyle bırakılmaz.

Bu şekilde kurdum ve mükemmel çalışıyor. Çok kolay! Bağlantılar başarısız olduğunda, kesintisiz yük devretme olur. Geldiklerinde tekrar çalışmaya başlarlar. Başarısız olduğunda paket kaybı veya gecikmesi yok ve geri geldiğinde de yok gibi görünüyor.

Ayrıca, yorumculardan biri, diğer her paketi vb. İşaretlemek için iptables ile politika yönlendirmesini kullanan aşağıdaki bağlantıyı önerdi, ancak yukarıdakilerden daha iyi çalışıp çalışmadığını ve burada buna göre geri bildirim sağlayıp sağlamadığını görmek için birkaç gün içinde deneyeceğim.

http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing


TEQL çok iyi çalıştığı için politika yönlendirmeyi hiç denemedim. Eğer
kırılmazsa

Bunu işe getirmeye çalışıyorum. Yapıştırma çalışma var, bağlı arayüzü yönlendiriciden kullanabilirsiniz. Yine de NAT
çalışamıyorum, LAN'ımdan

Sunucu hatası üzerine yeni bir soru gönderirseniz ve bir yorumdan bağlantı kurarsanız, sizin için anlamaya çalışacağım. Burada tüm bilgileri sığdıramadığınız sürece arayüz / ip konfigürasyonu, yönlendirme tablosu, iptables kuralları, vb.
bao7uo

1
PS. sadece benim yapılandırmada bir hata fark ettim. dedi sysctl -w net.ipv4.ip_forwardama söylemeliyim ki sysctl -w net.ipv4.ip_forward=1yukarıda düzelttim. Bu kesinlikle LAN trafiğinin bağlı linkten aşağı inmesini engelleyecektir.
bao7uo

Benim için çalışmayı durduranın bu olduğunu sanmıyorum, sysctl'de yönlendirmeyi etkinleştirdim. Şimdi görüyorum bozuk sipariş paketleri çok sayıda olup olmadığını anlamaya çalışıyorum.
andynormancx
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.