गतिशील विफलता के साथ हॉवेटो नेटवर्किंग से सिस्टमड-नेटवर्कड की ओर पलायन करता है


14

रास्पबियन systemd-networkdपर मौजूदा नेटवर्किंग सिस्टम को बदलने के लिए सिस्टमड का उपयोग किया जा सकता है।

ईथरनेट और वलन के लिए दो इंटरफेस वाले रास्पबेरी पाई पर रास्पियन के साथ यह कैसे काम करता है? क्या मुझे उनके लिए गतिशील विफलता का एहसास हो सकता है?

जवाबों:


28

रास्पबेरी
बस्टर लाइट के साथ एक रास्पबेरी पाई 4 बी पर परीक्षण किया गया 2020-02-13 2020-04-11 को अपडेट किया गया।
के साथ किए गए अपडेट sudo apt update && sudo apt full-upgrade && sudo reboot

यह रास्पियन खिंचाव के साथ काम नहीं करेगा !
यहां आपको रास्पियन स्ट्रेच लाइट के लिए अंतिम परीक्षण संशोधन मिलेगा ।


♦ सार

systemd-networkdडिफ़ॉल्ट के बजाय का उपयोग करना dhcpcdसंभव है। लेकिन यह सभी मामलों में सार्थक नहीं है।

networkd नेटवर्क इंटरफेस को कॉन्फ़िगर करने के लिए एक छोटी और दुबली सेवा है, जिसे ज्यादातर दुनिया में हॉटप्लग्ड और वर्चुअलाइज्ड नेटवर्किंग के साथ सर्वर उपयोग के मामलों के लिए डिज़ाइन किया गया है। इसका विन्यास आत्मा और मतिहीनता के स्तर से लेकर ifupdown तक समान है, लेकिन आपको पुलों, बांडों, वलान आदि को कॉन्फ़िगर करने के लिए किसी अतिरिक्त पैकेज की आवश्यकता नहीं है। यह अभी तक WLAN के प्रबंधन के लिए बहुत उपयुक्त नहीं है; NetworkManager अभी भी ऐसे डेस्कटॉप उपयोग के मामलों के लिए अधिक उपयुक्त है। [1]

लेकिन एक टीवी या एम्पलीफायर के पास रस्सी बिछाने और ऑडियो या वीडियो स्ट्रीमिंग के लिए या कैमरे आदि के लिए 24/7 अपना काम systemd-networkdकरना एक अच्छा विकल्प है। लेकिन आपको एक पूर्ण स्विच करना होगा। साथ networkingऔर / या मिश्रण करने का कोई तरीका नहीं है dhcpcd। कृपया यह भी ध्यान दें कि NetworkManager को रास्पियन बॉक्स से बाहर का समर्थन नहीं है।


♦ चरण 1: तैयारी

संदर्भ के लिए मैं रास्पियन बस्टर लाइट से एक ताजा चमकता हुआ एसडी कार्ड का उपयोग करता हूं ।

मैं केवल ssh के साथ एक हेडलेस इंस्टालेशन पर ध्यान दूंगा। यदि आप इसका उपयोग कर रहे हैं, तो डबल चेक टाइपोस या अन्यथा आप टूटे हुए कनेक्शन के साथ खो गए हैं। यदि आप एक हेडलेस इंस्टालेशन चाहते हैं तो SSH (सिक्योर शेल) को देखें और सेक्शन 3. फॉलो करें। SSH को एक हेडलेस रास्पबेरी पाई पर सक्षम करें (किसी अन्य मशीन पर एसडी कार्ड में फाइल जोड़ें)

पुराने सामान को निष्क्रिय कर दें। किसी भी सेवा को बंद न करें, केवल उन्हें अक्षम करें! इसलिए यह अगले बूट पर ही प्रभावी होगा। यह कैसे करना है बस का पालन करें


(चरण 2: वायर्ड ईथरनेट इंटरफ़ेस (eth0) सेटअप करें

इस फाइल को अपनी सेटिंग्स के साथ बनाएं। आप केवल catEOF के साथ और अपनी कमांड लाइन में इसे एक ब्लॉक में कॉपी और पेस्ट कर सकते हैं जिसमें दोनों EOF (सीमांकक EOF फ़ाइल का हिस्सा नहीं मिलेगा):

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

0 चरण 3: सेटअप वेलन इंटरफ़ेस (wlan0)

इस फाइल को अपनी सेटिंग्स के साथ बनाएं:

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

इस फ़ाइल और अपनी सेटिंग्स के साथ wpa_supplicant सेटअप करें country=, ssid=और psk=इसे सक्षम करें:

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:~ $

रिबूट और अच्छी किस्मत ;-)

यह संभव है कि RasPi को एक नया आईपी एड्रेस मिले ताकि आपको ssh के साथ अगले कनेक्शन के लिए इसे देखना पड़े ।


♦ चरण 4: फेलओवर के लिए बॉन्डिंग वायर्ड और वाईफाई इंटरफेस

जैसा कि ऊपर वर्णित है, आपके पास इंटरफेस और सेटअप दोनों होना चाहिए। यह कोई समस्या नहीं है जब दोनों इंटरफेस ऊपर हैं। कर्नेल पहले सबसे कम मीट्रिक के साथ इंटरफ़ेस का उपयोग करेगा । यहां सबसे पहले ईथरनेट इंटरफेस का इस्तेमाल किया जाएगा। लेकिन इसका एक बड़ा नुकसान है। जैसा कि आप ip -4 -brief addrप्रत्येक इंटरफ़ेस के साथ देख सकते हैं इसका स्वयं का आईपी-पता है। यदि कर्नेल इंटरफ़ेस स्विच करता है क्योंकि एक नीचे चला गया है तो यह अपने नए स्रोत आईपी-पते का भी उपयोग करता है। यह किसी भी स्थापित स्टेटफुल टीसीपी संचार, जैसे ssh, स्ट्रीमिंग, लॉगिन सत्र आदि को तोड़ देगा। आप बदले हुए स्रोत आईपी पते से एक नए कनेक्शन का उपयोग कर सकते हैं लेकिन पुराने कनेक्शन अटके हुए हैं। यह वास्तव में हम क्या चाहते हैं नहीं है।

