पोर्ट अग्रेषण होस्ट से अतिथि के साथ libvirt 0.8.3 उबंटू पर KVM का उपयोग करना


14

होस्ट में एक एकल बाहरी आईपी उपलब्ध है, इसलिए मैंने अपने KVM मेहमानों को NAT के साथ सेट किया।

बाहर से आए मेहमानों से कुछ अनुरोधों को अग्रेषित करने के लिए मैं एक पोर्ट कैसे स्थापित करूं?

मुझे इस पर कोई दस्तावेज नहीं मिला। निकटतम उत्तर शायद यह उत्तर है , लेकिन फिर यह भी उल्लेख किया गया है कि libvirt 0.8.3 में ऐसा करने का आसान तरीका है। किसी को भी यह करने के लिए एक और अधिक मौजूदा तरीके से पता है?


बाहरी - आप इंटरनेट आईपी का मतलब है? या सिर्फ आपका LAN (VM को बाहरी)? क्या आप ब्रिड्ड नेटवर्किंग सेट करने के लिए अपने वीएम को उन बाहरी पते आवंटित कर सकते हैं?
आर्ट शायडरोव

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

जवाबों:


13

यहां हुक स्क्रिप्ट ( स्रोत ) का उपयोग करके पोर्ट फ़ॉरवर्डिंग स्थापित करने का एक बेहतर तरीका है ।

में /etc/libvirt/hooks/qemu:

#!/bin/sh

GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=

if [ "$1" = "$GUEST_NAME" ]; then
  if [ "$2" = start ]; then
    iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  elif [ "$2" = stopped ]; then
    iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  fi
fi

आपको अपने libvirt सेटअप को फिट करने के लिए शीर्ष पर चार चर सेट करने चाहिए।

आपको libvirt-bin को पुनरारंभ करने की आवश्यकता होगी, जो ubuntu पर किया गया है:

sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'

फिर आपको अतिथि को पुनरारंभ करना होगा। उबंटू पर, आपको समायोजित करने की आवश्यकता होगी/etc/apparmor.d/usr.sbin.libvirtd हुक स्क्रिप्ट को निष्पादित करने की अनुमति देने के करने की :

के पास

/usr/sbin/* PUx,

संलग्न

/etc/libvirt/hooks/* PUx,

फिर पुनः लोड करें:

sudo service apparmor reload

शायद $GUEST_IPADDRवायरश / डंपएक्सएमएल / इफेक-डंपएक्सएमएल का उपयोग करके ऑटोकॉनफिगर करने का एक तरीका है , लेकिन मैंने इसे नहीं पाया है। वैकल्पिक रूप से, आईपी को नेटवर्क xml: प्रलेखन में सांख्यिकीय रूप से सेट किया जा सकता है ।

जहां तक ​​मैं बता सकता हूं, नेटवर्क फिल्टर का उपयोग केवल वर्चुअल नेटवर्क पर होने वाले प्रतिबंधों के लिए किया जा सकता है, और वे पोर्ट फॉरवर्ड करने के लिए उपयोगी नहीं हैं।


1
भरोसेमंद /etc/libvirt/hooks/** rmix,रूप से डिफ़ॉल्ट रूप से एपरमोर कॉन्फिग फाइल में एक लाइन होती है, और ऐसा ही लगता है। मैं एपरमोर कॉन्फ़िगरेशन को संशोधित किए बिना स्क्रिप्ट चला सकता था।
अमीर अली अकबरी

2

मैं ऐसी ही स्थिति में हूं। मेरे पास निजी नैटेड नेटवर्क में केवीएम में एक विंडोज सर्वर चल रहा है जो इंटरफ़ेस virbr0 के माध्यम से होस्ट पर जुड़ा हुआ है। मैं दूरस्थ डेस्कटॉप के माध्यम से वीएम का उपयोग करना चाहता हूं। इसलिए मुझे VM पोर्ट 3389 पर 3389 (RDP) पोर्ट करने के लिए ट्रैफ़िक को अग्रेषित करना होगा। मैंने इसे कुछ iptable नियमों के साथ हासिल किया है।

/ sbin / iptables -t nat -A PREROUTING -p tcp -d HOST-IP --dport 3389 -j DNAT - तक गंतव्य VM-IP: 3389

/ sbin / iptables -I FORWARD -m राज्य -d VM-NET / 24 - नया, संबंधित, स्थापित -j ACCEPT

HOST-IP, VM-IP और VM-NET को जरूर अपनाना होगा। हालाँकि iptables और libvirt के साथ खिलवाड़ करना मुश्किल है। अभी मैं अपने वीएम पर इंटरनेट एक्सेस प्राप्त करने के लिए एक उपाय खोज रहा हूं जो कि मैं iptable नियमों के साथ खिलवाड़ के कारण खो गया हूं :-(


मुझे पता है कि यह कुछ साल पुराना है लेकिन इस जवाब ने मेरे लिए काम किया। धन्यवाद!
mttdbrd

1

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


0

गेस्ट नेटवर्किंग कैसे सेट की जाती है? यदि इसे पाला जाता है, तो आपको बस इतना करना है कि मेहमानों के आईपी में बंदरगाहों को अग्रेषित करें। यदि आपके मेहमान अभी तक एक अन्य NAT के पीछे हैं, तो एक libvirt सेट करता है, तो यह जटिल हो जाता है

लेकिन किसी भी मामले में, यहाँ आप VM को एक भौतिक मशीन के रूप में मानते हैं


मुझे लगता है कि मैंने इसे स्पष्ट रूप से नहीं कहा था। मेजबान एक NAT में नहीं है, इसका बाहरी IP पता है। दुर्भाग्य से, अतिथि नेटवर्किंग libvirt द्वारा NAT सेट के पीछे है।
वीई

आह, तो यह एक और मामला है। मूल रूप से libvirt इसका NAT समाधान है, जिसे संपादित किया जा सकता है।
dyasny

हाँ, यह वही है जो मुझे बताया गया है, इसे संपादित किया जा सकता है। लेकिन मैं अभी इसके बारे में कोई संदर्भ नहीं पा रहा हूं, nwfilter xml कॉन्फ़िगरेशन फाइलें मेरे लिए बिल्कुल विचित्र लगती हैं, libvirt वेबसाइट पर प्रलेखन बहुत उपयोगी नहीं है।
वी

यदि आपने नेटवर्किग की है तो आप केवल डिफ़ॉल्ट लिबावर्ट NAT का त्याग कर सकते हैं और कुछ भी सेटअप कर सकते हैं। जैसा कि डायस्नी ने कहा, वीएम का इलाज आप एक भौतिक मशीन के रूप में करेंगे। मेरे पास KVM होस्ट और इंटरफ़ेस है बाहरी IP के साथ VM को असाइन किया गया है जिसे गेटवे के रूप में कॉन्फ़िगर किया गया है। अगर वह सूट आपको चाहिए तो मैं कॉन्फ़िगरेशन (ubuntu-style) पोस्ट कर सकता हूं।
कला शायडरोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.