डिफ़ॉल्ट गेटवे के लिए TUN डिवाइस (C ++ बैकएंड) से ट्रैफ़िक अग्रेषित करना


10

निम्नलिखित समस्या मेरे साथ एक बड़ी समस्या का एक टुकड़ा है। अन्य सभी तत्व अब तक काम कर रहे हैं, इसलिए मैं बहुत छोटे टुकड़े का वर्णन करने की कोशिश करूंगा, जिसकी मुझे समस्या है।

मुझे एक linux मशीन मिली है, जिसके साथ tun0 (टनलिंग इंटरफ़ेस) और eth0 (चुड़ैल इंटरनेट के लिए मेरा डिफ़ॉल्ट गेटवे है) है।

लक्ष्य: मेरा लक्ष्य tun0 से आने वाले पैकेट प्राप्त करना है, और उन्हें डिफ़ॉल्ट गेटवे पर अग्रेषित करना है। तो वास्तव में काफी सरल NAT मामला है, जहां मैं tun0 के साथ इंटरनेट को "साझा" करना चाहता हूं जो भौतिक इंटरफ़ेस को विफल करता है।

ट्यून का उपयोग कर बनाया गया है

sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up

तो मेरे पास यह है और चल रहा है, मैं इसे पिंग कर सकता हूं आदि इसके अलावा, मेरे पास C ++ एप्लिकेशन है, जो इस TUN डिवाइस से जुड़ता है, इसे पढ़ सकता है और इसे लिख सकता है। (fti: यहाँ एक ट्यूटोरियल है जिसका मैंने अनुसरण किया है: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )

मैंने कुछ सही ICMP (पिंग) अनुरोध को 8.8.8.8 में बाइट सरणी में C ++ में डंप कर दिया। अब, अपने कार्यक्रम का उपयोग करके मैं इसे tun0 डिवाइस पर लिखता हूं। ICMP अनुरोध है

  • स्रोत (10.2.0.10) - इसलिए कर्नेल मार्ग को वापस जानता है (एक ही सबनेट)
  • गंतव्य (8.8.8.8) - Google का डीएनएस
  • सही चेकसम आदि (Wireshark / TShark में यह ट्यून पर सही ढंग से दिखाई देता है)

फिर, मेरे पास निम्नलिखित मार्ग हैं:

iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT

और यहाँ मैं फँस गया :( पैकेट डिफ़ॉल्ट gw को अग्रेषित नहीं करता (tshark केवल tun0 पर इसे देखता है जैसा कि मुझे प्राप्त हुआ है जो मुझे लगता है कि यह सही है)

क्या कमी है? शायद कुछ वैकल्पिक दृष्टिकोण (लेकिन यह ट्यून डिवाइस का उपयोग करके किया जाना है, और मुझे इसे आर / डब्ल्यू करने में सक्षम होना चाहिए)। अतिरिक्त जानकारी:

  • अग्रेषण सक्षम है (/ proc / sys / net / ipv4 / ip_forward)
  • 8.8.8.8 eth0 (स्थानीय से) के माध्यम से उपलब्ध है
  • डिफ़ॉल्ट गेटवे सही है (ISP से eth0 के माध्यम से)
  • मैंने rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter) को बंद करने की कोशिश की है
  • और बहुत सारे...

किसी भी संकेत के लिए अग्रिम धन्यवाद!


मुझे पता है कि यह एक साल से अधिक पुराना है, लेकिन क्या आप इसके साथ कहीं गए हैं? मुझे भी ठीक यही समस्या है।
hplbsh

जवाबों:


1

वैकल्पिक समाधान का उपयोग किया जाएगा। bridgeतो आप eth0 के साथ अपने tun0 को पा सकते हैं और tun0 पर nat या सेटिंग IP की कोई आवश्यकता नहीं है। आप eth0 की एक ही सबनेट से IPs लगाते हैं और उसी गेटवे का उपयोग कर रहे हैं जो आप अभी ग्राहकों की सुरंग इंटरफेस पर उपयोग कर रहे हैं।

एक पुल की स्थापना के लिए आदेश:

# brctl addbr br0
# brctl addif br0 eth0 tun0

www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge

Brctl का उपयोग करने के लिए आपको bridge-utilsपैकेज स्थापित करना होगा ।
यदि आपका distro उबंटू है:aptitude install bridge-utils


1

मैं हाल ही में इस समस्या में चला गया (प्रश्न में उसी लेख का उल्लेख करते हुए) और थोड़ा घूमने के बाद, मैंने पाया कि निम्नलिखित कमांड ट्यून डिवाइस के लिए पैकेटों के स्थानीय अग्रेषण को सक्षम करता है।

echo 1 > /proc/sys/net/ipv4/conf/tun0/accept_local

मुझे पता है कि यह बहुत देर हो चुकी है, मैं अभी यहां पोस्ट कर रहा हूं ताकि जो कोई भी इस मुद्दे का सामना करे, उसे किसी तरह की मदद मिल सके।

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