केवल वैग्रंट में Bridged एडाप्टर करने की आवश्यकता है, कोई NAT नहीं


36

इसलिए मैं अपने मैक बुक पर 'हैशिकॉर्प / सटीक 64' के वैग्रंट सेटअप के साथ एक समस्या है।

सबसे पहले, मेरा विन्यास:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure (VAGRANTFILE_API_VERSION) करना | config |
  config.vm.box = "हैशिकॉर्प / सटीक 64"
  config.vm.network "public_network", प्रकार: "dhcp",: पुल => 'en4: थंडरबोल्ट ईथरनेट'
  config.vm.hostname = "mddirector"
समाप्त

यह 'योनि ऊपर' का उभार है

==> डिफ़ॉल्ट: वीएम के सुंदर बंद का प्रयास ...
==> डिफ़ॉल्ट: चेकिंग अगर बॉक्स 'हैशिकॉर्प / सटीक 64' अप टू डेट है ...
==> डिफ़ॉल्ट: पहले से सेट किए गए किसी भी पोर्ट को साफ़ करना ...
==> डिफ़ॉल्ट: किसी भी पहले से सेट किए गए नेटवर्क इंटरफ़ेस को साफ़ करना ...
==> डिफ़ॉल्ट: कॉन्फ़िगरेशन के आधार पर नेटवर्क इंटरफेस तैयार करना ...
    डिफ़ॉल्ट: एडाप्टर 1: नेट
    डिफ़ॉल्ट: एडाप्टर 2: ब्रिजिंग
==> डिफ़ॉल्ट: अग्रेषित पोर्ट ...
    डिफ़ॉल्ट: 22 => 2222 (एडाप्टर 1)
==> डिफ़ॉल्ट: बूटिंग वीएम ...
==> डिफ़ॉल्ट: बूट करने के लिए मशीन की प्रतीक्षा कर रहा है। इसमें कुछ मिनट लग सकते हैं...
    डिफ़ॉल्ट: SSH पता: 127.0.0.1:2222
    डिफ़ॉल्ट: SSH उपयोगकर्ता नाम: आवारा
    डिफ़ॉल्ट: SSH सामान्य तरीका: निजी कुंजी
    डिफ़ॉल्ट: चेतावनी: कनेक्शन टाइमआउट। पुनः प्रयास किया जाएगा ...
==> डिफ़ॉल्ट: मशीन बूट और तैयार!
GuestAdditions 4.3.10 चल रहा है --- ठीक है।
==> डिफ़ॉल्ट: VM में अतिथि परिवर्धन के लिए जाँच ...
==> डिफ़ॉल्ट: होस्टनाम सेट करना ...
==> डिफ़ॉल्ट: नेटवर्क इंटरफेस को कॉन्फ़िगर और सक्षम करना ...
==> डिफ़ॉल्ट: साझा किए गए फ़ोल्डर बढ़ते ...
    डिफ़ॉल्ट: / योनि => / उपयोगकर्ता / गर्थ / परियोजना / योनि
==> डिफ़ॉल्ट: मशीन पहले से ही प्रावधान है। `योनि प्रावधान` चलाएं या` - प्रोविजन` का उपयोग करें
==> डिफ़ॉल्ट: प्रोविजनिंग को बाध्य करने के लिए। हमेशा चलाने के लिए चिह्नित प्रावधान अभी भी चलेंगे।

'ifconfig' निम्नलिखित दिखाता है:

योनि @ mddirector: ~ $ ifconfig
eth0 लिंक एनकैप: ईथरनेट HWaddr 08: 00: 27: 88: 0c: a6
          inet addr: 10.0.2.15 Bcast: 10.0.2.255 मास्क: 255.255.255.0
          inet6 addr: fe80 :: a00: 27ff: fe88: ca6 / 64 स्कोप: लिंक
          UP BROADCAST RUNNING MULTICAST MTU: 1500 मीट्रिक: 1
          आरएक्स पैकेट: 725 त्रुटियां: 0 गिरा: 0 ओवररन: 0 फ्रेम: 0
          TX पैकेट: 544 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
          टकराव: 0 txqueuelen: 1000
          RX बाइट्स: 90824 (90.8 KB) TX बाइट्स: 63375 (63.3 KB)

