लगन wlan0 से eth0


25

आर्क लिनक्स पर, मैं w00 से प्राप्त eth0 (कनेक्टेड राउटर से जुड़ा हुआ) साझा करना चाहता हूं, मैंने ट्यूटोरियल पढ़ा है, लेकिन मैं अन्य उपयोगकर्ताओं के रूप में कमांड प्रेमी नहीं हूं और पूरी तरह से समझ में नहीं आया।


8
कृपया प्रश्न या शीर्षक में '[हल] नहीं करें, एक उत्तर को स्वीकार करना यह दिखाने का सही तरीका है कि समस्या हल हो गई। यह उस तरह से बदलाव करता है जैसे प्रश्न को मुख्य लिस्टिंग पर प्रदर्शित किया जाता है और साथ ही आपके द्वारा सही के रूप में चिह्नित किए गए उत्तर पर हरे रंग की चेक मार्क डालते हैं।
ज़ीफ़र

1
अगर किसी ने इस पेज के साथ खिलवाड़ नहीं किया है तो मैं इसकी सराहना करूंगा। यदि आपको कोई समस्या है, तो मुझसे संपर्क करें। धन्यवाद।
dbdii407

13
serverfault.com/faq विशेष रूप से शीर्षक "अन्य लोग मेरे सामान को संपादित कर सकते हैं"
Zypher

@Zypher अब आपके द्वारा लिंक किया गया URL मौजूद नहीं है। क्या प्रासंगिक अनुच्छेद कहीं और स्थानांतरित हो गया है?
कैस्परड

जवाबों:


24

अद्यतन करें

यह संभव नहीं है कि वायरलेस (क्लाइंट उर्फ ​​स्टेशन मोड) और वायर्ड इंटरफेस के बीच लाइनक्स-एथ 5k-devel पर इस पुल के बीच पुल हो ।

NAT सेट करें

इसके बजाय NAT सेट करना चाहिए:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

एक आईपी असाइन करना

फिर आपको खुद को आईपी पते सौंपने होंगे:

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Dhcp डेमॉन स्थापित करें

एक dhcp सर्वर स्थापित करें और इसकी कॉन्फिग फ़ाइल में (/etc/dhcpd.conf या कुछ इसी तरह) निम्न पाठ जोड़ें।

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.100 10.0.0.120;
    option routers 10.0.0.1;
    option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}

Dhcpd प्रारंभ करें

फिर इसे /etc/init.d/dhcpd प्रारंभ करें

और बस!

यदि आप गैर-कामकाजी ब्रिजिंग सेटअप में रुचि रखते हैं तो केवल नीचे पढ़ें


brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

सबसे पहले आप एक ब्रिज इंटरफ़ेस बनाते हैं, मैं एक मनमाना नाम का मायब्रिज चुनता हूँ और फिर उसमें इंटीफ्यूज़ जोड़ देता हूँ।

आपको एक नए आईपी पते का अनुरोध करना चाहिए (यह केवल तभी आवश्यक है जब आप ब्रिजिंग डिवाइस के लिए एक वैध आईपी प्राप्त करना चाहते हैं):

dhclient -d mybridge

3
काम करने के लिए ब्रिज ब्रिज के लिए आपको वास्तव में आईपी एड्रेस की आवश्यकता नहीं है।
मासिमो

7
मलबे को जोड़ने के लिए wlan0 को नहीं जोड़ा जा सकता: ऑपरेशन समर्थित नहीं
dbdii407

1
@ मासीमो: हाँ यह सच है। वैध आईपी को "ब्रिजिंग डिवाइस" से शुद्ध करने के लिए आवश्यक है।
cstamas

10
NAT कुछ ब्रिजिंग से पूरी तरह से अलग है। ब्रिजिंग परत दो है, NAT तीन परत है, और IPv4- विशिष्ट है। मुझे समझ नहीं आता कि यह एक स्वीकृत उत्तर क्यों है।
WhyNotHugo

3
@ ह्यूगो आईपी नैट लेयर 3 है, लेकिन मैक नैट लेयर 2 है। वाईफाई ब्रिडिंग के लिए, आप 4addr, WDS, MAC NAT का उपयोग कर सकते हैं या आप लेयर 3 (जैसे IP NAT) पर कुछ कर सकते हैं।
डेविड श्वार्ट्ज

27

