NMState: एक घोषणात्मक नेटवर्किंग कॉन्फ़िगरेशन उपकरण


लिनक्स पारिस्थितिकी तंत्र लोकप्रिय nmtui GUI उपयोगिता सहित नेटवर्किंग को कॉन्फ़िगर करने के कई तरीके प्रदान करता है। यह मार्गदर्शिका अभी तक एक और नेटवर्क कॉन्फ़िगरेशन टूल पेश करती है जिसे NMState के नाम से जाना जाता है

NMState Linux होस्ट पर नेटवर्किंग कॉन्फ़िगर करने के लिए एक घोषणात्मक नेटवर्क प्रबंधक है। यह एक पुस्तकालय है जो एक कमांड-लाइन उपकरण प्रदान करता है जो होस्ट नेटवर्क सेटिंग्स का प्रबंधन करता है। यह एक उत्तर की ओर घोषणात्मक एपीआई के माध्यम से मेजबान नेटवर्किंग का प्रबंधन करता है। इस गाइड को लिखते समय, NetworkManager डेमॉन NMState द्वारा समर्थित एकमात्र प्रदाता है।

इस गाइड में, हम NMState टूल के कुछ उदाहरण उपयोगों को देखते हैं। इस गाइड के लिए, हम इसे फेडोरा लिनक्स का उपयोग करके प्रदर्शित करेंगे।

नेटवर्क प्रबंधन दो दृष्टिकोण अपना सकता है - अनिवार्य और घोषणात्मक। अनिवार्य दृष्टिकोण में, आप टर्मिनल पर कमांड चलाकर इंटरफ़ेस की नेटवर्किंग स्थिति को स्पष्ट रूप से परिभाषित करते हैं। फोकस 'कैसे' पर है।

उदाहरण के लिए, अनिवार्य दृष्टिकोण का उपयोग करके नेटवर्क को नीचे लाने के लिए, कमांड चलाएँ:

$ sudo ifconfig enp0s3 down

दूसरी ओर, घोषणात्मक दृष्टिकोण कॉन्फ़िगरेशन में परिवर्तनों को लागू करने के लिए YAML फ़ाइल का उपयोग करता है। अधिकांश DevOps ऑर्केस्ट्रेशन टूल जैसे Kubernetes YAML फ़ाइल का उपयोग करके पॉड एप्लिकेशन को तैनात करने के लिए इस दृष्टिकोण का उपयोग करते हैं।

यह दृष्टिकोण प्रदान करता है जिसे आमतौर पर DevOps मंडलियों में इन्फ्रास्ट्रक्चर कोड (IaC) के रूप में संदर्भित किया जाता है। यह होस्ट पर नेटवर्क कॉन्फ़िगरेशन के स्वचालन को बढ़ाता है और न्यूनतम त्रुटियों के साथ नेटवर्क इंटरफ़ेस में कई परिवर्तन करने का तेज़ और अधिक विश्वसनीय तरीका प्रदान करता है।

अब, हम गियर स्विच करें और देखें कि आप लिनक्स में अपने नेटवर्क इंटरफेस को कॉन्फ़िगर करने के लिए NMState कॉन्फ़िगरेशन टूल का उपयोग कैसे कर सकते हैं।

चरण 1: NMState नेटवर्किंग कॉन्फिग टूल इंस्टॉल करें

हम Nmstate को स्थापित करके बॉल रोलिंग प्राप्त करेंगे। सबसे पहले, फेडोरा रिपॉजिटरी से पैकेज की उपलब्धता की जाँच इस प्रकार करें:

$ sudo dnf search nmstate

आउटपुट से, हम देख सकते हैं कि नेटवर्क मैनेजर आधिकारिक रिपॉजिटरी पर उपलब्ध है।

अगला, NMstate को निम्नानुसार स्थापित करें। यह फेडोरा 31 और बाद के संस्करणों पर काम करता है।

$ sudo dnf install nmstate

कमांड अन्य पायथन निर्भरता के साथ NMState नेटवर्क मैनेजर API स्थापित करता है।

एक बार इंस्टॉलेशन पूरा हो जाने के बाद, सत्यापित करें कि nmstate पैकेज निम्नानुसार स्थापित है।

$ rpm -qi nmstate

आरएचईएल-आधारित लिनक्स के लिए, पहले कॉपर रिपोजिटरी को सक्षम करें।

$ sudo dnf copr enable nmstate/nmstate-stable

फिर एनएमस्टेट को निम्नानुसार स्थापित करें।

$ sudo dnf install nmstate

स्रोत से NMState को स्थापित करने के तरीके के बारे में अतिरिक्त निर्देश देखें।