eth1 लिंक एनकैप: ईथरनेट HWaddr 08: 00: 27: 2f: bb: 6a
          inet addr: 10.0.24.118 Bcast: 10.0.31.255 मास्क: 255.255.248.0
          UP BROADCAST RUNNING MULTICAST MTU: 1500 मीट्रिक: 1
          आरएक्स पैकेट: 3490 त्रुटियां: 0 गिरा: 0 ओवररन: 0 फ्रेम: 0
          TX पैकेट: 7 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
          टकराव: 0 txqueuelen: 1000
          RX बाइट्स: 345981 (345.9 KB) TX बाइट्स: 1102 (1.1 KB)

लो लिंक एनकैप: लोकल लूपबैक
          inet addr: 127.0.0.1 मास्क: 255.0.0.0
          inet6 addr: :: 1/128 स्कोप: होस्ट
          UP LOOPBACK RUNNING MTU: 16436 मीट्रिक: 1
          आरएक्स पैकेट: 0 त्रुटियां: 0 गिरा: 0 ओवररन: 0 फ्रेम: 0
          TX पैकेट: 0 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
          टकराव: 0 txqueuelen: 0
          RX बाइट्स: 0 (0.0 B) TX बाइट्स: 0 (0.0 B)

मेरी समस्या यह है, कि मैं अपने होस्ट मशीन से VM को पिंग कर सकता हूं ( IP: 10.0.24.112), दूसरे लोग मेरे VM को भी पिंग कर सकते हैं ( 10.0.24.XXX), मेरा VM मेरे डिवबॉक्स ( IP: 10.10.116.254) को पिंग कर सकता है, मैं अपने डेवबॉक्स से अन्य डेवलपर्स के वर्चुअल मशीन सेटअप को पिंग कर सकता हूं ( ) नहीं Vagrant, IP: 10.10.116.254), लेकिन मैं अपने वीएम मेरी devbox और अन्य डेवलपर से पिंग नहीं कर सकते उनके devbox से मेरी वी एम को पिंग नहीं कर सकता।

वर्चुअल मशीन सेटअप उनके पास केवल एक Bridged NIC के साथ है, लेकिन किसी कारण से योनि में NAT और Bridged दोनों होते हैं, भले ही, मैंने कॉन्फ़िगरेशन में ब्रिजिंग निर्दिष्ट की हो। जैसा कि आप देख सकते हैं, Vagrant VM के लिए दो IP पते हैं, जो सही नहीं लगता है। आप यह भी कर सकते हैं, जब यह बूट होता है, तो यह एडेप्टर 1 पर एक पोर्ट फॉरवर्ड करता है, जो कि नैट अडैप्टर है, जिसका अर्थ है कि यह सब कुछ के लिए डिफ़ॉल्ट रूप से नैट अडैप्टर का उपयोग कर रहा है।

मैं NAT एडाप्टर से कैसे छुटकारा पाऊं और केवल ब्रिजेड का उपयोग करूं?

अगर मैं वर्चुअलबॉक्स सेटिंग्स को एडिट करता हूं और NAT एडॉप्टर को डिसेबल कर देता हूं, तो केवल ब्रिज एडॉप्टर होता है और वर्चुअलबॉक्स के जरिए बॉक्स को बूट करता है (यानी: वेजेंट अप का उपयोग नहीं कर रहा है), तो इसमें केवल आईपी एड्रेस के साथ eth0 है जो मेरे डेबक्स के लिए पिंगेबल है , जो मैं देख रहा हूँ। अगर मैं VirtualBox सेटिंग्स को संपादित करने और NAT एडाप्टर को अक्षम करने के बाद बॉक्स को आज़माता हूं, तो मुझे निम्नलिखित त्रुटि मिलती है:

