पूरे आईपीवी 6/64 ब्लॉक को डेबियन पर नेटवर्क इंटरफेस में जोड़ना


15

मैंने एक इंटरफ़ेस का उपयोग करके पूरे IPv6 (/ 64) ब्लॉक को जोड़ने का प्रयास किया

ip route add local 2001:41d0:2:ad64::/64 dev lo

जैसे मेरे डेबियन सर्वर पर यहाँ वर्णित है , लेकिन मुझे कुछ याद आ रहा है।

यदि मैं उदाहरण के लिए 2001:41d0:2:ad64::feस्थानीय रूप से पिंग करता हूं तो सब कुछ ठीक काम करता है, लेकिन अगर मैं रिमोट मशीन से कोशिश करता हूं तो यह काम नहीं करता है। मैंने तब eth0 पर मार्ग जोड़ने की कोशिश की:

ip route add local 2001::41d0:2:ad64::/64 dev eth0

अब मैं स्थानीय रूप से कोई भी उदाहरण नहीं दे सकता!

जब से मुझे कुछ याद आ रहा है, मैं थोड़ा सा खो गया हूं, लेकिन मुझे इसका जवाब नहीं मिल रहा है।

संक्षिप्त रूप से: मैं 2001:41d0:2:ad64::/64eth0 के लिए बाध्य होना चाहता हूं ताकि प्रत्येक IP जो इस ब्लॉक से युक्त है वह मेरी मशीन पर इंटरनेट से उपलब्ध होगी।

मुझे उम्मीद है कि कोई मुझे सही तरीके से बता सकता है। अग्रिम में धन्यवाद।

गाइड आईएसपी द्वारा प्रदान की मुझे explictly इंटरफ़ेस करने के लिए प्रत्येक आईपीवी 6 को जोड़ने के लिए की आवश्यकता है। मैं चाहता हूं कि यह निहित हो।

वर्किंग कॉन्फ़िगरेशन विथ आइपी एड्रेस बाइंडिंग

/ Etc / नेटवर्क / इंटरफेस:

auto eth0
iface eth0 inet static
        address my.ip.v4
        netmask 255.255.255.0
        network my.network.address.ip
        broadcast my.broadcast.address.ip
        gateway my.gateway.ip

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff
        up ip addr add 2001:41d0:2:ad64::1/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::1/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::2/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::2/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::3/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::3/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::4/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::4/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::5/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::5/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::6/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::6/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::7/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::7/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::8/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::8/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::9/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::9/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::a/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::a/64 dev eth0

समाधान # 1 प्रयास करें

जैसा कि @kasperd ने सुझाव दिया था, मैंने स्थानीय मार्ग को फिर से उपयोग करने की कोशिश की।

मेरे / etc / नेटवर्क / इंटरफेस की सामग्री

auto lo
iface lo inet loopback
    post-up ip route add local 2001:41d0:2:ad64::/64 dev lo
    pre-down ip route del local 2001:41d0:2:ad64::/64 dev lo

auto eth0
iface eth0 inet static
        # <snip of ipv4 config>

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff

स्थानीय रूटिंग टेबल:

# ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:41d0:2:ad64::fe dev lo  proto none  metric 0
local 2001:41d0:2:ad64::/64 dev lo  metric 1024
local fe80::225:90ff:fe06:6bbe dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256

आउटपुट traceroute(मेरा स्थानीय होम पीसी):

  1    <1 ms    <1 ms    <1 ms  fritz.box [xxx]

  2    20 ms    21 ms    24 ms  2002:c058:6301::1
  3    21 ms    22 ms    24 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    44 ms    31 ms    40 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6     *        *       35 ms  ams-5-6k.nl.eu [2001:41d0::8d1]
  7    37 ms    39 ms    36 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    37 ms    70 ms    36 ms  chi-3-4m.il.us [2001:41d0::176]
  9  Zielhost nicht erreichbar.

Ablaufverfolgung beendet.

traceroute6 सर्वर पर:

traceroute to 2001:41d0:2:ad64::23 (2001:41d0:2:ad64::23), 30 hops max, 80 byte packets
 1  2001:41d0:2:ad64::a (2001:41d0:2:ad64::a)  0.028 ms  0.009 ms  0.008 ms

ping6 सर्वर पर:

PING 2001:41d0:2:ad64::23(2001:41d0:2:ad64::23) 56 data bytes
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 2001:41d0:2:ad64:23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.029/0.043/0.057/0.014 ms

tcpdump आउटपुट (दूरस्थ सर्वर पर पिंगिंग और ट्रैसरआउट करते समय):

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

tracert प्रवेश द्वार के लिए:

Routenverfolgung zu vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff] über maximal 3
0 Abschnitte:

  1    <1 ms    <1 ms    <1 ms  fritz.box [2002:5476:1b4c:0:c225:6ff:fe40:b2b0]

  2    23 ms    22 ms    26 ms  2002:c058:6301::1
  3    24 ms    40 ms    23 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    28 ms    37 ms    39 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6    38 ms    33 ms     *     ams-5-6k.nl.eu [2001:41d0::8d1]
  7    36 ms    39 ms    38 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    36 ms    35 ms    35 ms  vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff]

Ablaufverfolgung beendet.

ping प्रवेश द्वार के लिए:

Ping wird ausgeführt für 2001:41d0:2:adff:ff:ff:ff:ff mit 32 Bytes Daten:
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=36ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=34ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=38ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=57ms

Ping-Statistik für 2001:41d0:2:adff:ff:ff:ff:ff:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 34ms, Maximum = 57ms, Mittelwert = 41ms

तो यह अभी भी स्थानीय रूप से (सर्वर) काम कर रहा है लेकिन रिमोट (मेरा पीसी) से नहीं।


तो क्या आपने रिमोट मशीन से ट्रैसरआउट की कोशिश की है? ट्रेस कहां विफल होता है?
1

यदि सभी होस्ट समान नेटवर्क में हैं, तो आपके पास कोई मार्ग नहीं होना चाहिए।
Spack

आपके दूसरे ip routeकमांड में IPv6 एड्रेस में एक टाइपो है।
माइकल हैम्पटन

@ पैक मैं eth0 चाहता हूँ कि एक पूरे ipv6 / 64 उपसर्ग (आने वाले ट्रैफ़िक), @ माइकल-हैम्पटन को सुनने के लिए तय किया जाए, यह प्रश्न टाइप करते समय बस, @Zoredache ISPs गेटवे पर विफल हो जाता है 2001:41d0:2:adff:ff:ff:ff:ffउसके बाद यह बस टाइमआउट हो जाएगा।
हिकारू-शिंदो

मैंने पूर्व में जो शोध किया है, उससे यह संभव नहीं है। स्थानीय रूप से काम करने का कारण यह है कि आपकी रूटिंग टेबल को पता है कि पैकेट को कहां रूट करना है। यदि आपने इस उपसर्ग को अपने राउटर में एक स्थिर मार्ग के रूप में जोड़ा है, तो आपको LAN क्लाइंट दिखाई देंगे।
नाथन सी।

जवाबों:


13

मुझे अतीत में कुछ इसी तरह की जरूरत है। मैंने पाया कि इस काम को करने के लिए तीन चरणों की आवश्यकता है:

  • आपको होस्ट के लिए एक उपसर्ग रूट करने की आवश्यकता है
  • आपको होस्ट पर एक स्थानीय मार्ग की आवश्यकता है
  • अनुप्रयोगों को सॉकेट्स पर IP_FREEBINDया IP_TRANSPARENTविकल्प सेट करने की आवश्यकता होती है

होस्ट के लिए उपसर्ग प्राप्त करने का उचित तरीका आपके प्रदाता से संपर्क करना शामिल है, यदि वे पहले से ही आपको एक प्रदान नहीं करते हैं। उनके पास एक डीएचसीपीवी 6 सर्वर हो सकता है, जो आपके लिए एक उपसर्ग प्रस्तुत कर सकता है, यदि आप इसे सही डीएचसीपीवी 6 अनुरोध भेजते हैं।

यदि एक वास्तविक रूट किया हुआ उपसर्ग आपके लिए प्राप्त करने के लिए किसी कारण से असंभव है, लेकिन आपके पास अपने किसी नेटवर्क इंटरफेस पर उपलब्ध लिंक उपसर्ग से जितने पते हैं, उतने उपयोग करने के लिए आपके पास पहुंच है, तो आप उस हिस्से को एक रूट किए गए उपसर्ग द्वारा बदल सकते हैं उस रेंज में प्रत्येक IPv6 पते के लिए पड़ोसी खोज अनुरोधों का एक डेमॉन जवाब है।

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

