systemd-networkd सँग पुनः जडान भएपछि पनि ip rule टिकाइराख्नुहोस्
शेलबाट थपिएको ip नियम अर्को लिङ्क घटनामा हराउँछ। नियम, त्यसको तालिका र मार्गहरू systemd-networkd मा घोषणा गर्नुहोस्, ताकि नीति फेरि बनोस्।
ip rule प्रयोग गरेर नीति नियम थप्नुहोस्, त्यो लिङ्क जानसम्म काम गर्छ; त्यस क्षणमा त्यो केवल छैन। केही पनि ठूलो स्वरमा असफल भएन: कर्नेलको अवस्था बदलियो, र नियम हुनुपर्ने कुरा कुनै कन्फिगरेसन मालिकलाई थाहा थिएन। टिक्ने र नटिक्ने नियमबीचको सम्पूर्ण फरक यही हो। systemd-networkd भएको होस्टमा समाधान भनेको नियमलाई मालिक दिनु हो, प्रत्येक पुनः जडानपछि आदेश फेरि चलाउनु होइन।
नियम तब मात्र हुन्छ जब कसैले त्यसको मालिक हुन्छ
कर्नेलको राउटिङ नीति अवस्था हो, कन्फिगरेसन होइन। त्यो चालु प्रणालीमा बस्छ, र त्यो जुन इन्टरफेसमा निर्भर छ त्यसलाई भत्काउने जुनसुकै कुराले त्यसलाई साथै लैजान सक्छ। शेल आदेशले त्यो अवस्था बदल्छ र मनसायको कुनै अभिलेख छोड्दैन।
नेटवर्क म्यानेजरहरू उल्टो तरिकाले काम गर्छन्: तिनीहरू कन्फिगरेसन पढ्छन्, लागू गर्छन्, र लिङ्क घटनाले अघिल्लो अवस्था अवैध बनाएपछि फेरि लागू गर्छन्। तिनीहरूको कन्फिगरेसनमा घोषित नियम फेरि बन्छ, जबकि तिनीहरूको छेउमा थपिएको नियम मालिक नभएको बाहिरी वस्तु हो।
त्यो भिन्नताको networkd मा एउटा नाम छ, र केही पनि सक्षम गर्नुअघि त्यो पढ्न लायक छ। हालका संस्करणहरूमा बाहिरी नियमहरू पूर्वनिर्धारित रूपमा हटाइन्छन्, जसले आफ्ना हातले लेखेका प्रविष्टिहरू रहन्छन् भन्ने अपेक्षा गर्नेहरूलाई अचम्मित बनाउँछ।
कुनै सेटिङमा भरोसा गर्नुअघि संस्करण पढ्नुहोस्
मालिकत्वको व्यवहार networkd.conf को एउटा सेटिङले नियन्त्रण गर्छ, र त्यो सेटिङ पुराना systemd संस्करणहरूमा छैन। त्यसको वरिपरि डिजाइन गर्नुअघि स्थापित संस्करण जाँच्नुहोस्, किनकि पुरानो होस्टले तपाईं पढिरहेको कागजातभन्दा फरक व्यवहार गर्छ।
दुई मान महत्त्वपूर्ण छन्। एउटाले networkd कन्फिगरेसनमा घोषित नगरिएका नियमहरू हटाइने वा नहुने निर्णय गर्छ, र अर्कोले मार्गहरूका लागि त्यही गर्छ। दुवै नीतिको सामग्री नभई मालिकत्वसँग सम्बन्धित छन्, र दुवै हालका संस्करणहरूमा पूर्वनिर्धारित रूपमा कडा व्यवहार रोज्छन्। तिनीहरूलाई विश्वव्यापी रूपमा बन्द गर्दा हरेक बाहिरी नियम जीवित रहन्छ, जुन एउटा चाहिएको VPN नीति घोषणा गर्नुभन्दा धेरै फराकिलो निर्णय हो।
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
त्यो grep ले तपाईंलाई स्थानीय रूपमा के सेट छ र विक्रेताको पूर्वनिर्धारित के हो भन्ने बताउँछ। अनुपस्थिति पनि सूचना हो, किनकि यसको अर्थ कम्पाइल गरिएको पूर्वनिर्धारित लागू हुन्छ। पूर्वनिर्धारित आफ्नो टिप्पणीमा लेख्नुहोस् ताकि अर्को व्यक्तिले त्यो फेरि पत्ता लगाउनु नपरोस्।
नियम र त्यसले देखाउने तालिका घोषणा गर्नुहोस्
.network फाइलमा भएको नियमले तालिकाको नाम दिन्छ, र नामले यत्ति मात्र गर्छ। त्यसले त्यो तालिकाभित्रका मार्गहरू बनाउँदैन र ती अर्थपूर्ण छन् कि छैनन् जाँच्दैन। मार्गबिना नियम घोषणा गर्दा ट्राफिक मिलाएर पछि फ्याँक्ने नीति बन्छ।
मार्गहरू त्यही फाइलमा घोषणा गर्नुहोस्, पुग्न सकिने अर्को हप र सही तालिकासहित। घोषित नियममा प्राथमिकता राख्नुहोस् ताकि क्रमबद्ध सूचीमा तपाईंले अपेक्षा गरेको ठाउँमा त्यो बसोस्। गलत तालिकामा समयभन्दा अघि पुग्ने नियमले सुधार्न खोजेको सेवाभन्दा बढी ट्राफिक बदल्छ। तलको टुक्रालाई पूरा फाइल नभई आकारका रूपमा पढ्नुहोस्, किनकि इन्टरफेसको मालिकत्व र जडानको बाँकी भाग अझै हुनुपर्छ।
[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000
[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100
त्यसपछि फेरि लोड गर्नुहोस् र फाइलको सट्टा कर्नेलको अवस्था पढ्नुहोस्। सफा रूपमा पार्स भएको कन्फिगरेसनले पनि तपाईंले नचाहेको नियम बनाउन सक्छ, र दुई दृश्य घोषणा पूरा भएको बेलामा मात्र मिल्छन्।
इन्टरफेसका लागि एउटै मालिक छान्नुहोस्
एउटै सुरुङमा दुई म्यानेजर दुवैमा बगजस्तो देखिने झगडा उत्पन्न गर्छन्। अहिलेको wg-quick सेटअप networkd मा आयात गर्नु थप होइन, स्थानान्तरण हो, र दुवै चलाउँदा इन्टरफेस र त्यसका नियम दुई मालिकको अधीनमा रहन्छन्।
स्थानान्तरण एकै पटकमा गर्नुहोस्: पुरानो युनिट रोक्नुहोस्, अक्षम गर्नुहोस्, networkd मा इन्टरफेस र त्यसका मार्ग घोषणा गर्नुहोस्, त्यसपछि फेरि लोड गर्नुहोस्। पुरानो युनिट बुटमा फर्किन नसक्ने जाँच्नुहोस्। रिबुटपछि फेरि सक्रिय हुने बाँकी युनिटले भर्खरै घोषणा गरेको अवस्थामाथि लेख्छ। नयाँले एउटा पुनः जडान सहन नसकेसम्म पुरानो कन्फिगरेसन फाइल राख्नुहोस्, त्यसपछि त्यसलाई अवकाश दिनुहोस्।
चिन्हको मालिकत्वलाई पनि त्यत्तिकै हेरचाह चाहिन्छ: यदि नियम फायरवाल चिन्हसँग मिल्छ भने कसैले त्यो चिन्ह सेट गर्नुपर्छ। कसैले सेट नगर्ने चिन्हलाई सन्दर्भ गर्ने नियम जानाजान गरिएको जस्तो देखिने मृत कन्फिगरेसन हो।
जीवनचक्रका घटनाहरूको अभ्यास गर्नुहोस्
कन्फिगरेसन घटनाहरूभरिको व्यवहारजत्तिकै राम्रो हुन्छ। लिङ्क तल झार्नुहोस्, माथि ल्याउनुहोस्, सेवा पुनः सुरु गर्नुहोस् र ठेगाना नवीकरण गर्नुहोस्। प्रत्येकपछि नियमहरूको सूची र तालिकाको सामग्री पढ्नुहोस्।
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
अभीष्ट नतिजा भनेको त्यही मालिकत्व भएको नीति फेरि बन्नु र पुरानो अवस्था अवकाश हुनु हो, जुन प्रत्येक पुनः जडानपछि शेल नियम फेरि थप्नुभन्दा बढी टिकाउ हुन्छ। परिवर्तन-अभिलेखमा नियमको मालिक फाइल र त्यसलाई समर्थन गर्ने संस्करण उल्लेख गर्ने एक पङ्क्ति राख्नुहोस्। तब अर्को इन्जिनियरले शेल इतिहास खनेर नीति भेट्टाउन सक्छ। जसको कोही मालिक छैन त्यो नियम फेरि हराउने नियम हो।