'VBoxManage` को क्रियान्वित करते समय एक त्रुटि हुई, Vagrant द्वारा प्रयुक्त एक CLI
VirtualBox को नियंत्रित करने के लिए। आदेश और stderr नीचे दिखाया गया है।

कमान: ["संशोधित", "7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3", "--natpf1", "ssh, tpp, 127.0.0.1,2222, 22"]]

Stderr: VBoxManage: त्रुटि: इस नाम का NAT नियम पहले से मौजूद है
VBoxManage: त्रुटि: विवरण: कोड NS_ERROR_INVALID_ARG (0x80070057), घटक NATEngine, इंटरफ़ेस INATEngine, callee nsISupports
VBoxManage: error: संदर्भ: "AddRedirect (Bstr (strName) .raw (), प्रोटो, Bstr (strHostIp) .raw (), RTStrToUInt16 (strostostPort), Bstr (strGuestIp) (), RTStrToUIU16 और स्ट्रैटो। फ़ाइल का लाइन 1655 VBoxManageModifyVM.cpp

अगर मैं तुरंत फिर से एक योनि करता हूं, तो उसने NAT एडाप्टर को फिर से सक्षम किया है, और हम फिर से उसी समस्या के लिए वापस आ रहे हैं।

जवाबों:


21

eth0जैसा कि एनएटी अपनी वर्तमान स्थिति में वैग्रांत की एक मूलभूत आवश्यकता है । लेकिन आप के लिए डिफ़ॉल्ट राउटर कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं eth1

से Vagrant डॉक्स :

डिफ़ॉल्ट राउटर

अपने सेटअप के आधार पर, आप डिफ़ॉल्ट राउटर कॉन्फ़िगरेशन को मैन्युअल रूप से ओवरराइड करना चाह सकते हैं। यह आवश्यक है अगर आपको सार्वजनिक नेटवर्क पर अन्य नेटवर्क से वैग्रेंट बॉक्स तक पहुंचने की आवश्यकता है । ऐसा करने के लिए, आप शेल प्रोफ़र स्क्रिप्ट का उपयोग कर सकते हैं:

config.vm.network "public_network", ip: "192.168.0.17"

# डिफ़ॉल्ट राउटर
config.vm.provision "शेल",
  रन: "हमेशा",
  इनलाइन: "रूट डिफॉल्ट gw 192.168.0.1 जोड़ें"

# डिफ़ॉल्ट राउटर ipv6
config.vm.provision "शेल",
  रन: "हमेशा",
  इनलाइन: "मार्ग- inet6 डिफ़ॉल्ट gw fc00 :: 1 eth1 जोड़ें"

# eth0 पर डिफ़ॉल्ट gw हटाएं
config.vm.provision "शेल",
  रन: "हमेशा",
  इनलाइन: "eval` मार्ग -n। awk '{if ($ 8 == \ "eth0 \" और& $ 2! = \ "0.0.0.0 \") प्रिंट \ "मार्ग डेल डिफ़ॉल्ट gw \" $ 2;} "@"

ऊपर ध्यान दें काफी जटिल है और अतिथि ओएस विशिष्ट हो सकता है, लेकिन हम इसे कैसे करना है के मोटे विचार का दस्तावेज बनाते हैं क्योंकि यह एक सामान्य प्रश्न है।


9

(क्षमा करें, आवारा / वर्चुअलबॉक्स के बारे में काफी भोली है इसलिए उचित नेटवर्किंग शब्दावली की कमी को माफ करें)

आपकी पसंद का पुल: en4) थंडरबोल्ट सबसे अधिक समस्या है।

