Giden bağlantılar için birden çok varsayılan ağ geçidine sahip olmak mümkün müdür?


16

Aynı alt ağda birden çok NIC (eth0 ve wlan0) var ve NIC'lerden biri başarısız olursa ana bilgisayardaki uygulamalar için bir yedek olarak hizmet etmek istiyorum. Bu nedenle ek bir yönlendirme tablosu oluşturdum. İşte böyle /etc/network/interfacesgörünüyor:

iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
    post-up ip route add default via 192.168.178.1 dev eth0
    post-up ip rule add from 192.168.178.2/32
    post-up ip rule add to 192.168.178.2/32

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
    post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
    post-up ip rule add from 192.168.178.3/32 table rt2
    post-up ip rule add to 192.168.178.3/32 table rt2

Bu, ana bilgisayara bağlanmak için çalışır: Arabirimlerden biri başarısız olursa hala SSH içine alabilirsiniz. Ancak, ana bilgisayardaki uygulamalar kapalıysa dış dünyayla bağlantı başlatamaz eth0. Benim sorunum bu.

Bu konuyu araştırdım ve aşağıdaki ilginç bilgileri buldum:

Bir program giden bağlantı başlattığında, joker karakter kaynak adresini (0.0.0.0) kullanması normaldir, bu da ilgili hedef adresin erişilebilir olması şartıyla hangi arabirimin kullanıldığına dair bir tercih olmadığını gösterir. Bu, yönlendirme kararı verilinceye kadar belirli bir kaynak adresle değiştirilmez. Bu nedenle, bu tür bağlantılarla ilişkili trafik yukarıdaki politika kurallarının hiçbiriyle eşleşmez ve yeni eklenen yönlendirme tablolarının hiçbirine yönlendirilmez. Aksi halde normal bir konfigürasyon olduğu varsayıldığında, bunun yerine ana yönlendirme tablosuna geçecektir. http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html

Ne istiyorum ana yol tablosu birden fazla varsayılan ağ geçidi (bir açık eth0ve bir açık wlan0) olması ve varsayılan ağ geçidine eth0varsayılan olarak ve aşağı wlan0ise if eth0.

Mümkün mü? Böyle bir işlevselliğe ulaşmak için ne yapmam gerekiyor?


Çok kısaca: Birkaç varsayılan yol rastgele bir arabirim seçer, bu da atanan IP farklı olduğu için soruna yol açar. Ne olduğunu istiyorum Multihoming veya donatılacak yapmak zor olan, örneğin bkz burada
dirkt

1
Bağlama ile dinamik yük devretme kullanabilirsiniz . Varsayılan rotalarla uğraşmanıza gerek yoktur.
Ingo

Yanıtlar:


18

