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

इच्छित परिणाम म्हणजे तेच मालकीचे धोरण पुन्हा तयार होणे आणि जुनी स्थिती निवृत्त होणे, जे प्रत्येक पुन्हा कनेक्शननंतर शेल नियम पुन्हा जोडण्यापेक्षा अधिक टिकाऊ आहे। बदल-नोंदीत एक ओळ ठेवा जी नियमाची मालक फाइल आणि त्याला आधार देणारी आवृत्ती सांगते। मग पुढचा अभियंता शेल इतिहास शोधल्याशिवाय धोरण शोधू शकेल। ज्याचा कोणी मालक नाही तो नियम पुन्हा हरवणारा नियम आहे।

संबंधित लेख