यहाँ है कि मैं आपको जो चाहता / मानती हूँ, उसके बजाय जो आपने माँगा था:

  • एसएसएच लॉगिन क्षमता अपने देव बॉक्स (मेजबान) से, अपने वीएम को नियंत्रित करने के लिए योनि के लिए। पोर्ट फारवर्डिंग के साथ NAT क्या करता है। यह कुछ और गड़बड़ नहीं करता है, इसलिए इसे जाने के लिए पूछना यह सब उपयोगी नहीं है। और वह VirtualBox में एडाप्टर 1 पर दिखाई देता है।

  • केवल अपने मेजबान के बजाय अपने लैन से कनेक्टिविटी। 192.168.1.xxx रेंज में कुछ कहते हैं। एडॉप्टर 2 पर यही महत्वपूर्ण है।

  • आप बस अपने सामान्य नेटवर्क कार्ड / एनआईसी की परवाह करते हैं और आपके थंडरबोल्ट पोर्ट पर ईथरनेट चलाने का कोई विशेष कारण नहीं है।

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

यहाँ एक SSH ifconfig है जो उन सभी VirtualBox में से केवल एक मशीन है जो मेरे LAN पर है। यह एक वेब सर्वर चलाता है जिसे मैं कनेक्ट कर सकता हूं और मेरा मैक इसमें SSH कर सकता है और उस पर एक डेटाबेस से जुड़ सकता है। मैं इसे संदर्भ कहूंगा ।

[root@fdm ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:9A:85:1A
          inet addr:192.168.1.143  Bcast:192.168.1.255  Mask:255.255.255.0

वर्चुअलबॉक्स में, नेटवर्क पैनल, उस संदर्भ vm के लिए, एडेप्टर 1 को ब्रिज के रूप में दिखाता है। अन्य सभी एडेप्टर अक्षम हैं।

ठीक है, इसलिए मैं अब वैग्रंट से उसी लैन कनेक्टिविटी परिणाम के लिए प्रयास करने जा रहा हूं, लेकिन मैं स्वीकार करता हूं कि मेरे पास एडाप्टर 1 पर NAT होगा, यह योनि-वीबी ssh संचार तंत्र है।

# 1 कोशिश करें - जो विफल हो जाता है।

प्रारंभिक बिंदु एक योनि init है

Vagrantfile में, मैंने केवल 2 चीजें बदलीं:

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

अगर मैं ऊपर आवारा इस, मैं एक उक्त कथन उपयोग करने के लिए जो इंटरफेस मिलती है:

==> default: Available bridged network interfaces:
1) en1: Wi-Fi (AirPort)
2) en0: Ethernet
3) en3: Thunderbolt 1
4) p2p0
5) bbptp0
6) bridge0

अब, इसे देखते हुए, मैंने पहली बार 2 को चुना ) क्योंकि मुझे लगा कि मैं ईथरनेट और अच्छी तरह से चाहता हूं, 1) 'बहुत एप्पल' लग रहा था।

यह काम करता है, लेकिन एक अनुपयुक्त आईपी 10.0.xx.xx प्रविष्टि के साथ, जिस पर मेरा ISP पिंग करता है, नीचे देखें। मुझे लगता है कि वे वास्तव में सार्वजनिक मतलब है जब यह सार्वजनिक नेटवर्क कहते हैं।

योनि ssh

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0c:413e/64 Scope:Link

eth1      Link encap:Ethernet  HWaddr 08:00:27:ca:f4:64
          inet6 addr: fe80::a00:27ff:feca:f464/64 Scope:Link

# 2 - सही संस्करण का प्रयास करें

योनि रुकावट , फिर निर्देशिका को हटा दें, इसे फिर से बनाएं और योनि init । (मैंने पाया कि नेटवर्क के साथ बहुत अधिक खिलवाड़ करना योनि और / या वर्चुअलबॉक्स को भ्रमित कर सकता है जो एक पूर्ण निष्कासन और पुनः आरंभ होगा)

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

लेकिन, इस बार, 1) en1: Wi-Fi (AirPort) चुनें।

योनि ssh

192.168.1.123 के साथ eth1 बहुत अच्छा लग रहा है, है ना?

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 08:00:27:53:6e:1d
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0

और, वास्तव में, मैं अपने संदर्भ vm से 192.168.1.123 या मेरे LAN पर किसी अन्य भौतिक मशीन से पिंग कर सकता हूं।

