ओपनवीपीएन सुरंग के माध्यम से सार्वजनिक आईपीवी 6 यातायात को रूटिंग


13

मैं जो करने की कोशिश कर रहा हूं वह एक vpn सुरंग के माध्यम से IPv6 ट्रैफ़िक को रूट करने के लिए है। इस तरह, मुझे IPv6 को IPv6 का समर्थन नहीं करने वाले नेटवर्क में उपयोग करने में सक्षम होना चाहिए।

मेरे पास एक VPS है जिसे IPv6 ब्लॉक सौंपा गया है। इस ब्लॉक का एक हिस्सा मैं ओपेनवोन ग्राहकों के लिए उपयोग करना चाहता हूं। मेरे मन में जो सीमा थी वह थी 2001:db8::111:800:0/112(उपसर्ग अज्ञात है), क्योंकि ओपनवीएनएन केवल सबनेट के रूप में / 64 और / 112 का समर्थन करता है।

सुरंग के माध्यम से आईपीवी 6 पहले से ही काम कर रहा है, क्लाइंट से, मैं सर्वर ( 2001:db8::111:800:1) को पिंग कर सकता हूं , और सर्वर ( 2001:db8::111:100:100और 2001:db8:216:3dfa:f1d4:81c0) पर इंटरफेस भी कर सकता हूं ।

हालांकि, जब क्लाइंट से google.com को पिंग करने की कोशिश की जाती है, तो मुझे कोई प्रतिक्रिया नहीं मिलती है (पिंग टाइमआउट)। इस समस्या को डीबग करने के लिए, मैंने सर्वर पर ट्रैफ़िक कैप्चर करने के लिए tcpdump का उपयोग किया है, और मैं पिंग पैकेट को बाहर जाते हुए देख सकता हूं, लेकिन कोई जवाब वापस नहीं आ रहा है। Ip6tables में लॉग नियम जोड़ना समान दिखाता है, पैकेट बाहर जा रहा है, लेकिन अंदर कुछ भी नहीं आ रहा है।

मैंने एक ऑनलाइन ट्रेसरआउट टूल का उपयोग किया, जिसे मेरे सर्वर से टाइमआउट मिलता है। मैंने इंटरफ़ेस पर सीधे आईपी को सेट करने का भी प्रयास किया, जिसके परिणामस्वरूप आईपी ( 2001:db8::111:800:1001) पहुंच योग्य हो सकता है, इसलिए मुझे लगता है कि यह एक रूटिंग समस्या है।

मैं के माध्यम से ipv6 के लिए अग्रेषण सक्षम किया है /proc/sys/net/ipv6/conf/all/forwarding। ip6tables में सभी श्रृंखलाओं के लिए नीति अनुमति है।

मेरा प्रश्न यह है कि लिनक्स के लिए उस पैकेट को स्वीकार करने के लिए वास्तव में क्या आवश्यक है जो कि एक इंटरफेस के लिए असाइन नहीं किया गया है और इसे आगे रूट किया जाए? बस एक मार्ग जो मौजूद है वह पर्याप्त नहीं लगता है।

यहाँ मेरे क्लाइंट और सर्वर के लिए सेटअप है। अधिक जानकारी चाहिए तो कृपया इसे बताएं।

ग्राहक

# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1001/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 routes
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2000::/3 dev tun0  metric 1024 

सर्वर

# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic 
       valid_lft 86254sec preferred_lft 14254sec
    inet6 2001:db8::111:100:100/128 scope global 
       valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 route
2001:db8::111:100:100 dev eth0  proto kernel  metric 256 
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2001:db8::/64 dev eth0  proto kernel  metric 256  expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0  proto ra  metric 1024  expires 1594sec

संभव है कि आप तालिका POSTROUTING ... MASQUERADEमें देख रहे हैं nat। लेकिन मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं। क्या आप IPv6 ट्रैफिक को टनल बनाने की कोशिश कर रहे हैं? यदि हां, तो क्या आपके पास संबंधित सुविधाएं हैं? क्या -p ipv6IPv4 (!) नियमों में पैकेट की अनुमति है?
0xC0000022L

क्या आपके पास राउटर का आईपी कॉन्फ़िगरेशन है (eth0 पर)? क्या आप राउटर को नियंत्रित करते हैं? (क्या आप मार्ग जोड़ सकते हैं?)
ysdx

