Dinamik yük devretme ile ağdan systemd-networkd'ye geçiş


14

Systemd en systemd-networkdRaspbian mevcut ağ sistemini değiştirmek için de kullanılabilir.

Ethernet ve WLAN için iki arayüze sahip bir Raspberry Pi'de Raspbian ile nasıl çalışır? Ayrıca onlar için dinamik yük devretme gerçekleştirebilir miyim?

Yanıtlar:


28


Raspbian Buster Lite 2020-02-13 ile 2020-04-11'de güncellenmiş bir Raspberry Pi 4B üzerinde test edildi.
Güncellemeler ile yapıldı sudo apt update && sudo apt full-upgrade && sudo reboot.

Raspbian Stretch ile çalışmaz !
Burada Raspbian Stretch Lite için son test edilmiş revizyonu bulacaksınız .


♦ Soyut

systemd-networkdVarsayılan yerine kullanmak dhcpcdelbette mümkündür. Ancak her durumda anlamlı değildir.

networkd, ağ arayüzlerini yapılandırmak için küçük ve yalın bir hizmettir, çoğunlukla hotplugged ve virtualized networking içeren bir dünyada sunucu kullanım durumları için tasarlanmıştır. Yapılandırması ruh ve soyutlama düzeyinde ifupdown'a benzer, ancak köprüleri, bağları, vlanları vb. Yapılandırmak için herhangi bir ekstra pakete ihtiyacınız yoktur. Henüz WLAN'ları yönetmek için çok uygun değildir; NetworkManager bu tür Masaüstü kullanım durumları için hala çok daha uygundur. [1]

Ancak bir TV veya amplifikatör tarafından yakın duran bir raspi için ve ses veya video akışı veya kamera vb.Için 7/24 çalışmalarını yapmak systemd-networkdiyi bir seçimdir. Ama tam bir anahtar yapmalısınız. networkingVe / veya ile karıştırmanın bir yolu yoktur dhcpcd. Lütfen NetworkManager'ın kutudan çıkardığı Raspbian tarafından desteklenmediğini de unutmayın.


♦ Adım 1: Hazırlık

Referans için Raspbian Buster Lite'ın yeni bir flaşlı SD Kartı kullanıyorum .

Sadece ssh ile başsız bir kuruluma dikkat edeceğim. Bunu kullanıyorsanız, yazım hatalarını iki kez kontrol edin, aksi takdirde kopuk bir bağlantıyla kaybedilirsiniz. Başsız bir kurulum istiyorsanız, SSH'ye (Güvenli Kabuk) bakın ve bölüm 3'ü izleyin. Başsız bir Raspberry Pi'de SSH'yi etkinleştirin (başka bir makinedeki SD karta dosya ekleyin) .

Eski şeyleri devre dışı bırakın. Herhangi bir hizmeti durdurmayın, yalnızca devre dışı bırakın! Bu yüzden sadece bir sonraki önyüklemede geçerli olacaktır. Nasıl yapılır sadece takip


♦ Adım 2: Kablolu ethernet arayüzünü (eth0) kurun

Bu dosyayı ayarlarınızla oluşturun. Bunu, cathem EOF ile başlayan hem de EOF dahil olmak üzere komut satırınıza tek bir blokta kopyalayıp yapıştırabilirsiniz (EOF ayırıcısı dosyanın bir parçası olmayacaktır):

pi@raspberrypi: ~$ sudo -Es   # if not already done
root@raspberrypi: ~# cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.60/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=10
DHCP=yes
[DHCP]
RouteMetric=10
EOF

♦ Adım 3: Kurulum wlan arayüzü (wlan0)

Bu dosyayı ayarlarınızla oluşturun:

root@raspberrypi:~ # cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.61/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=20
DHCP=yes
[DHCP]
RouteMetric=20
EOF

Kur bu dosya ve ayarlarınıza wpa_supplicant country=, ssid=ve psk=ve etkinleştirmek:

root@raspberrypi:~ # cat >/etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE

network={
    ssid="TestNet"
    psk="realyNotMyPassword"
    key_mgmt=WPA-PSK
    proto=RSN WPA
}
EOF

root@raspberrypi:~ # chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
root@raspberrypi:~ # systemctl disable wpa_supplicant.service
root@raspberrypi:~ # systemctl enable wpa_supplicant@wlan0.service
root@raspberrypi:~ # rfkill unblock 0
root@raspberrypi:~ # exit
root@raspberrypi:~ $

Yeniden başlat ve iyi şanslar ;-)

RasPi'nin yeni bir IP adresi alması mümkündür, bu nedenle ssh ile bir sonraki bağlantı için bakmanız gerekebilir .


♦ adım 4: yapıştırma için kablolu ve wifi arayüzü Yapıştırma

Yukarıda açıklandığı gibi her iki arabirimin de ayarlanmış ve çalışıyor olması gerekir. Her iki arabirim de yükseldiğinde sorun değil. Çekirdek önce en düşük metriğe sahip arayüzü kullanacaktır . Burada önce ethernet arayüzü kullanılacaktır. Ancak bunun büyük bir dezavantajı var. ip -4 -brief addrHer arayüzde görebileceğiniz gibi, kendi ip adresi vardır. Çekirdek, biri aşağı indiği için arayüzü değiştirirse, yeni kaynak ip adresini de kullanır. Bu, ssh, akış, oturum açma oturumları vb. Gibi yerleşik durumdaki TCP iletişimini keser. Değiştirilen kaynak ip adresinden yeni bir bağlantı kullanabilirsiniz, ancak eski bağlantılar takılı kaldı. Gerçekten istediğimiz bu değil.