वाईफ़ाई इंटरफ़ेस को ब्रिजiw करने के लिए आप 4addr को सक्षम करने के लिए टूल का उपयोग कर सकते हैं :

# iw dev <wifiInterface> set 4addr on

अर्थात:

# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported

# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>

अब यह काम करना चाहिए। आप पुलों का उपयोग करके दिखा सकते हैं:

# brctl show

2
इसके लिए यह सेटिंग क्या है और आप विशेष रूप से इस परिदृश्य में इसका उपयोग करने का सुझाव क्यों देते हैं?
हैकर

यह पुल ऑपरेशन के लिए wlan0 इंटरफ़ेस को जोड़ने की कोशिश करते समय "ऑपरेशन नॉट परमिट" त्रुटि के लिए एक समाधान है। उसके बाद आपको स्टार्टअप के बाद लाए जाने के लिए ब्रिज इंटरफेस को / etc / नेटवर्क / इंटरफेस में निर्दिष्ट करना होगा।
Str82DHeaD

1
@harere 4addrमोड वाईफाई को वायर्ड ईथरनेट की तरह पर्याप्त व्यवहार करता है जो ब्रिजिंग काम करेगा। इसके बिना, NAT के बिना ब्रिजिंग काम नहीं करेगी।
डेविड श्वार्ट्ज

1
4addrआवश्यकता है कि एक वायरलेस लिंक के दोनों पक्ष इसका समर्थन करते हैं (यह मानते हुए कि आप एक वाईफ़ाई एक्सटेंडर को लागू करने की कोशिश कर रहे हैं)
ned

5

निर्भर करता है कि एपी आपके लिए कितना महत्वपूर्ण है:

1) यह केवल आपके ज्ञात लिंक लेयर एड्रेस (और इसलिए ब्रिजेड पैकेट्स का नहीं) से आपके पास आने वाले पैकेट्स को देखना चाहेगा। 2) यह वास्तव में और भी स्मार्ट हो सकता है, और पता है कि आईपी एड्रेस किस लिंक लेयर एड्रेस का होना चाहिए (कारण यह डीएचसीपी जानता है और इसका निरीक्षण करता है)

यदि 1 + 2 दोनों सत्य हैं, तो आपको वास्तव में IP NAT, DHCP, जैसे कुछ चाहिए।

लेकिन अगर केवल 1) मामला है, तो आप लिंक-लेयर पते को नकली कर सकते हैं, और इसे यहां बताए गए दूसरी दिशा में दाईं ओर मैप पर उल्टा कर सकते हैं:

https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC


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

4

4drr जैसा कि अन्य उत्तरों में वर्णित है, निश्चित रूप से एडेप्टर / ड्राइवर द्वारा समर्थित होने पर सबसे अच्छा तरीका है, लेकिन उन सभी को नहीं करता है। NAT कुछ चीजों के लिए काम कर सकता है, लेकिन लैन पर दोनों तरीकों से उचित संचार प्राप्त करना समस्याग्रस्त हो जाएगा (उदाहरण के लिए एक प्रिंटर को कनेक्ट करना या NAT के दूसरी तरफ अन्य IoT उपकरणों तक पहुंचना)। प्रसारण / मल्टीकास्ट (पूर्व-ऑटो-डिस्कवरी, बोनजॉर) पर निर्भर कुछ भी NAT के माध्यम से विफल हो जाएगा।

विकल्प एक एआरपी प्रॉक्सी (parprouted) में वर्णित के रूप उपयोग कर रहा है https://wiki.debian.org/BridgeNetworkConnectionsProxyArp । मैंने इसे एक रास्पबेरी पाई पर एक प्रिंटर के लिए स्थापित किया है और यह एक आकर्षण की तरह काम करता है (मैंने post-upइसे एक आईपी एड्रेस प्राप्त करने के लिए कमांड में 10 सेकंड की नींद जोड़ी है , इसे मेरे पुराने के धीमेपन के साथ करना पड़ सकता है आरपीआई ...)


प्रॉक्सी- arp प्लस dhcp- हेल्पर सॉल्यूशन के लिए यह लिंक अब तक का सबसे अधिक संगत और सबसे अच्छा समाधान है।
मिंगुआ

3

ब्रिज वलान और 4addr:

