अतिथि और होस्ट एक दूसरे को linux-kvm और macvtap का उपयोग करके नहीं देख सकते हैं


9

मैं एक पुराने मेजबान (हार्डवेयर और ओएस दोनों) से एक नए के लिए एक kvm आभासी मशीन को स्थानांतरित कर रहा हूं।

नेटवर्किंग के लिए, पुण्य-प्रबंधक ने मुझे एक नया विकल्प प्रस्तावित किया: macvtap । यह eth0 पर एक पुल की स्थापना के लिए एक अच्छा विकल्प दिखता है।

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

समस्या यह है कि मेजबान और अतिथि एक दूसरे को नहीं देखते हैं। मैं अतिथि IP का उपयोग करके मेजबान से मेहमान तक नहीं पहुंच सकता, न ही मैं मेजबान आईपी का उपयोग करके अतिथि से मेजबान तक पहुंच सकता हूं। कोई पिंग, ssh, http, कुछ नहीं।

यहाँ route -nमेजबान से आदेश है:

$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

(गेस्ट से वही आउटपुट)।

मैं शायद मेजबान और अतिथि के बीच संचार के लिए समर्पित एक नया ट्यून / टैप इंटरफ़ेस स्थापित कर सकता था लेकिन यह थोड़ा अधिक दिखता है। क्या मेजबान और अतिथि संवाद बनाने का एक तरीका है?


Macvtap ब्रिजिंग के लिए एक वैध प्रतिस्थापन नहीं है। यदि आप ब्रिजिंग के बजाय स्विच करना चाहते हैं, तो ओपनव्सविच देखें।
user186658

जवाबों:


7

मैंने आईआरसी पर यह सवाल पूछा था और ऐसा प्रतीत होता है कि मैकवाटैप

नेटवर्क स्टैक में अतिथि ट्रैफ़िक को इसके लिए बहुत कम इंजेक्ट करता है

तब समाधान अतिथि और मेजबान के लिए एक नेटवर्क इंटरफ़ेस जोड़ने के लिए संवाद करने के लिए है, या पुराने समाधान के साथ रहना है ...


1
नेटवर्क प्रबंधक को अक्षम किए बिना होस्ट / गेस्ट इंटरफ़ेस बनाने के तरीके के बारे में कदम निर्देश यहां दिया गया है: wiki.libvirt.org/page/…
HDave

1
मैं काम करने के लिए उन निर्देशों को प्राप्त नहीं कर सका ...
HDave

4

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


1

इसका समाधान हाइपरवाइज़र पर मैकव्लन इंटरफ़ेस को कॉन्फ़िगर करने के लिए है, वास्तविक हार्डवेयर इंटरफ़ेस (बहुत महत्वपूर्ण) की तुलना में समान आईपी पते के साथ, और इसका उपयोग करने के लिए होस्ट पर रूटिंग कॉन्फ़िगर करने के लिए। Qemu / KVM में, हमेशा की तरह हार्डवेयर इंटरफ़ेस पर macvtap इंटरफ़ेस का उपयोग करें।

मेरे कॉन्फिगरेशन (192.168.1.0/24 नेटवर्क, p10p1 हार्डवेयर इंटरफेस और 192.168.1.1 गेटवे) के लिए, यह हाइपरविजर पर देता है:

ip link add link p10p1 address 00:19:d1:29:d2:58 macvlan0 type macvlan mode bridge
ip address add 192.168.1.100/24 dev macvlan0
ip link set dev macvlan0 up

ip route flush dev p10p1
ip route add default via 192.168.1.1 dev macvlan0 proto static

1

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

(यहां विशेष विन्यास डेबियन और अपस्टार्ट विशिष्ट है, लेकिन बुनियादी कदम किसी भी GNU / लिनक्स पर काम करना चाहिए)।

बूट पर macvlan एडेप्टर बनाना

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

एक निश्चित मैक सेट करना उचित है, क्योंकि अन्यथा रिबूट के बाद अपनी मशीन को पहचानने और उसे पहले की तरह ही आईपी एड्रेस असाइन करने के लिए डीएचसीपी सर्वर के लिए कोई रास्ता नहीं है।

इसलिए एक एडाप्टर बनाएं और मैक को देखें:

root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
    link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...

हाइक्ड हेक्साडेसिमल नंबर आपका मैक एड्रेस है।

अब आप एक init script बनाते हैं - जिसे नेटवर्किंग से पहले चलाना होगा - प्रत्येक स्टार्टअप को macvlan एडाप्टर बनाने के लिए। ऐसा करने का आदेश है:

ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge

इस उद्देश्य के लिए इनस्टार्ट स्क्रिप्ट का एक उदाहरण होगा:

start on starting networking

script
    ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script

बस इसे उदा में डालें /etc/init/macvlan.conf

नेटवर्क कॉन्फ़िगरेशन सेट करना

