Howto सेटअप एक `veth` आभासी नेटवर्क


26

मैं तीन वर्चुअल नेटवर्क इंटरफेस ( veth) सेटअप करना चाहता हूं, जो एक-दूसरे के साथ संवाद कर सकें। तीन नोड क्लस्टर का अनुकरण करने के लिए, प्रत्येक प्रोग्राम तब एक vethइंटरफ़ेस से जुड़ता है। यदि संभव हो तो मैं इसे LXC के बिना करना चाहता हूं।

मैंने प्रयोग करने की कोशिश की:

  • तीन vethजोड़े बनाए गए :sudo ip link add type veth
  • एक पुल बनाया sudo brctl addbr br0
  • पुल में प्रत्येक जोड़ी में से एक जोड़ा गया:
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • इंटरफेस कॉन्फ़िगर किया गया है:
    • sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
    • sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
    • sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up

फिर मैंने सत्यापित किया कि क्या काम कर रहा है: ping -I veth0 10.0.0.202लेकिन यह नहीं है :(

मैं करने के लिए IP पते जोड़ veth1, veth3, veth5और br010.0.1.x / 24 रेंज में इंटरफेस। लेकिन वह मदद नहीं करता है।

कोई विचार? या एक मार्गदर्शक, सभी मुझे पता है कि एलएक्ससी के साथ इसका उपयोग कैसे करें। या मैं ऐसा कुछ करने की कोशिश कर रहा हूं जो संभव नहीं है?


है br0ही ऊपर?
विशाल

हाँ, यह ऊपर है। इसे
पशु

जवाबों:


31

काम करने के लिए, टनल के एक छोर को दूसरे इंटरफ़ेस से जोड़ा जाना चाहिए। चूँकि आप इस सभी आभासी को रखना चाहते हैं, आप एक पुल प्रकार वर्चुअल इंटरफ़ेस के साथ, vm1 सुरंग के vm1 छोर (vm2 सुरंग का दूसरा छोर है) को पुल कह सकते हैं। अब आप brm2 और vm2 (10.0.0.1 और 10.0.0.2, क्रमशः) को IP पते देते हैं, IPv4 को माध्यम से अग्रेषित करते हुए सक्षम करते हैं

echo 1 > /proc/sys/net/ipv4/ip_forward

सभी इंटरफेस लाएँ, और कर्नेल को निर्देश दें कि आईपी एड्रेस 10.0.0.0/24 तक कैसे पहुँचा जाए। बस इतना ही।

यदि आप अधिक जोड़े बनाना चाहते हैं, तो अलग-अलग सबनेट के साथ नीचे दिए चरणों को दोहराएं, उदाहरण के लिए 10.0.1.0/24, 10.0.2.0/24, और इसी तरह। चूंकि आपने IPv4 को अग्रेषित करने में सक्षम किया है और कर्नेल राउटिंग टेबल के लिए उपयुक्त मार्ग जोड़े हैं, वे तुरंत एक दूसरे से बात कर पाएंगे।

यह भी याद रखें कि आपके द्वारा उपयोग किए जा रहे अधिकांश कमांड (brctl, ifconfig, ...) अप्रचलित हैं: iproute2 सूट में यह सब करने के लिए कमांड हैं, नीचे आईपी कमांड के मेरे उपयोग को देखें ।

यह प्रकार वेथ के इंटरफेस के उपयोग के लिए कमांड का एक सही क्रम है :

पहले सभी आवश्यक इंटरफेस बनाएं,

ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge

ध्यान दें कि हम brm और vm2 को नहीं लाए हैं क्योंकि हमें उन्हें IP पते निर्दिष्ट करने हैं, लेकिन हमने tmm और vm1 को लाया, जिन्हें ब्रिज brm में शामिल करना आवश्यक है। अब ब्रिजम को इंटरफेस टेप और वीएम 1 को गुलाम करें,

ip link set tapm master brm
ip link set vm1 master brm

अब पुल और शेष वेथ इंटरफ़ेस vm2 के पते दें,

ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2

अब vm2 और brm को लाएं,

ip link set brm up
ip link set vm2 up

रूट को सबनेट 10.0.0.0/24 में जोड़ने की कोई आवश्यकता नहीं है, यह स्पष्ट रूप से उत्पन्न होता है, आप आईपी ​​रूट शो के साथ जांच कर सकते हैं । इसका परिणाम यह होगा

ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms

आप इसे पीछे से भी कर सकते हैं, अर्थात vm2 से वापस brm तक:

ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

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

ip netns add nnsm

तब हम vm2 को इसमें स्थानांतरित करते हैं,

ip link set vm2 netns nnsm 

हम एक लो इंटरफेस (बिल्कुल आवश्यक) के साथ नए नेटवर्क के नाम स्थान का समर्थन करते हैं,

ip netns exec nnsm  ip link set dev lo up

हम मुख्य मशीन में अनुमति देते हैं,

iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(यदि आप eth0 के माध्यम से इंटरनेट से जुड़े हैं , तो तदनुसार बदलें), नए नेटवर्क नामस्थान में एक शेल शुरू करें,

ip netns exec nnsm xterm & 

और अब, यदि आप नए xterm में लिखना शुरू करते हैं, तो आप पाएंगे कि आप एक अलग वर्चुअल मशीन में हैं जिसका पता 10.0.0.2 है, लेकिन आप इंटरनेट तक पहुंच सकते हैं। इसका लाभ यह है कि नए नेटवर्क नेमस्पेस का अपना एक स्टैक है, जिसका अर्थ है, उदाहरण के लिए, आप इसमें एक वीपीएन शुरू कर सकते हैं, जबकि आपका पीसी शेष वीपीएन पर नहीं है । यह गर्भनिरोधक LXCs पर आधारित है।

संपादित करें:

मैंने एक गलती की, vm2 इंटरफ़ेस लाने से यह नीचे आता है और अपना पता साफ करता है। इस प्रकार आपको इन आदेशों को xterm के भीतर से जोड़ने की आवश्यकता है:

ip addr add 10.0.0.2/24 dev vm2
ip link set dev  vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

और अब आप xterm के भीतर से नेविगेट कर सकते हैं।

ipआदेशों भी साथ टर्म से पहले किया जा सकता है

ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1

विवरण के लिए आपका धन्यवाद। मैं केवल xterm में लो देखता हूं, vm2 इंटरफ़ेस गायब है।
रेंडर

एक बार फिर धन्यवाद। मैंने तीन xterm की स्थापना के लिए एक स्क्रिप्ट बनाई है, और एक दूसरे को पिंग कर सकते हैं :)
रेंडर