ब्रिजिंग wlan0 एक दर्द है। आप सामान्य तौर पर इसे ब्रिज इंटरफेस में नहीं जोड़ सकते (brctl रिटर्न "ऑपरेशन की अनुमति नहीं है"), और एआरपीपी और डीएचसीपी संघर्षों की एक बड़ी गड़बड़ी में वर्चुअलबॉक्स "ब्रिजिड" फ़िल्टर परिणामों का उपयोग करते हैं। इसका कारण यह है कि 802.11 फ्रेम में डिफ़ॉल्ट रूप से केवल तीन पते होते हैं: दोनों वायरलेस डिवाइस (लैपटॉप और एपी) के मैक पते और अंतिम प्राप्तकर्ता (ईथरनेट में)। यह हमेशा माना जाता है कि केवल एक ही संभव प्रवर्तक है।

802.11 चौथे, प्रवर्तक के मैक पते को ले जा सकता है, और इसका उपयोग WDS मोड में रिपीटर्स द्वारा किया जाता है। लिनक्स पर भी इस सुविधा को सक्षम किया जा सकता है, iw का उपयोग करके, और इस मोड को सक्षम करने से wlan0 को ब्रिज इंटरफेस में उपयोग किया जा सकेगा, साथ ही साथ वर्चुअलबॉक्स ब्रिजिंग नेटवर्किंग के साथ:

iw dev wlan0 set 4addr on

हालाँकि, 4addr सक्षम होने के साथ, आपको AP द्वारा पूरी तरह से अनदेखा किए जाने की संभावना है: एसोसिएशन सफल होता है, लेकिन सभी डेटा फ़्रेम ईथर में गायब हो जाते हैं। यह सुरक्षा कारणों से हो सकता है (क्योंकि स्रोत मैक पते को खराब करने के लिए यह बहुत मुश्किल है। हाँ।) मेरे राउटर (ओपन आरआरजी में) में, वायरलेस एपी इंटरफ़ेस के लिए "डब्ल्यूडीएस" मोड को सक्षम करना आवश्यक है, मेरे लिए प्रतिबंधित एक डब्ल्यूडीएस डिवाइस जोड़ें। लैपटॉप का मैक पता, और इसे लैन ब्रिज में जोड़ें। 4addr पैकेट अब काम करते हैं।

इसके साथ एक और समस्या है, हालांकि - राउटर अब लैपटॉप से ​​तीन-पते वाले पैकेट को खारिज कर देता है, जो कि असुविधाजनक हो सकता है (हर बार WLAN नेटवर्क बदलने पर 4addr को चालू करने के लिए)। कार्यपट्टी को लैपटॉप पर, उसी डिवाइस से जुड़ा एक दूसरा वायरलेस इंटरफ़ेस जोड़ना है, लेकिन एक अलग मैक पते के साथ। पहले के कॉन्फ़िगरेशन को पूर्ववत करें:

iw dev wlan0 set 4addr off

फिर, एक दूसरा इंटरफ़ेस जोड़ें - नाम को मनमाने ढंग से चुना गया था - एक अलग मैक पते के साथ:

iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up

यहां राउटर में कॉन्फ़िगर किए गए WDS डिवाइस पते से मेल खाना चाहिए; इसके अलावा, यह किसी भी मान्य मैक पते हो सकता है। Wlan0 का मूल मैक तब "सामान्य" उपयोग के लिए रहता है।

यह एक ही समय में wlan0 और wds.wlan0 दोनों का उपयोग करना संभव है - हालांकि मैंने केवल एक ही एपी को दो बार संबद्ध करने का परीक्षण किया है, अलग-अलग एपी के लिए नहीं। मुझे लगता है कि वे कम से कम एक ही चैनल पर होने की आवश्यकता होगी।

कुछ लोगों ने पूछा है कि जब VirtualBox WiFi को "बस ठीक" पुल कर सकता है तो इसका उपयोग क्यों करें। जवाब यह है कि वर्चुअलबॉक्स वर्चुअल मशीन के मैक पते नहीं भेजता है; बल्कि, यह MAC लेयर पर NAT भी करता है। - 2014-08-22

सीधा वलान पुल