Kendim çözdüm. Linux ile yapabileceğiniz ağ oluşturma hakkında çok az bilgi var gibi görünüyor, bu yüzden çözümümü ayrıntılı olarak belgelemeye ve açıklamaya karar verdim. Bu benim son kurulumum:

  • 3 NIC: eth0 (tel), wlan0 (yerleşik wifi, zayıf), wlan1 (usb wifi adaptörü, wlan0'dan daha güçlü sinyal)
  • Hepsi tek bir alt ağda, her biri kendi IP adresiyle.
  • eth0 varsayılan olarak hem gelen hem de giden trafik için kullanılmalıdır.
  • Eth0 başarısız olursa, wlan1 kullanılmalıdır.
  • Wlan1 başarısız olursa wlan0 kullanılmalıdır.

İlk adım : içindeki her arayüz için yeni bir rota tablosu oluşturun /etc/iproute2/rt_tables. Onlara rt1, rt2 ve rt3 diyelim

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1  inr.ruhep
1 rt1
2 rt2
3 rt3

İkinci adım : Ağ yapılandırması /etc/network/interfaces. Bu ana bölüm ve ben mümkün olduğunca açıklamaya çalışacağım:

auto eth0 wlan0
allow-hotplug wlan1

iface lo inet loopback

iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
    post-up ip route add default via 192.168.178.1 dev eth0 table rt1
    post-up ip rule add from 192.168.178.99/32 table rt1
    post-up ip rule add to 192.168.178.99/32 table rt1
    post-up ip route add default via 192.168.178.1 metric 100 dev eth0
    post-down ip rule del from 0/0 to 0/0 table rt1
    post-down ip rule del from 0/0 to 0/0 table rt1

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
    post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
    post-up ip rule add from 192.168.178.97/32 table rt2
    post-up ip rule add to 192.168.178.97/32 table rt2
    post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
    post-down ip rule del from 0/0 to 0/0 table rt2
    post-down ip rule del from 0/0 to 0/0 table rt2

iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
    post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
    post-up ip rule add from 192.168.178.98/32 table rt3
    post-up ip rule add to 192.168.178.98/32 table rt3
    post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
    post-down ip rule del from 0/0 to 0/0 table rt3
    post-down ip rule del from 0/0 to 0/0 table rt3

Eğer yazarsanız ip rule showaşağıdakileri görmelisiniz:

0:  from all lookup local 
32756:  from all to 192.168.178.98 lookup rt3 
32757:  from 192.168.178.98 lookup rt3 
32758:  from all to 192.168.178.99 lookup rt1 
32759:  from 192.168.178.99 lookup rt1 
32762:  from all to 192.168.178.97 lookup rt2 
32763:  from 192.168.178.97 lookup rt2 
32766:  from all lookup main 
32767:  from all lookup default 

Bu bize "192.168.178.99" IP adresinden gelen veya giden trafiğin rt1 yol tablosunu kullanacağını söyler. Çok uzak çok iyi. Ancak yerel olarak oluşturulan trafik (örneğin, makineden başka bir yere ping veya ssh göndermek istediğinizde) özel işlem gerektirir (söz konusu büyük alıntıya bakın).

İlk dört post-up hattı /etc/network/interfacesbasittir ve internette açıklamalar bulunabilir, beşinci ve son post-up hattı sihir yapan şeydir:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

Bu kayıt satırı için nasıl bir rota tablosu belirtmediğimizi unutmayın. Bir rota tablosu belirtmezseniz, bilgiler maingördüğümüz rota tablosuna kaydedilir ip rule show. Bu kayıt satırı, gelen trafiğe yanıt olmayan yerel olarak oluşturulan trafik için kullanılan "ana" yol tablosuna varsayılan bir rota koyar. (Örneğin, sunucunuzda e-posta göndermeye çalışan bir MTA.)

Üç arayüzün tümü, farklı metriklerle de olsa ana rota tablosuna varsayılan bir rota koyar. Şimdi aşağıdakilerle bir mainrota tablosuna bakalım ip route show:

default via 192.168.178.1 dev eth0  metric 100 
default via 192.168.178.1 dev wlan1  metric 101 
default via 192.168.178.1 dev wlan0  metric 102 
192.168.178.0/24 dev wlan0  proto kernel  scope link  src 192.168.178.97 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.99 
192.168.178.0/24 dev wlan1  proto kernel  scope link  src 192.168.178.98

Ana rota tablosunun, farklı metriklerle de olsa üç varsayılan rotası olduğunu görebiliriz. En yüksek öncelik eth0, sonra wlan1 ve wlan0'dır, çünkü daha düşük metrik sayılar daha yüksek bir önceliği gösterir. Yana eth0metrik düşük olan bu sürece kullanılacak gidiyor varsayılan yoldur eth0doldu. Eğer eth0iner, giden trafik geçer wlan1.

Bu kurulum ile ping 8.8.8.8bir terminale ve ifdown eth0başka bir terminale yazabiliriz . pingyine de çalışmalıdır, çünkü ifdown eth0ilgili varsayılan rotayı kaldıracağı için eth0giden trafik geçecektir wlan1.

Aşağıya doğru açılan satırlar ip rule show, her şeyin düzenli kalması için arabirim çöktüğünde ilgili rota tablolarının yönlendirme ilkesi veritabanından ( ) silinmesini sağlar .

Kalan sorun, fişi eth0varsayılan yoldan çektiğinizde eth0hala orada ve giden trafiğin başarısız olmasıdır. Arabirimlerimizi izlemek ve arabirimle ifdown eth0ilgili bir sorun varsa (yani NIC hatası veya fişi çeken biri) yürütmek için bir şeye ihtiyacımız var.

Son adım : girin ifplugd. Bu ifup/ifdown, fişi çekerseniz veya wifi bağlantısında bir sorun varsa arayüzleri izleyen ve yürüten bir daemon /etc/default/ifplugd:

INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

Şimdi fişi çekebilirsiniz eth0, giden trafik değişecektir wlan1ve fişi tekrar takarsanız, giden trafik geri döner eth0. Üç arabirimden biri çalıştığı sürece sunucunuz çevrimiçi kalacaktır. Sunucunuza bağlanmak için eth0'ın ip adresini ve başarısız olursa wlan1 veya wlan0'ın ip adresini kullanabilirsiniz.


Daha uzun süren bir bağlantı kurmayı deneyin (örn. Büyük bir dosya scp), hangi ağ arayüzünü kullandığını izleyin, bu arayüzü devre dışı bırakın ve ne olduğunu görün.
dirkt

scpIP adresi değiştirdiği için oturumu sonlandırılır. Sen kullanarak deneyebilirsiniz withsctpböyle bir durumda canlı bağlantı tutmak veya kullanmak rsyncyerine scpkaldığı yerden transferini contine için.
rosix

Mesele şu ki: Eğer kırılırsa, karmaşık kurulumunuzun tek bir varsayılan rotaya göre avantajı nedir? withsctpyalnızca bir varsayılan rota için de çalışır.
dirkt

1
"Şu anda mevcut olan en hızlı ağ arayüzünde, karmaşık kurulumunuzun tek bir varsayılan rotaya göre avantajı nedir?" >> Kurulumum tam olarak bunu yapıyor. Varsayılan olarak yalnızca en hızlı varsayılan rota (eth0) kullanılır. Rica ederim.
rosix

11

Linux, kodlanmış geçici çözümünüzden daha iyi bir çözüm sunar: aktif yedekleme bağı.

Bu şekilde makinenizde yalnızca bir ip adresi (ve bir mac adresi) olur ve bir arabirim kullanılamaz duruma geldiğinde otomatik olarak ve saydam bir şekilde arabirimler arasında geçiş yapar. Herhangi bir TCP bağlantısında kesinti olmaz (ne dahili ağınıza ne de internete).

Dizüstü bilgisayarımı bağlantı istasyonundan çıkardığımda debian dizüstü bilgisayarımda eth0'dan wlan0'a otomatik olarak yük devretmek için bu kurulumu kendim kullanıyorum.

/ Etc / network / arayüzlerim:

# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0

# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
        pre-up sleep 5
        wpa-conf /etc/wpa_supplicant.conf
        bond-master bond0
        bond-primary eth0

# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
        bond-slaves eth0 wlan0
        bond-primary eth0
        bond-mode active-backup
        bond-miimon 10
        bond_downdelay 10
        bond_updelay 4000

Bu kurulumu birden çok wlan aygıtı içerecek şekilde kolayca genişletebilirsiniz. primary_reselectSeçeneği better(en hızlı bağlantıyı otomatik olarak seç) olarak ayarlamak burada yardımcı olacaktır.

Daha fazla bilgi için bkz. Https://wiki.linuxfoundation.org/networking/bonding ve https://wiki.debian.org/Bonding

Ve (tabii ki) https://www.kernel.org/doc/Documentation/networking/bonding.txt adresindeki linux çekirdek belgeleri

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.