LXC कंटेनर के लिए सार्वजनिक आईपी पता


26

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

मैं Ubuntu 12.04 LTS चला रहा हूं और मेरे पास LXC स्थापित है और मैं कंटेनर बना सकता हूं, शुरू कर सकता हूं और रोक सकता हूं। मेरे सर्वर में स्पष्ट रूप से एक सार्वजनिक IP मौजूद है और मैं यह जानना चाहूंगा कि कंटेनर को कैसे सेटअप किया जाए ताकि यह भी एक सार्वजनिक आईपी हो सके। चूँकि मेरे वर्तमान कंटेनर में पहले से ही एक पुल बना हुआ है, ऐसा लगता है कि मुझे या तो कंटेनर को एक डीएचसीपी रेंज देने की आवश्यकता है जो उनके लिए काम करने के लिए सार्वजनिक है या मैन्युअल रूप से मेरे कंटेनर को एक स्थिर आईपी पता असाइन करें।

अगर मैं स्टेटिक रूप से कंटेनर को IP असाइन करना चाहता हूं, तो मैं यह कैसे करूं? क्या मुझे होस्ट पर अपने ब्रिज कॉन्फ़िगर में कोई बदलाव करने की ज़रूरत है? क्या वास्तव में MACVLAN विकल्प के साथ ऐसा करना बेहतर है?

किसी भी सहायता की सराहना की जाएगी।


मैं LXC से परिचित नहीं हूँ, लेकिन आपका आम तौर पर isp केवल आपको एक सार्वजनिक IP पता देने वाला है। क्या आपके पास कई स्थिर ips के साथ पैकेज है?
wlraider70

सार्वजनिक सामना करने वाले आईपी केवल उपयोग के मामले नहीं हैं, हम चाहते हैं कि 2 सार्वजनिक आईपी हमारे लोड बैलेंसर कंटेनरों को सौंपा जाए, लेकिन हम चाहते हैं कि लैन आईपी अन्य सेवाओं की एक किस्म के लिए समर्पित हो। इस तरह अगर हम अलग-अलग हार्डवेयर पर कंटेनरों को घुमाते हैं, तो यह आईपी को स्थानांतरित करने के लिए उतना आसान है (DNS हमारे द्वारा उपयोग किए जाने वाले कुछ घटकों के लिए इस संबंध में काम नहीं करता है)
डेविड पार्क्स

जवाबों:


23