में /etc/network/interfaces, अपने भौतिक नेटवर्क एडेप्टर को मैन्युअल (लेकिन इसे ऑटो छोड़ दें) पर सेट करें और इसके पिछले कॉन्फ़िगरेशन (आमतौर पर डीएचसीपी या एक स्थिर आईपी पते) को अपने मैकवलन एडेप्टर में स्थानांतरित करें। उदाहरण के लिए:

auto eth0
iface eth0 inet manual

auto macvlan0
iface macvlan0 inet dhcp

भौतिक एडाप्टर के लिए IPv6 को अक्षम करना

अंत में, आप नहीं चाहते कि भौतिक एडेप्टर एक आईपी एड्रेस प्राप्त करे। IPv4 के लिए एडेप्टर को मैन्युअल रूप से सेट करने से वह पता प्राप्त करने से रोकता है। हालाँकि, मुझे एक कॉन्फ़िगरेशन नहीं मिला है जो कर्नेल को एडाप्टर के लिए / के लिए एक आईपीवी 6 पता प्राप्त करने / असाइन करने से रोकता है। जब यह होता है, तो यह उनके लिए मार्ग भी जोड़ता है, जिससे समस्याएं हो सकती हैं। तो सबसे अच्छा तरीका भौतिक एडाप्टर के लिए आईपीवी 6 को अक्षम करना प्रतीत होता है। आप लाइन जोड़कर ऐसा कर सकते हैं

net.ipv6.conf.eth0.disable_ipv6=1

करने के लिए /etc/sysctl.conf, में एक फ़ाइल बनाने के द्वारा /etc/sysctl.d/इस लाइन के साथ, या जोड़कर

sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

आपके init स्क्रिप्ट के लिए।

जब आप अब अपनी मशीन को रिबूट करते हैं, तो होस्ट से गेस्ट तक संचार आईपीवी 4 और आईपीवी 6 दोनों के साथ काम करना चाहिए।


ज्ञात हो, कि यदि आप इसे सेट करते समय कोई गलती करते हैं, तो आपका होस्ट रिबूट के बाद भी नेटवर्क के माध्यम से पहुंच से बाहर हो सकता है। ऐसा केवल तभी करें जब आपके पास मशीन या अन्य सुरक्षा उपायों की भौतिक पहुंच हो, ताकि आप संभावित समस्याओं को ठीक कर सकें।


1

आप कुछ इस तरह से समाप्त करना चाहते हैं:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 macvlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 macvlan0

ध्यान दें कि अंतिम कॉलम में "eth0" के बजाय "macvlan0" है।

इसे प्राप्त करने के लिए, आप 192.168.0.42 को अपने आईपी पते के रूप में मानकर इन आदेशों का उपयोग कर सकते हैं:

ip link add link eth0 macvlan0 type macvlan mode bridge
ip address add 192.168.0.42 dev macvlan0
ip link set dev macvlan0 up
ip route flush dev eth0
ip route add default via 192.168.0.1

ज्यादातर एनपीएन के समाधान के समान है। यदि आप अधिक परिष्कृत स्क्रिप्ट चाहते हैं, तो इस विषय में मेरा वेबपेज देखें ।


macvlanमॉड्यूल लोड करने के लिए मत भूलना :modprobe macvlan
mdd

0

मैंने लेज़ज़ारो ने डेबियन पर जो लिखा, उसका इस्तेमाल किया, लेकिन मैं कुछ नोट्स जोड़ना चाहता हूं।

सबसे पहले, अतिथि इंटरफ़ेस को "स्रोत डिवाइस" पर सेट किया जाना चाहिए -> "होस्ट डिवाइस eth0: macvtap"; "स्रोत मोड" -> " ब्रिज "।

दूसरा, आपके द्वारा मेरे लिए काम नहीं किया गया init स्क्रिप्ट ( ऐसा लगता है कि macvlan0 इंटरफ़ेस स्टार्टअप के दौरान बहुत देर से बनाया गया था ), इसलिए मैंने इसका उपयोग किया:

nano /etc/init.d/macvlan

जब इंटरफ़ेस पहली बार बनाया गया था, तो मैक को बदलें

#!/bin/sh
### BEGIN INIT INFO
# Provides:          macvlan
# Required-Start:    $local_fs
# Required-Stop:     
# Default-Start:     S
# Default-Stop:      
# Short-Description: Set up macvlan
# Description:       This script sets up the macvlan interface
#                    before it can be used by networking.
# X-Start-Before:    networking
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh


do_start () {
        ip link add link eth0 address 00:11:22:aa:bb:cc macvlan0 type macvlan mode bridge
###      REPLACE MAC ON EACH HOST ->  ^^ ^^ ^^ ^^ ^^ ^^
}

case "$1" in
  start|"")
        do_start
        ;;
  *)
        echo "Sorry, this only sets up the macvlan interface." >&2
        exit 3
        ;;
esac

सहेजें और निष्पादित बिट सेट करें:

chmod +x /etc/init.d/macvlan

और init के लिए सभी लिंक जोड़ें:

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