कच्चे टेबल TRACEटारगेट का उपयोग करने का प्रयास करें (शायद यहाँ इतना नहीं) ip neighbour, और ip route get। इसके अलावा, कृपया निर्दिष्ट करें कि कौन पिंग कर रहा है google.ca
पाइलोना

Google.com या goole.com को पिंग करना।?
१३'१४ को .:३३

@totti google.com, एक टाइपो था
Ikke

जवाबों:


12

आपको इस वीपीएन सबनेट के लिए अपने सर्वर का उपयोग करने के लिए अपने राउटर को बताने की आवश्यकता है: आपकी समस्या का सही समाधान ओपनवीपीएन सबनेट के लिए राउटर पर एक मार्ग जोड़ना है।

यदि आप ऐसा नहीं कर सकते क्योंकि आप राउटर को नहीं छू सकते हैं, तो एक और समाधान eth0लिंक पर क्लाइंट के लिए एनडीपी प्रॉक्सी को सेटअप करना है ।

जैसा कि आप एक VPS का उपयोग कर रहे हैं, आप शायद राउटर के लिए मार्ग नहीं जोड़ सकते हैं: आपको शायद दूसरे समाधान का उपयोग करना होगा।

सबनेट के लिए एक मार्ग जोड़ें

आपकी समस्या का सही समाधान है राउटर को बताना कि वीपीएन सबनेट को ओपनवीपीएन सर्वर के माध्यम से रूट किया जाना चाहिए (यह लिनक्स के लिए है:

ip route add 001:db8::111:800::/112 via 2001:db8::111:100:100

आपको सर्वर पर IPv6 अग्रेषण सक्षम करना होगा:

sysctl sys.net.ipv6.conf.all.forwarding=1

एनडीपी प्रॉक्सी

ऐसा लगता है कि राउटर eth0लिंक पर आपकी पूरी आईपीवी 6 रेंज भेजने के लिए कॉन्फ़िगर किया गया है : आप एनडीपी प्रॉक्सी को सेटअप कर सकते हैं।

eth0क्लाइंट से शेष इंटरनेट का उपयोग करने का प्रयास करते समय आपको अपने OpenVPN सबनेट के लिए सर्वर के एनडीपी अनुरोधों को देखना चाहिए ।

आपको IPv6 को सर्वर पर अग्रेषित करने और NDP प्रॉक्सी को सक्षम करने की आवश्यकता है:

sysctl -w net.ipv6.conf.all.proxy_ndp = 1

सबनेट एनडीपी प्रॉक्सी

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

प्रति आईपी एनडीपी प्रॉक्सी

एक अन्य उपाय वीपीएन सबनेट के प्रत्येक आईपीवी 6 के लिए एक एनडीपी प्रॉक्सी जोड़ना है:

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

यह काम करना चाहिए क्योंकि आपके पास ओपनवीपीएन सबनेट में आईपी की एक छोटी संख्या है।

OpenVPN हुक के साथ डायनेमिक एनडीपी प्रॉक्सी

NDP प्रॉक्सी डायनेमिक को जोड़ने के लिए आपको OpenVPN हुक का उपयोग करने में सक्षम होना चाहिए।

OpenVPN सर्वर कॉन्फिडेंस में हुक जोड़ें:

learn-address /etc/openvpn/learn-address

निम्नलिखित learn-addressस्क्रिप्ट के साथ:

#!/bin/sh

action="$1"
addr="$2"

case "$action" in
    add | update)
        ip neigh replace proxy "$addr" dev tun0
        ;;
    delete)
        ip neigh del proxy "$addr" dev tun0
        ;;
esac

इस धागे को देखें ।

संक्षिप्त जवाब

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

1
धन्यवाद, मैं इस पर गौर करूंगा। मैं अब समस्या को समझता हूं। ipsidixit.net/2010/03/03/24/239 में इसके बारे में अधिक विवरण हैं।
इके

मेरे पास क्लाइंट से पड़ोसी प्रॉक्सी के रूप में आईपी है। मैंने sys.net.ipv6.conf.all.proxy_ndp सक्षम किया है, लेकिन मैं अभी भी google.com को पिंग नहीं कर सकता। जब मैं सर्वर की जांच करता हूं, तो मुझे eth0 पर ndp सॉल्वैंट्स पैकेट आते हैं, लेकिन कोई विज्ञापन नहीं निकल रहा है।
इके

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