[root@fdm ~]# ping 192.168.1.123
PING 192.168.1.123 (192.168.1.123) 56(84) bytes of data.
64 bytes from 192.168.1.123: icmp_seq=1 ttl=64 time=1039 ms
64 bytes from 192.168.1.123: icmp_seq=2 ttl=64 time=40.4 ms

एफडब्ल्यूआईडब्ल्यू, वर्चुअलबॉक्स एडॉप्टर 1 पर एक एनएटी और एडप्टर 2 पर एक ब्रिजेड दिखाता है।

अंतिम सेटअप -

इंटरफ़ेस का स्वचालित चयन और साथ ही एक स्थिर आईपी (जिसकी आपको आवश्यकता नहीं है) जोड़ा गया। समस्या हल हो गई, मेरे लिए कम से कम।

  config.vm.network "public_network", bridge: 'en1: Wi-Fi (AirPort)', ip: "192.168.1.201"

EDIT 201902: मेरे नवीनतम निर्माण पर, योनि / वर्चुअलबॉक्स Wifi (हवाई अड्डे) के बारे में शिकायत कर रहे थे :

==> default: Specific bridge 'en1: Wi-Fi (AirPort)' not found. You may be asked to specify
==> default: which network to bridge to.
==> default: Available bridged network interfaces:
1) en0: Ethernet
2) en2: Thunderbolt 1
3) bridge0

इसे बदल दिया

config.vm.network "public_network", bridge: "bridge0"

अगर बाद में कुछ आता है तो अपडेट करेंगे, लेकिन मुझे लगा कि एडॉप्टर नाम के बारे में थोड़ा अपडेट करूंगा।


उसका जवाब अधिक श्रेय का हकदार है, एक अतिरिक्त एडाप्टर जोड़ने के लिए इतना आसान है, मुझे मेनू भी नहीं मिला (केवल 1 सक्रिय कार्ड है)।
ग्लेन प्लास

4

लगता है कि संक्षिप्त उत्तर नहीं है।

आप एडेप्टर 1 को ओवरराइड कर सकते हैं लेकिन कम से कम समस्याओं की उम्मीद करते हैं vagrant ssh

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.network "public_network", :adapter=>1 , type: "dhcp", :bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"

  # In case you get the host wrong...
  config.vm.boot_timeout = 30
  config.vm.provider "virtualbox" do |vb, override|
       vb.gui = true
  end

  config.ssh.host = '192.168.148.24'

end

पैदा करता है:

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: bridged
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
    default: VirtualBox adapter #1 not configured as "NAT". Skipping port
    default: forwards on this adapter.
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...

दुर्भाग्य से ऐसा लगता है कि तब नेटवर्क एडेप्टर को कॉन्फ़िगर करना बंद कर देता है, लेकिन शायद आपके पास मुझसे अधिक भाग्य होगा।

यदि आप करते हैं तो आप हमेशा रुक सकते हैं और एक सही के साथ पुनः लोड कर सकते हैं ssh.host। वैकल्पिक रूप से मैंने सुना है, vagrant dnsलेकिन कभी कोशिश नहीं की।


3

मुझे यह चर्चा StackOverflow पर मिली ।

मेरे लिए, संबंधित Vagrantfileलाइन को खोलना और निम्नलिखित लाइन को अनलॉक्ड करना पर्याप्त था:

config.vm.network "public_network"

और फिर चला vagrant reload


2
यदि आप मेरे Vagrantfile कॉन्फ़िगरेशन को देखते हैं, तो आप देखेंगे कि कॉन्फ़िगरेशन सेटिंग पहले से ही वहां मौजूद है।
सिनैकेसा

मुझे माफ करें! मैंने यह खो दिया।
टायलर

3
मेरा मानना ​​है कि इसका हमेशा NAT कनेक्शन होता है क्योंकि जब आप एसशेंट या कोई प्रोविजनिंग करते हैं, तो यह हमेशा 127.0.0.1:2222 या जो भी इसे पोर्ट करता है, उसे गेस्ट बॉक्स पर 22 पर एक्सेस करता है।
हेडन

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