Bu sorunun çözümü yapıştırmadır . bond0Ayarlarını değiştirmeyen bir ara arabirim oluşturuyoruz . Kablolu ve wifi arayüzü geçecektir bond0.

Önce tek ethernet ve wifi ağ dosyalarını devre dışı bırakın:

pi@raspberrypi:~ $ sudo -Es
root@raspberrypi:~ # cd /etc/systemd/network/
root@raspberrypi:~ # mv 04-eth.network 04-eth.network~
root@raspberrypi:~ # mv 08-wifi.network 08-wifi.network~

Ardından bu dört dosyayla bağlantı kur:

root@raspberrypi:~ # cat >/etc/systemd/network/02-bond0.netdev <<EOF
[NetDev]
# status: cat /proc/net/bonding/bond0
Name=bond
Kind=bond
[Bond]
Mode=active-backup
# primary slave is defined in *eth.network
MIIMonitorSec=500ms
MinLinks=1
EOF

root@raspberrypi:~ # cat >/etc/systemd/network/12-bond0-add-eth.network <<EOF
[Match]
Name=e*
[Network]
Bond=bond0
PrimarySlave=yes
EOF

root@raspberrypi:~ # cat >/etc/systemd/network/16-bond0-add-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Bond=bond0
EOF

root@raspberrypi:~ # cat >/etc/systemd/network/20-bond0-up.network <<EOF
[Match]
Name=bond0
[Network]
# to use static IP (with your settings) toggle commenting the next 4 lines.
DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF

Ama bu tüm hikaye değil. systemd-networkd , başlatmaya bağlı hizmetlere devam etmeden önce tüm arabirimlerin açık olup olmadığını kontrol eder . Bağlanma ile, asla yukarıda olduklarını göstermeyen köle arayüzlerimiz (eth0, wlan0) var. Sadece kölelerinden en az biri bağlandığında ortaya çıkan bağ arabirimi. Bu nedenle, hatalar ve önyüklemede uzun süre beklemekle kontrol başarısız olur. Bunu yönetmek için systemd-networkd-wait-online.service. Nasıl yapılır, lütfen aşağıdaki talimatları izleyin

Bunu bitirdiyseniz, yeniden başlatma zamanı.

RasPi'nin yeni bir IP adresi alması mümkündür, bu nedenle ssh ile bir sonraki bağlantı için bakmanız gerekebilir.

Ardından yapıştırma durumunu kontrol edebilirsiniz:

pi@raspberrypi:~ $ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 500
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: dc:a6:32:4c:08:1b
Slave queue ID: 0

Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: dc:a6:32:4c:08:1c
Slave queue ID: 0

Test yapıştırma: yukarıdaki yapıştırma durumu ile Currently Active Slave:iradenin değişeceğini ve MII Status:azaldığını göreceksiniz .

Başsızsanız, downher iki arabirimi birlikte kullanmayın ;-)

pi@raspberrypi:~ $ ip addr
pi@raspberrypi:~ $ sudo ip link set eth0 down
pi@raspberrypi:~ $ sudo ip link set eth0 up
pi@raspberrypi:~ $ sudo ip link set wlan0 down
pi@raspberrypi:~ $ sudo ip link set wlan0 up

Wlan0 ayarlandıktan sonra sabırlı olun. Yönlendiriciye yeniden bağlanmak ve bağlamayı yönetmek biraz zaman alabilir. Bu sefer sshyanıt vermeyecek.

Bağlamanın daha ayrıntılı bir incelemesi için, Ethernet üzerinden wifi'ye öncelik veren Dinamik ağ yük devretme'ye bakabilirsiniz .


referanslar:
[1] /usr/share/doc/systemd/README.Debian.gz
[2] man systemd.netdev
[3] man systemd.network
[4] https://wiki.debian.org/Bonding
[5] https://www.kernel.org/doc/Documentation/networking/bonding.txt


İlk alıntıyla ilgili not: Raspbian hiç NetworkManager kullanmadı. Bu daha çok Fedora ve türetilmiş sistemlerin (Redhat destekli bir proje olan systemd'in konuşlandırıldığı ilk yer) bir eseridir.
goldilocks

ARM üzerinde çalışmayan diğer Debian tabanlı sistemler için de geçerlidir :) Kısa açıklama için teşekkür ederiz.
TCB13

Bu benim streç için çalıştı ama buster ben cihazım herhangi bir etki alanı çözemez sorunla karşılaştı. Nedeni ne olabilir?
user5950

@ user5950 Belki buster ile ilgili bir şey değişti? Bakacağım. Bir saniye lütfen.
Ingo

@Ingo Hızlı tekrar için teşekkürler. Ben satır ekleyerek sorunu çözmek olabilir DNS=192.168.1.1için /etc/systemd/network/04-eth.network. (Statik IP ile bir kurulum kullanıyorum)…
user5950

4

Cevabı @Ingo'dan hazırlamak için: lütfen bağlantıyı kullanmayı düşünün

ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf

yerine bağlantı /run/systemd/resolve/resolv.conf. Bu, "tümleşik" DNS saplamasını etkinleştirir ve arabirim başına DNS sunucusu gibi, herkese açık olmayan girişlerle kendi DNS sunucularını sağlayan VPN'leri kullanırsanız önemli olabilecek şeyleri etkinleştirir.


Çok ilginç, geri bildiriminiz için teşekkür ederim. Bunun belgeleri ve / veya kaynakları var mı? Öyleyse lütfen cevabınızı düzenleyin (altındaki bağlantıyı kullanarak) ve oraya ekleyin.
Ingo
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.