मी एका Debian गेटवेवर net.ipv6.conf.all.forwarding=1 सेट केला जेणेकरून ते VPN क्लायंटचा रहदारी पुढे पाठवू शकेल, आणि सुमारे अर्ध्या तासानंतर मशीनकडे कोणताही IPv6 डीफॉल्ट मार्ग शिल्लक नव्हता। वरचा राउटर सुरू होता, link-local शेजारी अजूनही उत्तर देत होता, आणि अपलिंककडे अजूनही त्याचा जागतिक पत्ता होता। जे थांबले ते म्हणजे कर्नलची त्या इंटरफेसवर राउटर जाहिराती स्वीकारत राहण्याची तयारी। sysctl लिहिल्याच्या क्षणी मार्ग गायब झाला नाही; तो तेव्हा गायब झाला जेव्हा RA मधून शिकलेल्या डीफॉल्ट मार्गाचे आयुष्य संपले आणि कुणीही तो नव्याने मिळवला नाही।

पहिल्या दृष्टीक्षेपात काहीही तुटलेले दिसले नाही। फॉरवर्डिंग चालू होती, जुना मार्ग कॅशमध्ये असताना क्लायंट जात होते, आणि बिघाड तो घडवणाऱ्या बदलापेक्षा उशिरा आला। हाच उशीर म्हणून दोष वरच्या बाजूवर किंवा कधीही सहभागी नसलेल्या फायरवॉल नियमावर टाकला जातो।

कोणत्याही sysctl ला हात लावण्यापूर्वी मार्गांचा तक्ता वाचा

ip -6 route show default ने सुरुवात करा आणि फक्त गेटवे नाही तर गुणधर्म वाचा। RA मधून शिकलेला डीफॉल्ट मार्ग proto ra ने चिन्हांकित असतो, प्राधान्य बाळगतो आणि expires ची उलटी गणना दाखवतो। हाताने जोडलेल्या मार्गात यांपैकी काहीही नसते, आणि हाच फरक सांगतो की मार्गाचा मालक कोणती यंत्रणा आहे।

$ ip -6 route show default
default via fe80::1 dev eth0 proto ra metric 1024 expires 1432sec hoplimit 64 pref medium

मग पत्ता पहा: ip -6 addr show dev eth0। तासांमध्ये मोजलेले प्राधान्य आणि वैध आयुष्य असलेला जागतिक पत्ता, राउटरचे आयुष्य मिनिटांमध्ये मोजले जाणाऱ्या डीफॉल्ट मार्गापेक्षा जास्त टिकेल। पत्ता आहे पण डीफॉल्ट मार्ग नाही, ही जाहिरात समस्येची खूण आहे। पत्ताही नसेल तर प्रथम लिंक, प्रीफिक्स माहिती किंवा दुहेरी पत्ते ओळख यामागे लागावे लागेल।

फॉरवर्डिंग RA ची प्रक्रिया का बंद करते

RA हा 134 प्रकारचा ICMPv6 पॅकेट आहे, जो link-local स्रोताकडून 255 हॉप मर्यादेसह पाठवला जातो। कर्नल त्याचा वापर करण्यापूर्वी इंटरफेसचे accept_ra पाहतो। डीफॉल्ट मूल्य 1 आहे, आणि 1 म्हणजे होय नाही। त्याचा अर्थ: हा होस्ट फॉरवर्ड करत नसेल तोपर्यंतच स्वीकार। forwarding=1 सेट करा आणि ती अट राहत नाही, म्हणून जाहिरातीतला कोणताही प्रीफिक्स किंवा डीफॉल्ट राउटर विचारात घेण्यापूर्वीच ती टाकून दिली जाते।

तीन मूल्ये आहेत, आणि फॉरवर्डिंगमधून फक्त तिसरे टिकते:

accept_raforwarding=0forwarding=1
0ignoredignored
1 (default)acceptedignored
2acceptedaccepted

आणखी दोन फ्लॅग ठरवतात की प्रत्यक्षात काय बसवले जाते। accept_ra_defrtr नियंत्रित करतो की जाहिरातीतला डीफॉल्ट राउटर मार्ग होतो का, आणि accept_ra_pinfo नियंत्रित करतो की प्रीफिक्स माहिती पत्ता संरचनेसाठी वापरली जाते का। accept_ra_defrtr बंद करणे हा फॉरवर्डिंग होस्टवर डीफॉल्ट मार्ग न शिकता SLAAC पत्ते ठेवण्याचा नेहमीचा मार्ग आहे। हा accept_ra पेक्षा वेगळा लीव्हर आहे, आणि पत्ते हवे पण मार्ग नको तेव्हा हाच वापरला जातो। कर्नलचा IP sysctl संदर्भ तिन्हींची यादी देतो।

तीन आदेशांनी खात्री करा

प्रथम, लोड झाली असे वाटणारी फाईल नव्हे तर सध्या चालू असलेली मूल्ये वाचा:

sysctl net.ipv6.conf.eth0.forwarding net.ipv6.conf.all.forwarding \
       net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtr

दुसरे, जाहिराती अजूनही येत आहेत हे सिद्ध करा। ICMPv6 प्रकाराच्या बाइटवर गाळणी पुरते, आणि ते शेजारी शोधाच्या रहदारीची भिंत वाचण्यापासून वाचवते:

tcpdump -ni eth0 'icmp6 and ip6[40] == 134'

काही मिनिटांत काहीही दिसले नाही तर accept_ra तुमची समस्या नाही। वरच्या बाजूने जाहिरात थांबवली, मार्गात काहीतरी ICMPv6 गाळत आहे, किंवा तो इंटरफेस खरोखर तुम्ही विचार करत असलेल्या विभागात नाही। तिसरे, स्वतः एक जाहिरात मागा आणि तिची क्षेत्रे वाचा:

rdisc6 eth0

rdisc6 Debian आणि Ubuntu वर ndisc6 पॅकेजमध्ये येतो। आउटपुटमध्ये दुसरे काहीही बदलण्यापूर्वी राउटर आयुष्य आणि प्राधान्य पहा। राउटर आयुष्य 0 असलेली जाहिरात डीफॉल्ट राउटर काढण्याचा आदेश आहे, आणि accept_ra चे कोणतेही मूल्य त्याला वापरण्यायोग्य मार्ग करत नाही। अशाच पद्धतीने ब्रिज मोडमधला वरचा CPEही पकडता येतो, जो प्रीफिक्स वाटतो पण स्वतःला कधीही राउटर म्हणून सादर करत नाही।

अपलिंकलाच एकमेव परवानगी देणारा इंटरफेस करा

वरच्या बाजूने डीफॉल्ट राउटर व्हायला हवे असेल, तर फॉरवर्डिंग असूनही तिथेच जाहिराती स्वीकारा, आणि दुसरीकडे नाही:

# /etc/sysctl.d/60-ipv6-router.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.accept_ra_defrtr = 1

मर्यादा ठरवणे महत्त्वाचे आहे कारण Linux मध्ये IPv6 फॉरवर्डिंग हा एक जागतिक स्विच आहे, प्रत्येक लिंकसाठी एक नाही। net.ipv6.conf.wg0.forwarding मध्ये 1 लिहा आणि नंतर net.ipv6.conf.all.forwarding वाचा: जागतिक मूल्य उलटते आणि प्रत्येक इंटरफेस फॉरवर्ड करू लागतो। तुम्ही बोगद्यावर राउटर आणि LAN वर सामान्य होस्ट एकाच वेळी असू शकत नाही। जे मर्यादित करू शकता ते म्हणजे स्वीकृती। accept_ra=2 अपलिंकवर ठेवा आणि बोगदा व LAN इंटरफेस 1 किंवा 0 वर सोडा, जेणेकरून बोगद्यातून आलेली भरकटलेली जाहिरात त्याच्याकडे निर्देश करणारा डीफॉल्ट मार्ग बसवू शकणार नाही।

तात्पुरता sysctl -w पुढच्या बूटपर्यंत टिकणार नाही, आणि systemd-networkd व NetworkManager दोन्ही ही मूल्ये स्वतःच्या संरचनेतून लिहितात। networkd मध्ये अपलिंकच्या .network फाईलमध्ये IPv6Forwarding=yes आणि IPv6AcceptRA=yes सेट करा; networkd कर्नलच्याच कारणामुळे IPv6Forwarding ला जागतिक म्हणतो। NetworkManager मध्ये अपलिंकवरचा ipv6.method=auto accept_ra चे मूल्य चालवतो, म्हणून पहिल्या तपासणीवर विश्वास ठेवण्याऐवजी nmcli connection up नंतर sysctl पुन्हा वाचा।

स्थिर पर्याय ip -6 route add default via fe80::1 dev eth0 खरोखर चालतो, आणि वरच्या राउटरकडे स्थिर link-local पत्ता असेल तर तो वाजवी उत्तर आहे। तुम्ही काय सोडत आहात हे स्पष्ट असू द्या। स्थिर डीफॉल्ट मार्ग कधीही नव्याने मिळत नाही आणि कधीही मागे घेतला जात नाही, म्हणून वरची बाजू बदलल्यावरही तो मृत शेजाऱ्याकडे निर्देश करत राहतो। RA चा मार्ग सुरक्षितपणे अपयशी होतो; स्थिर मात्र शांतपणे अपयशी होतो।

फॉरवर्ड झालेला पॅकेट तपासा, गेटवेचा स्वतःचा नाही

गेटवेचे स्वतःचे पिंग कोणताही क्लायंट वापरू शकत नाही अशा मार्गावर यशस्वी होऊ शकतात, आणि गेटवे स्रोत असल्यानेही यशस्वी होऊ शकतात। जोडलेल्या क्लायंटवरून तपासा, मग गेटवेला विचारा की त्या क्लायंटच्या पत्त्यासाठी तो काय करेल:

# on the VPN client
ping -6 -c 3 2001:4860:4860::8888

# on the gateway, using a client address
ip -6 route get 2001:4860:4860::8888 from fd42:20::2

मग एक राउटर आयुष्य थांबा आणि पुन्हा पहा। हवी असलेली स्थिर स्थिती म्हणजे proto ra ने चिन्हांकित डीफॉल्ट मार्ग ज्याचे expires मूल्य सतत रीसेट होते, सोबत all.forwarding=1। expires फक्त उलटी गणना करत असेल तर जाहिराती अजूनही कुठेतरी टाकून दिल्या जात आहेत, आणि नेहमीचा दोषी म्हणजे बूटच्या वेळचा sysctl आधीच चालल्यानंतर accept_ra पुन्हा लिहिणारा नेटवर्क व्यवस्थापक।

हे बंद करण्यापूर्वी चार गोष्टी खात्री करा: डीफॉल्ट मार्ग proto ra आहे आणि नव्याने मिळत आहे, accept_ra=2 फक्त अपलिंकवर लागू आहे, रीबूटनंतर आणि व्यवस्थापक रीस्टार्ट केल्यानंतरही फॉरवर्डिंग 1 आहे, आणि IPv6 पिंग क्लायंट पूर्ण करतो, गेटवे नाही। निरोगी मार्ग असूनही क्लायंट अपयशी झाला तर पुढचा संशय परतीचा मार्ग किंवा वरचा फायरवॉल आहे, जाहिरात नाही।

संबंधित लेख