ऐसा लगता है कि आपको पहले से ही स्थानीय मार्ग काम कर रहा है। जैसा कि आपने देखा, इसे loकाम करने के लिए इंटरफ़ेस को सौंपा जाना चाहिए ।

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

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));

मुझे ISP द्वारा अपने सर्वर पर रूट किए गए एक स्थिर उपसर्ग मिला है (वे DHCP प्रदान नहीं करते हैं। न तो IPv4 और न ही IPv6 के लिए)। मैं चाहता हूं कि इस / 64 ब्लॉक में सभी IPv6 बाहर से पहुंच सकें (मेरे अधिकांश एप्लिकेशन बाइंडिंग :: के लिए उपलब्ध हैं, जो गलत होने पर सभी उपलब्ध पते होने चाहिए)। अब मैं चाहता हूं कि ये सभी IP eth0 पर उपलब्ध हों, इसलिए यदि मैं किसी भी IPv6 को उस ब्लॉक में कनेक्ट करने का प्रयास करता हूं, तो निर्दिष्ट पोर्ट को सुनने वाला कोई भी एप्लिकेशन जवाब देने में सक्षम होगा (उदाहरण के लिए प्रत्येक आईपी सही ढंग से पिंग का जवाब देना चाहिए)।
हिकारू-शिंदो

यदि आप :: :: IP_TRANSPARENT विकल्प को बाँधते हैं, तो इसकी आवश्यकता नहीं है। मेरे सर्वर और स्थान में स्थानीय मार्ग के लिए उपसर्ग के साथ, मैं :: से बाँध सकता हूँ और उस सीमा में IPv6 पतों के लिए किए गए कनेक्शन प्राप्त कर सकता हूँ। ping6 भी काम करता है। मैं इसका परीक्षण उबंटू 12.04 पर कर रहा हूं, लेकिन मुझे उम्मीद है कि यह किसी भी हाल के कर्नेल पर अन्य वितरणों पर भी काम करेगा। यदि यह आपके लिए काम नहीं कर रहा है, तो मेरा सुझाव है कि आप नेटवर्क ट्रैफ़िक पर एक नज़र डालेंtcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
kasperd

यह अभी भी काम नहीं कर रहा है। मैंने अपने प्रश्न में कॉन्फ़िगरेशन पर कुछ और जानकारी प्रदान की, शायद यह मदद करता है।
हिकारू-शिंदो

आप कहते हैं कि आपके पास / 64 सर्वर पर रूट किया गया है। लेकिन होस्टिंग प्रदाता के गाइड में उदाहरणों में केवल एक लिंक उपसर्ग है और कोई रूट किए गए उपसर्ग नहीं है। और tcpdump और traceroute6 आउटपुट ऐसा लगता है जैसे पते सर्वर पर रूट नहीं किए गए हैं। क्या आपने प्रदाता से प्रलेखन का उपयोग करके एक एकल IPv6 पता प्राप्त करने में कामयाबी हासिल की है?
कास्परड

1
@ आर्य जब मुझे इस तरह की जरूरत पड़ी तो मैंने कमांड में डाल दिया/etc/rc.local
कैस्पर

2

अभी 2019 साल है। एक शब्द: ip_nonlocal_bind (4.3 कर्नेल के रूप में मुझे पता है)।

Ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1 का उपयोग करें, अंतिम एक आपको किसी भी IPv6 पते (इस मामले में कोई IP_FREEBIND की आवश्यकता नहीं) से बांधने की अनुमति देता है।

आप ऐसा किया लगता है:

ip add add local 2001::41d0:2:ad64::/64 dev lo
ip route add local 2001::41d0:2:ad64::/64 dev eth0
sysctl  net.ipv6.ip_nonlocal_bind = 1

ndppd.conf जैसा दिखेगा:

route-ttl 30000

proxy eth0 {

   router no

   timeout 500
   ttl 30000
   rule 2001::41d0:2:ad64::/64{
       static
   }
}

ndppd को चलाएं और अब आप किसी भी पते पर (अतिरिक्त ब्लॉक के) को बाँध सकते हैं और इसे उसी तरह से उपयोग कर सकते हैं जैसे कि इसे जोड़ा गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.