कुछ परिस्थितियों में, आप wlan_kabel का भी उपयोग कर सकते हैं। यह पैकेट सॉकेट का उपयोग करता है सीधे ईथरनेट डिवाइस के साथ wlan * -devices को पुल करने के लिए। हालाँकि, आप केवल wlan_kabel के साथ एक बार में एक ही मैक को पा सकते हैं। इसमें एक्सेस पॉइंट्स द्वारा वर्जित होने का दोष नहीं है, क्योंकि केवल wlan डिवाइस के मूल मैक का उपयोग किया जाता है। आपके मामले में इसका मतलब यह होगा कि wlan0 का उपयोग केवल एक वीएम द्वारा किया जा सकता है और मेजबान द्वारा भी नहीं। आप यहाँ wlan_kabel प्राप्त कर सकते हैं । यह macvlans समाधान के समान है ।

IPvlan के साथ ब्रिजिंग

IP Vlan में एक पुल की सीमा नहीं है जिसका उपयोग नेटवर्क विवरणों को पुल करने के लिए किया जा सकता है कि इसका उपयोग कैसे किया जा सकता है यहां पाया जा सकता है

बहाना विकल्प

लिनक्स रूटिंग के बजाय पुल को प्राप्त करने के लिए iptables-masquerade और ip_forward के साथ उपयोग किया जा सकता है लेकिन जैसा कि उल्लेख किया गया है कि ip_forward को सक्षम करने की आवश्यकता है और यह राउटर की तरह linux कार्य करेगा, इसे सावधानी से सेटअप करने की आवश्यकता है क्योंकि यह कुछ सुरक्षा चिंता का परिचय दे सकता है।

# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up

# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24  -j MASQUERADE

इंटरफ़ेस br0 तब wlan0 नेटवर्क तक पहुँच प्राप्त करेगा

महत्वपूर्ण और संबंधित

इसके अलावा, और बहुत महत्वपूर्ण है, आपको ifconfig, brctl , इत्यादि जैसे अप्रचलित, पदावनत आदेशों का उपयोग नहीं करना चाहिए । Iproute2 सुइट में इस सभी के लिए कमांड शामिल हैं, जिसमें वर्चुअल इंटरफेस सेट करना (कुछ जिसके लिए हमें एक बार ओपनवैप का उपयोग करना था) और पुल बनाना शामिल है। यदि आप नहीं जानते कि आईपी के साथ एक पुल कैसे स्थापित किया जाए, तो हम यहां जाते हैं

  ip tuntap add tap0 mode tap user root 
  ip link set tap0 up
  ip link add br0 type bridge
  ip link set tap0 master br0
  ip link set eth0 master br0
  ip addr add 10.173.10.1/24  dev br0
  ip link set br0 up

आदेशों के इस सेट के साथ, हम एक वर्चुअल इंटरफ़ेस बनाते हैं जिसे tap0 कहा जाता है, फिर br0 नामक एक ब्रिज, फिर एंक्लेव eth0 और टैप0 टू ब्रिज, जिस पर हम 10.173.10.1 का IP पता असाइन करते हैं, फिर सभी को लाते हैं। इंटरफेस को ऊपर लाने के तीन अलग-अलग उदाहरणों के लिए (tap0, eth0 और br0 के लिए) आवश्यक हैं।

इस काम को करने के लिए ट्रिक का उपयोग करना है। प्रॉक्सी का उपयोग करें, जो आपके पीसी (आपके वीएम / लिनक्स कंटेनर / नेटवर्क नेमस्पेस) को एआरपी प्रश्नों का उत्तर देने के लिए नहीं देता है।

दूसरे शब्दों में, अपने हार्डवेयर इंटरफ़ेस और अपने वर्चुअल इंटरफ़ेस के बीच IPv4 फॉरवर्डिंग का उपयोग करके, आपको लगता है कि आप अपने VM / LXC / NNS को अपने LAN से कनेक्ट कर सकते हैं जैसे कि यह एक भौतिक इंटरफ़ेस था, लेकिन यह सच नहीं है: आप बिल्कुल भूल रहे हैं मौलिक एआरपी ट्रैफ़िक, जो कि वास्तव में लैन को संचालित करने की अनुमति देता है। तो, समस्या यह है: अगर मैं IPv4 ट्रैफ़िक को सही ढंग से अग्रेषित करता हूं, तो मैं ARP ट्रैफ़िक को कैसे अग्रेषित कर सकता हूं, ताकि मेरा VM / LXC / NNS काम कर सके? छल-छद्म का उपयोग करने के लिए चाल है।