केवल एक मुद्दा .... जब मैं एक xterm में UPD प्रसारण भेजता हूं तो अन्य को 10.0.0.254 (brm) से पैकेट प्राप्त होता है। मेरी स्क्रिप्ट के लिए देखें: यहां (टिप्पणी में इसे पोस्ट नहीं किया जा सकता है)
Re

मुझे vm1 को ऊपर लाने में समस्या है :( # ip link add dev vm1 type veth peer name vm2 ip: RTNETLINK उत्तर: फ़ाइल मौजूद है # आईपी लिंक सेट देव vm1 अप आईपी: SIOCGIFFLAGS: ऐसा कोई उपकरण नहीं है
परिणाम

@ MariusMatutiae मुझे कई बार कोशिश करनी पड़ी इसलिए मैं पहले आदेश से सहमत हूं लेकिन किसी तरह मेरी कॉपी पेस्ट दूसरे के लिए उचित नहीं है (Iam डिवाइस का उपयोग कर minicom) तो संक्षेप में मैंने सुझाव दिया। मुझे लगता है कि मेरे पास iproute2 पैकेज नहीं है।
परिणामस्वरुप

0

यहाँ एक 5 नोड पुल सेटअप है जो मैं उस काम का उपयोग करता हूं। आपको NodeX इंटरफेस पर पते असाइन करने के लिए ifconfig का उपयोग करने में सक्षम होना चाहिए

ip link add dev Node1s type veth peer name Node1
ip link add dev Node2s type veth peer name Node2
ip link add dev Node3s type veth peer name Node3
ip link add dev Node4s type veth peer name Node4
ip link add dev Node5s type veth peer name Node5

ip link set Node1 up
ip link set Node2 up
ip link set Node3 up
ip link set Node4 up
ip link set Node5 up

ip link set Node1s up
ip link set Node2s up
ip link set Node3s up
ip link set Node4s up
ip link set Node5s up

brctl addbr Br
ifconfig Br up

brctl addif Br Node1s
brctl addif Br Node2s
brctl addif Br Node3s
brctl addif Br Node4s
brctl addif Br Node5s

और साफ करने के लिए

brctl delif Br Node1s
brctl delif Br Node2s
brctl delif Br Node3s
brctl delif Br Node4s
brctl delif Br Node5s
brctl delif Br Node1
brctl delif Br Node2
brctl delif Br Node3
brctl delif Br Node4
brctl delif Br Node5

ifconfig Br down
brctl delbr Br

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