एक बार स्थापित होने के बाद, आप निम्नानुसार स्थापित एनएमस्टेट के संस्करण की जांच कर सकते हैं।

$ nmstatectl version

1.0.2

Linux में NMState कॉन्फ़िगरेशन टूल का उपयोग करना

NMstate स्थापित होने के साथ, आइए जानते हैं कि आप नेटवर्क मैनेजर API का अधिकतम लाभ कैसे उठा सकते हैं।

अपने नेटवर्क इंटरफ़ेस के वर्तमान नेटवर्क कॉन्फ़िगरेशन को देखने के लिए, निम्न आदेश चलाएँ। यहाँ, आपके enp0s3 इंटरफ़ेस का कॉन्फ़िगरेशन है।

$ nmstatectl show enp0s3

आउटपुट को 4 अलग-अलग वर्गों में बांटा गया है:

  • dns-resolver: इस अनुभाग में विशिष्ट इंटरफ़ेस के लिए नेमसर्वर कॉन्फ़िगरेशन शामिल है।
  • रूट-नियम: यह रूटिंग नियमों को निर्धारित करता है।
  • मार्ग: इसमें गतिशील और स्थिर दोनों मार्ग शामिल हैं।
  • इंटरफ़ेस: यह अनुभाग ipv4 और ipv6 दोनों सेटिंग्स को निर्दिष्ट करता है।

Linux में नेटवर्क कॉन्फ़िगरेशन बदलना

आप इंटरैक्टिव या फ़ाइल-आधारित मोड का उपयोग करके अपने मेजबानों को वांछित स्थिति में कॉन्फ़िगर करने के लिए NMState कॉन्फ़िगरेशन टूल का उपयोग कर सकते हैं।

  • इंटरएक्टिव: यह nmstatectl एडिट कमांड का उपयोग करके एक नेटवर्क इंटरफ़ेस को संपादित करता है। यह कमांड एक टेक्स्ट एडिटर खोलता है जिसे EDITOR पर्यावरण चर द्वारा परिभाषित किया गया है। एक बार परिवर्तन सहेजे जाने के बाद, NMState नया कॉन्फ़िगरेशन तुरंत लागू करता है जब तक कि सिंटैक्स त्रुटियों का पता नहीं चला।
  • फ़ाइल-आधारित: फ़ाइल-आधारित मोड में, इंटरफ़ेस कॉन्फ़िगरेशन को YAML या JSON फ़ाइल का उपयोग करके nmstatectl लागू कमांड का उपयोग करके लागू किया जाता है।

आइए अब हम अपने हाथों को गंदा करें और देखें कि आप NMState का उपयोग करके नेटवर्क कॉन्फ़िगरेशन को कैसे संशोधित कर सकते हैं।

हमारे फेडोरा सिस्टम में निम्नलिखित कॉन्फ़िगरेशन के साथ दो सक्रिय नेटवर्क इंटरफेस हैं:

$ ip -br -4 a
lo               UNKNOWN        127.0.0.1/8 
enp0s3           UP             192.168.2.104/24 
enp0s8           UP             192.168.2.103/24 

हम enp0s3 नेटवर्क इंटरफेस के MTU (अधिकतम ट्रांसमिशन यूनिट) को बदलने के लिए इंटरेक्टिव मोड का उपयोग करेंगे। डिफ़ॉल्ट रूप से, यह दिखाए गए अनुसार 1500 पर सेट है।

$ ifconfig

हम इसे 4000 में बदल देंगे। हम nmstatectl एडिट कमांड का उपयोग करके ऐसा करेंगे।

$ sudo nmstatectl edit enp0s3

यह एक टेक्स्ट एडिटर में कॉन्फ़िगरेशन को खोलता है। हमारे मामले के लिए, यह विम संपादक में खुलता है। इसके बाद, सभी तरह से नीचे स्क्रॉल करें और mtu पैरामीटर का पता लगाएं। हम मान को 4000 में बदल देंगे, जैसे हम किसी फ़ाइल को विम में संपादित करेंगे। तब हम परिवर्तनों को सहेजेंगे।

जब आप फ़ाइल को सहेजते हैं और बाहर निकलते हैं, तो आप टर्मिनल पर कुछ स्क्रैम्बल आउटपुट देखेंगे क्योंकि NMstate परिवर्तनों को सहेजता है। किसी हस्तक्षेप की आवश्यकता नहीं है, इसलिए अभी भी बैठें।

आइए अब पुष्टि करें कि परिवर्तन किया गया था।

$ ifconfig

टर्मिनल आउटपुट से, हम देख सकते हैं कि हमने सफलतापूर्वक एमटीयू को डिफ़ॉल्ट 1500 मान से 4000 में बदल दिया है।