इस समस्या का समाधान संबंध है । हम एक अंतरिम इंटरफ़ेस बनाते हैं जो bond0इसकी सेटिंग्स को नहीं बदलता है। वायर्ड और वाईफाई इंटरफेस चालू हो जाएगा bond0

पहले एकल ईथरनेट और वाईफाई नेटवर्क फ़ाइलों को अक्षम करें:

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~

फिर इन चार फाइलों के साथ सेटअप संबंध:

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

लेकिन कहानी यहीं पर खत्म नहीं हो जाती। systemd-networkd जाँचता है कि क्या सभी इंटरफेस सेवाओं के आधार पर स्टार्टअप के साथ आगे बढ़ने से पहले हैं। बॉन्डिंग के साथ हमारे पास दास इंटरफेस (eth0, wlan0) है जो कभी संकेत नहीं देते हैं कि वे ऊपर हैं। इसका केवल बॉन्ड इंटरफ़ेस जो आता है अगर उसका कम से कम एक दास जुड़ा हुआ है। तो चेक त्रुटियों के साथ विफल हो जाएगा और बूटअप पर लंबे समय तक प्रतीक्षा करेगा। इसे प्रबंधित करने के लिए आपको modifiy a करना होगा systemd-networkd-wait-online.service। इसे कैसे करें, कृपया निर्देशों का पालन करें

यदि वह समाप्त हो गया, तो यह रिबूट करने का समय है।

यह संभव है कि RasPi को एक नया आईपी पता प्राप्त हो, ताकि आपको ssh के साथ अगले कनेक्शन के लिए इसे देखना पड़े।

फिर आप बॉन्डिंग स्थिति देख सकते हैं:

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

टेस्ट बॉन्डिंग: ऊपर बॉन्डिंग स्टेटस के साथ आप देखेंगे कि Currently Active Slave:वसीयत बदल जाएगी और MII Status:डाउन हो जाएगी।

यदि आपका सिर बेकार है, तो downदोनों एक साथ नहीं; ;-)

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 की स्थापना के बाद धैर्य रखें। मुझे राउटर को फिर से कनेक्ट करने और बॉन्डिंग को प्रबंधित करने में कुछ समय लग सकता है। इस बार sshकोई जवाब नहीं देगा।

बॉन्डिंग की अधिक गहन समीक्षा के लिए, आप डायनेमिक नेटवर्क विफलता पर एक नज़र डाल सकते हैं, ईथरनेट पर वाईफाई को प्राथमिकता दें


संदर्भ:
[१] /usr/share/doc/systemd/README.Debian.gz
[२] आदमी systemd.netdev
[३] आदमी systemd.network
[४] https://wiki.debian.org/B न्ing
[५] https://www.kernel.org/doc/Documentation/networking/bonding.txt


पहली बोली ऊपर के संबंध में ध्यान दें: रास्पियन ने कभी नेटवर्क मैनजर का उपयोग नहीं किया। यह फेडोरा और व्युत्पन्न प्रणालियों की अधिक कलाकृतियां है (जो कि पहले स्थान पर था, जो कि सिस्टमड, रेडहैट समर्थित परियोजना थी, तैनात किया गया था)।
गोल्डीलॉक्स

इसके अलावा अन्य डेबियन आधारित प्रणालियों पर लागू होना जरूरी नहीं है एआरएम :) संक्षिप्त विवरण के लिए धन्यवाद।
TCB13

इसने मेरे खिंचाव पर काम किया लेकिन बस्टर पर मुझे इस समस्या का सामना करना पड़ा, कि मेरी डिवाइस किसी भी डोमेन को हल नहीं कर सकती। किसी भी विचार का कारण क्या हो सकता है?
user5950

@ user5950 शायद बस्टर के साथ कुछ बदल गया है? मुझे इसे देखना होगा। बस एक मिनट।
इंगो

@Ingo तेज रिप्ले के लिए धन्यवाद। मैं लाइन DNS=192.168.1.1को जोड़कर समस्या को हल कर सकता था /etc/systemd/network/04-eth.network। (मैं स्थैतिक आईपी के साथ एक सेटअप का उपयोग कर रहा हूं) ...
user5950

4

@Ingo से उत्तर को विस्तृत करने के लिए: कृपया लिंक का उपयोग करने पर विचार करें

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

के लिंक के बजाय /run/systemd/resolve/resolv.conf। यह "एकीकृत" डीएनएस स्टब को सक्षम करता है और प्रति-इंटरफ़ेस डीएनएस सर्वर जैसी चीजों को सक्षम करता है जो कि अगर आप वीपीएन का उपयोग करते हैं जो गैर-सार्वजनिक प्रविष्टियों के साथ अपने स्वयं के DNS सर्वर प्रदान करते हैं तो यह महत्वपूर्ण हो सकता है।


बहुत दिलचस्प, प्रतिक्रिया के लिए धन्यवाद। क्या इसका कोई दस्तावेज और / या स्रोत है? यदि ऐसा है तो कृपया अपने उत्तर को संपादित करें (नीचे दिए गए लिंक का उपयोग करके) और इसे वहां जोड़ें।
इंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.