मेरा दृष्टिकोण मानता है कि आपके सर्वर में एक एकल एनआईसी है, और आपको मेजबान और एलएक्ससी मेहमानों के बीच उस एनआईसी को साझा करने की आवश्यकता है। इसमें एक पुल का उपयोग करना शामिल है। पुल का मालिक है और प्रबंधन करता है eth0। होस्ट अब इसके br0बजाय अपने नेटवर्किंग को कॉन्फ़िगर करता है eth0। एलएक्ससी मेहमान पुल से कनेक्ट करने के लिए कॉन्फ़िगर किए गए हैं।

  1. मेजबान पर sudo apt-get install bridge-utils

  2. मेजबान पर, eth0एक पुल के साथ बदलें :

    यह खतरनाक है। इसे गलत करें और आप अपने सर्वर से लॉक हो सकते हैं। स्थानीय लॉगिन सक्षम होना सुनिश्चित करें और स्थानीय कंसोल एक्सेस काम करता है, ताकि यदि आपको कोई समस्या हो तो आप इस परिवर्तन को वापस कर सकें।

    इन /etc/network/interfaces:

    1. बदलें auto eth0के साथ auto br0
    2. बदलने के:

      iface eth0 inet dhcp
      

      साथ में:

      iface br0 inet dhcp
          bridge_ports eth0
      

      यदि आपके पास एक स्थिर नेटवर्क कॉन्फ़िगरेशन था, तो आप प्रतिस्थापित करेंगे:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      साथ में:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      आप बस के लिए बदल eth0रहे हैं br0और bridge_ports eth0लाइन जोड़ रहे हैं ।

    3. मेजबान को रिबूट करें। यदि आप स्थानीय स्तर पर ऐसा कर रहे हैं, तो sudo ifdown eth0शुरू होने से पहले आप चल रहे हैं , और sudo ifup br0बाद में भी करेंगे। ध्यान दें कि पुल को ऊपर आने में थोड़ा समय लग सकता है, इसलिए यह मानने से पांच मिनट पहले कि आप यह मान लें कि सब खो गया है।

  3. किसी सार्वजनिक IP पर दिए गए LXC कंटेनर को स्थानांतरित करने के लिए:

    1. कंटेनर बंद करो।
    2. मेजबान, संपादित करें पर और परिवर्तन करने के लिए ।/var/lib/lxc/container_name/configlxc.network.linkbr0
    3. होस्ट पर, अपने सार्वजनिक आईपी को संपादित करें और कॉन्फ़िगर करें जैसा कि आप सामान्य रूप से करेंगे (आवश्यकतानुसार डीएचसीपी या एक स्थिर कॉन्फ़िगरेशन)। ध्यान दें कि इंटरफ़ेस अभी भी कंटेनर के दृष्टिकोण से कहा जाता है।/var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. कंटेनर को पुनरारंभ करें।
  4. नए LXC कंटेनरों के लिए डिफ़ॉल्ट को बदलने के लिए, /etc/lxc/default.confहोस्ट पर एडिट करें और बदल lxc.network.linkदें br0

  5. यदि आपको LXC द्वारा प्रदान किए गए NAT ब्रिज की आवश्यकता नहीं है (यानी आपके सभी कंटेनर नए ब्रिज का उपयोग करेंगे), तो होस्ट एडिट पर /etc/default/lxcऔर बदलने के USE_LXC_BRIDGEलिए "false", और फिर होस्ट रन पर sudo service lxc restart


धन्यवाद! इसी तरह के बहुत सारे सवाल हैं। लेकिन, इस जवाब ने आखिरकार मुझे काम करने में मदद की।
Mausy5043

1

रॉबी, इस उत्तर को पोस्ट करने के लिए बहुत-बहुत धन्यवाद, मैं अपने बालों को बाहर निकालने की कोशिश कर रहा हूं ताकि यह जा सके और यह एकमात्र तरीका है जिसने काम किया है!

मैंने सोचा कि मुझे कुछ चीजों का उल्लेख करना चाहिए, जो मुझे पता है कि अन्य प्रवेशकों के निर्देशों को स्पष्ट करने में मदद करने के लिए।

मेरे मेजबान के पास गेस्ट के लिए कई स्टैटिक आईपी एलियास eth0 को सौंपे गए थे, उदाहरण के लिए:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

अब हम br0 को उसी तरह सेट नहीं करना चाहते हैं, हम सिर्फ एक आईपी चाहते हैं जिसमें कोई भी उपनाम नहीं है जैसे रॉबी ने ऊपर संकेत दिया था।

तो मान लें कि आप चाहते हैं कि 5.5.5.5 कंटेनर डेबियन 8 को सौंपा जाए।

संपादित करें /var/lib/lxc/debian8/etc/network/interfacesऔर जोड़ें:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

फिर यह आदेश जारी करें: route add default gw <gateway-ip, in my case 5.5.5.1>

उसके बाद, कंटेनर को रिबूट करें और सब कुछ अंत में काम करना चाहिए! :)


1

मेरे पास एक ही समस्या थी और मेरे पास यह समाधान (त्वरित और गंदा) है।

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

सर्वर पर: route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

इसके अलावा, अगर अपस्ट्रीम राउटर के लिए रूट जोड़ने की जरूरत है।

शायद, सबसे अच्छा समाधान नहीं है, लेकिन कोई महान प्रयास की आवश्यकता है! चीयर्स।

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