आइए अब फ़ाइल-आधारित मोड का उपयोग करके कॉन्फ़िगरेशन को संशोधित करें। इस उदाहरण में, हम enp0s8 नेटवर्क इंटरफ़ेस के लिए IPv6 को अक्षम करने जा रहे हैं। पहला कदम एक YAML फ़ाइल बनाना है जो enp0s8 नेटवर्क इंटरफ़ेस की वांछित स्थिति निर्दिष्ट करेगी।

$ sudo nmstatectl show enp0s8 > enp0s8.yml

इसके बाद, हम YAML फ़ाइल को निम्नानुसार संपादित करेंगे।

$ sudo vim enp0s8.yml

IPv6 अनुभाग तक नीचे स्क्रॉल करें। IPv6 को अक्षम करने के लिए, सक्षम पैरामीटर को असत्य पर सेट करें और उन पंक्तियों को हटा दें जिनसे टकराया गया है।

कॉन्फ़िगरेशन को सहेजें और निम्नानुसार YAML फ़ाइल का उपयोग करके नया राज्य लागू करें।

$ sudo nmstatectl apply enp0s8.yml

अब यह सत्यापित करने के लिए दिखाया गया कमांड चलाएँ कि IPv6 अक्षम कर दिया गया है। प्रदर्शित आउटपुट से पता चलता है कि enp0s8 नेटवर्क इंटरफ़ेस के लिए IPv6 रिक्त है, जिसका अर्थ है कि हमने इंटरफ़ेस पर IPv6 को सफलतापूर्वक अक्षम कर दिया है।

$ ip -br a 

एनएमस्टेट द्वारा प्रदान की जाने वाली एक और वास्तव में आसान कार्यक्षमता वांछित नेटवर्किंग स्थिति को अस्थायी रूप से कॉन्फ़िगर करने की क्षमता है। एक बार जब आप कॉन्फ़िगरेशन से संतुष्ट हो जाते हैं, तो आप आगे बढ़ सकते हैं और परिवर्तनों को स्थायी बना सकते हैं। अन्यथा, टाइमआउट समाप्त होने के बाद किए गए परिवर्तन प्रारंभिक सेटिंग्स पर वापस आ जाएंगे। डिफ़ॉल्ट टाइमआउट 60 सेकंड है।

इसे प्रदर्शित करने के लिए, हम अस्थायी रूप से enp0s3 इंटरफ़ेस पर एक स्थिर IP सेट करेंगे और DHCP को अक्षम कर देंगे। एक बार फिर, टेक्स्ट एडिटर का उपयोग करके फ़ाइल तक पहुँचें।

$ sudo vim enp0s3.yml

IPv4 सेक्शन तक स्क्रॉल करें। स्थिर आईपी निर्दिष्ट करें - हमारे मामले में 192.168.2.150 और उन पंक्तियों को हटा दें जिन्हें मारा गया है। इसके अलावा, dhcp पैरामीटर को गलत पर सेट करना सुनिश्चित करें।

फ़ाइल को सहेजें और अस्थायी रूप से निम्नानुसार परिवर्तन करें।

$ sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml

--no-commit विकल्प अस्थायी रूप से --timeout विकल्प द्वारा परिभाषित अवधि के लिए परिवर्तन लागू करता है, जो इस उदाहरण में 20 सेकंड का है।

परिवर्तनों के अस्थायी अनुप्रयोग को सत्यापित करने के लिए, हम 20 सेकंड के समय अंतराल में आईपी कॉन्फ़िगरेशन की जांच करेंगे।

$ ip -br a 

आउटपुट से, आप देख सकते हैं कि इंटरफ़ेस आईपी कॉन्फ़िगरेशन 20 सेकंड के समय अंतराल के बाद डीएचसीपी में वापस आ गया है। आईपी पता 192.168.2.104 पहले स्थिर रूप से कॉन्फ़िगर किए गए आईपी से वापस चला गया जो 192.168.2.150 था।

बेशक, NMState टूल आपके नेटवर्क इंटरफेस को कॉन्फ़िगर करने के लिए एक सुविधाजनक टूल है। यह एक घोषणात्मक उपकरण है जो NetworkManager API का उपयोग करके होस्ट के इंटरफ़ेस की वांछित कॉन्फ़िगरेशन स्थिति को लागू करता है।

राज्य को या तो इंटरैक्टिव दृष्टिकोण का उपयोग करके या फ़ाइल-आधारित पद्धति का उपयोग करके आसानी से परिभाषित किया जाता है जो पूर्व-कॉन्फ़िगर YAML फ़ाइल का उपयोग करता है। यह कॉन्फ़िगरेशन कार्यों के स्वचालन को बढ़ाता है और कॉन्फ़िगरेशन के दौरान त्रुटियों को कम करता है।