सबसे आसान समाधान शायद उपयोग करना है macvlans
। इसी तरह के समाधान macvtap और ipvlan हैं , जो ऊपर से केवल न्यूनतम रूप से भिन्न होते हैं; कई विवरणों के बिना, एक के बजाय दूसरे को चुनना मुश्किल है। लेकिन निम्नलिखित निश्चित रूप से काम करेगा।
प्रत्येक नेटवर्क नेमस्पेस के लिए, एक मैक्वलन इंटरफ़ेस निम्नानुसार असाइन करें:
NNS=TheNameOfYourNetworkNamespace
ip netns add $NNS
ip link add link eth0 mac$NNS address 56:61:4f:7c:77:db type macvlan mode bridge
ip link set dev mac$NNS netns $NNS
मैंने एक विशिष्ट मैक पते का उपयोग किया है, address 56:61:4f:7c:77:db
यदि आप इसे निर्दिष्ट करने में कोई रुचि नहीं रखते हैं, तो आप इस भाग को छोड़ सकते हैं, इस प्रकार इसे मौका देने के लिए छोड़ सकते हैं।
अब नेटवर्क नेमस्पेस दर्ज करें और नेटवर्क कॉन्फ़िगर करें:
ip netns exec $NNS xterm
और खुले के भीतर से xterm
करें:
ip link set dev $NAME_OF_MAC_INTERFACE up
ip link set dev lo up
ip addr add 127.0.0.1 dev lo
dhclient -v mac$NNS
और आप कर रहे हैं
एक अंतिम टिप्पणी: mode bridge
ऊपर उपयोग किया गया विकल्प सभी नेटवर्क नेमस्पेस को एक दूसरे से सीधे बात करने की अनुमति देता है, अर्थात एक स्विच के माध्यम से गुजरने के बिना। हालाँकि, आप इस तरह के विकल्प का उपयोग करते हैं या नहीं, आपका होस्ट नेटवर्क नेमस्पेस से बात करने में असमर्थ होगा, जब तक कि आप स्वयं होस्ट के लिए मैक्वलन का निर्माण नहीं करते हैं, उस स्थिति में यह अन्य एनएनएस के साथ संवाद करने में सक्षम होगा जैसे कि यह स्वयं उनमें से एक थे।
संपादित करें:
यह काम नहीं करता है क्योंकि मुझे यह याद रखना चाहिए कि, एनएनएस के अंदर एक बार $ एनएनएस जैसे पर्यावरण चर को अब परिभाषित नहीं किया गया है, इसलिए मुझे ऊपर की रेखा को सही करना चाहिए। वास्तव में, मेरे सिस्टम पर,
# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether e8:e0:b7:be:72:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.73.55/24 brd 192.168.73.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::eae0:b7ff:febe:726a/64 scope link
valid_lft forever preferred_lft forever
# NNS=ns1
# ip netns add $NNS
# ip link add link eth0 mac$NNS address 56:61:4f:7c:77:db type macvlan
# ip link set dev mac$NNS netns $NNS
# ip netns exec $NNS /bin/bash
# ip link set dev macns1 up
# ip link set dev lo up
# ip addr add 127.0.0.1 dev lo
# dhclient -v macns1
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/macns1/56:61:4f:7c:77:db
Sending on LPF/macns1/56:61:4f:7c:77:db
Sending on Socket/fallback
DHCPDISCOVER on macns1 to 255.255.255.255 port 67 interval 3 (xid=0x473d2846)
DHCPREQUEST of 192.168.73.48 on macns1 to 255.255.255.255 port 67 (xid=0x46283d47)
DHCPOFFER of 192.168.73.48 from 192.168.73.1
DHCPACK of 192.168.73.48 from 192.168.73.1
bound to 192.168.73.48 -- renewal in 21288 seconds.
# ping -c1 superuser.com
PING superuser.com (104.16.127.192) 56(84) bytes of data.
64 bytes from 104.16.127.192: icmp_seq=1 ttl=53 time=12.9 ms
--- superuser.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.927/12.927/12.927/0.000 ms
जैसा कि आप देख सकते हैं, यह पूरी तरह से मेरे सिस्टम पर काम करता है। आप देख सकते हैं कि NNS (192.168.73.48) के भीतर मुझे जो IP पता मिलता है, वह 192.168.73.55 होस्ट से अलग है।
यदि यह आपके सिस्टम पर काम नहीं करता है, तो मुझे कुछ और की आवश्यकता होगी, यह काम नहीं करता है , क्योंकि मैं आपकी त्रुटि को दोहराने में असमर्थ हूं।
arp -s
की$NNS
और यह देता है192.168.42.129 (incomplete)
। आईपी मेरा प्रवेश द्वार है। मैं डिफ़ॉल्ट नामस्थान में कोशिश की यह सही मैक देता है।