इसका पूरा जवाब बोहदी ज़ज़ेन के ब्लॉग में है , जिसमें खुलासा शीर्षक: ब्रिज वायरलेस कार्ड्स हैं। वह एक अप्रचलित पैकेज का उपयोग करता है, uml- यूटिलिटीज, कमांड टनल के माध्यम से एक वर्चुअल इंटरफेस बनाने के लिए: यह एकमात्र ऐसा कमांड है जिसके लिए वह uml-उपयोगिताओं का उपयोग करता है, ताकि आप सुरक्षित रूप से पैकेज डाउनलोड करने की उपेक्षा कर सकें, और कमांड I का उपयोग कर सकें। एक टैप या ट्यून इंटरफ़ेस बनाने के लिए ऊपर लिखा गया है, जो भी आप चाहें, बस उसी के अनुसार कमांड को संशोधित करें। फिर अपने LXC के लिए एक वेथ पेयर बनाएं, और अब tap0 और veth0 के बीच एक पुल बनाएं। Bohdi Zazen द्वारा बताए गए साधारण टैप0 इंटरफ़ेस के बजाय, br0 नामक यह पुल, जिसके लिए आपको प्रॉक्सी-arp होना चाहिए।


स्रोत: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com


0

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

कदम:

  1. वायरलेस नेटवर्किंग को systemd-networkd के साथ कार्यान्वित करें । .Network फ़ाइल के भीतर, सेट करें IPForward=yes। मैंने वायरलेस नेटवर्क इंटरफ़ेस का प्रबंधन करने के लिए WPA Supplicant का उपयोग किया ।
  2. enable-reflector=yesभीतर सेट करके mDNS रिले सक्षम करें /etc/avahi/avahi-daemon.conf; प्रारंभ करें और सक्षम करें avahi-daemon.serviceयदि यह पहले से ही नहीं है।
  3. AUR से parprouted इंस्टॉल करें , और रास्पियन उत्तर से एक को एडेप्ट करके इसके लिए एक सर्विस फाइल बनाएं । मुझे नहीं लगा कि इंटरफ़ेस को स्थापित करने के लिए जरूरी था कि यह उचित हो। स्वाभाविक रूप से, इस सेवा को शुरू करने और सक्षम करने की आवश्यकता होगी।
[Unit]
Description=proxy arp routing service
Documentation=/raspberrypi//q/88954/79866

[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=6 --quiet
ExecStartPre=/usr/bin/echo 'systemd-networkd-wait-online: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcrelay will relay for the correct subnet
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip addr add $(/usr/bin/ip -4 -br addr show wlan0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/usr/bin/ip link set dev eth0 up

#         v minus sign
ExecStart=-/usr/bin/parprouted eth0 wlan0

ExecStopPost=/usr/bin/ip link set dev eth0 down
ExecStopPost=/usr/bin/bash -c '/usr/bin/ip addr del $(/usr/bin/ip -4 -br addr show eth0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'

[Install]
WantedBy=wpa_supplicant@wlan0.service
  1. ईथरनेट पोर्ट से जुड़े डिवाइस के लिए डीएचसीपी का समर्थन करने के लिए, डीएचसीआर (डीएचसीपी पैकेज से) सेवा बनाएं। लॉग के माध्यम से grep'ing द्वारा डीएचसीपी सर्वर का पता ढूंढना असंगत लगता है, लेकिन यह काम करता है। शुरू करें और सक्षम करें।
[Unit]
Description=DHCRelay Service
After=network-online.target parprouted_bridge.service
Type=simple

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/dhcrelay -d -4 -iu wlan0 -id eth0 $(/usr/bin/journalctl -b -u systemd-networkd.service | /usr/bin/grep -Po "via\s+\K\\d+\\.\\d+\\.\\d+\\.\\d+")'

[Install]
WantedBy=multi-user.target

इस दृष्टिकोण ने मेरे लिए एक Raspberry Pi Model B + w / ArchLinuxArm पर RT5370 चिपसेट के साथ USB WiFi अडैप्टर को स्पोर्ट करने का काम किया। चूंकि पीआई केवल ईथरनेट के साथ एक प्रिंटर को वाईफाई प्रदान करेगा, मैं इसे किसी न किसी हैंडलिंग के लिए मजबूत होना चाहूंगा, इसलिए मेरा अगला कदम एसडी कार्ड को केवल पढ़ने के लिए कॉन्फ़िगर करना होगा ।

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