ईथरनेट पोर्ट के माध्यम से पाई के वाईफाई कनेक्शन को साझा करना


28

मेरे पास रसियन की नवीनतम रिलीज़ को चलाने वाला एक पाई है और यह वायरलेस USB डोंगल का उपयोग करके इंटरनेट से जुड़ा है। मैं जो करना चाहूंगा, वह है पीआई के वाईफाई कनेक्शन को साझा करना, ताकि लैन केबल का उपयोग करके पाई से जुड़ा कोई भी कंप्यूटर इंटरनेट प्राप्त कर सके। मुझे इंटरनेट पर चारों ओर एक नज़र थी लेकिन मैं प्रासंगिकता के बारे में कुछ भी नहीं जान सकता। मैं विंडोज और मैक ओएस एक्स पर इस प्रक्रिया से परिचित हूं, लेकिन पी पर ऐसा करने से मुझे बस स्टंप हो गया है।

संपादित करें: मुझे नहीं पता कि इससे किसी को मदद मिलती है या नहीं, लेकिन मैं wlan0 के माध्यम से अपने पीआई पर इंटरनेट से जुड़ा हुआ हूं, लेकिन मैं एथ0 के माध्यम से उस इंटरनेट कनेक्शन को साझा करना चाहूंगा।


पाई पर अपने वाईफाई और ईथरनेट कनेक्शन को ब्रिज करना और राउटर में प्लग करना सरल होगा। क्या आपके आवेदन के लिए यह संभव है?
tlhIngan

@tlhIngan दुर्भाग्यपूर्ण रूप से नहीं, आप देखते हैं कि मेरे पास किसी भी ईथरनेट सॉकेट तक पहुंच नहीं है और मुझे अपने लैपटॉप को पीएक्सई से बूट करने की आवश्यकता है, जो ईथरनेट द्वारा किया जाना है। इसके अलावा, मैं लिनक्स के बारे में अधिक जानना चाहता हूं, और मुझे लगा कि इस परियोजना के निर्माण से मुझे लिनक्स के साथ थोड़ा और विश्वास मिलेगा। मैंने सोचा कि यह एक आसान समाधान होगा क्योंकि मेरा राउटर मेरे घर भर में है: / फिर भी, आपके उत्तर के लिए धन्यवाद।

मुझे यह ट्यूटोरियल वीडियो वही मिला है जिसकी आपको आवश्यकता है: youtu.be/IAa4tI4JrgI रास्पबेरी PI इंटरनेट से शेयर करता है यह वाईफाई से ईथरनेट पोर्ट तक जाता है।
मिया १

@tlhIngan - क्या आप विस्तृत कर सकते हैं? क्या पुल बनाने के लिए राउटर की भी आवश्यकता होगी? मैं चाहता हूं कि मेरा नेटवर्क ऑडियो रिसीवर ईथरनेट पर मेरे पिस वाईफाई को साझा करे और मेरे मुख्य राउटर के समान सबनेट और डीएचसीपी पर हो।
square_eyes

जवाबों:


40

के लिए Raspbian जेसी

से इस दस्तावेज़ :

हम dnsmasqइस उद्देश्य के लिए पैकेज का उपयोग करेंगे क्योंकि यह डीएचसीपी और डीएनएस सर्वर संयुक्त है और कॉन्फ़िगर करना भी आसान है।

यदि आप कुछ अधिक 'हैवीवेट' चाहते हैं, तो आप क्रमशः डीएचसीपी और डीएनएस के लिए isc-dhcp-serverऔर bind9पैकेज का उपयोग कर सकते हैं, लेकिन हमारे उद्देश्यों के लिए, dnsmasqयह ठीक काम करता है।

sudo apt-get install dnsmasq

हमें इंटरफेस को कॉन्फ़िगर करने की आवश्यकता है। हम एक स्थिर आईपी पता प्रदान eth0करेंगे, जिसका उपयोग गेटवे के रूप में किया जाएगा। इंटरफेस फ़ाइल खोलें

sudo nano /etc/network/interfaces

eth0इस तरह से अनुभाग संपादित करें :

allow-hotplug eth0  
iface eth0 inet static  
    address 192.168.2.1
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255

अगला, हम कॉन्फ़िगर करेंगे dnsmasq। शिप की गई dnsmasqकॉन्फ़िगर फ़ाइल में इसका उपयोग करने के तरीके के बारे में बहुत सारी जानकारी है। इसलिए, मैं इसे स्थानांतरित करने और एक नया बनाने की सलाह दूंगा।

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
sudo nano /etc/dnsmasq.conf

निम्न को नई फ़ाइल में पेस्ट करें

interface=eth0      # Use interface eth0  
listen-address=192.168.2.1 # listen on  
# Bind to the interface to make sure we aren't sending things 
# elsewhere  
bind-interfaces
server=8.8.8.8       # Forward DNS requests to Google DNS  
domain-needed        # Don't forward short names  
# Never forward addresses in the non-routed address spaces.
bogus-priv
# Assign IP addresses between 192.168.2.2 and 192.168.2.100 with a
# 12 hour lease time
dhcp-range=192.168.2.2,192.168.2.100,12h 

/etc/sysctl.confपैकेट अग्रेषण सक्षम करने के लिए फ़ाइल को संपादित करें

sudo nano /etc/sysctl.conf

#इस पंक्ति की शुरुआत से निकालें net.ipv4.ip_forward=1यह अगले रिबूट पर पैकेट अग्रेषण को सक्षम करेगा। लेकिन अगर आप इसे रिबूट के बिना अभी कोशिश करना चाहते हैं तो ऐसा करें।

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

हमें आरपीआई के इंटरनेट कनेक्शन को वाई-फाई से जुड़े उपकरणों के साथ साझा करना होगा। हम बीच में एक NAT कॉन्फ़िगर करेंगे eth0और wlan0:

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE  
sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT  

हालाँकि, हमें इन नियमों को लागू करने की आवश्यकता है, जब हम पाई को रिबूट करते हैं, इसलिए sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" नियमों को फ़ाइल में सहेजने के लिए चलाएं /etc/iptables.ipv4.nat। अब हमें प्रत्येक रिबूट के बाद इसे चलाने की आवश्यकता है, इसलिए /etc/rc.localफ़ाइल sudo nano /etc/rc.localको लाइन के ऊपर और बस के साथ खोलें exit 0, निम्न पंक्ति जोड़ें:

iptables-restore < /etc/iptables.ipv4.nat  

और बस यही! अब बस अपने आरपीआई को रिबूट करें और आप इंटरनेट का उपयोग कर पाएंगे

sudo reboot

रास्पियन स्ट्रेच के लिए अपडेट किया गया

उपरोक्त कॉन्फ़िगरेशन रास्पबियन के नए संस्करण में काम नहीं करेगा। इसलिए, मैंने इसके लिए एक स्क्रिप्ट बनाई है जो कम दर्द में इसे संभव बनाती है।

इस गाइड का उपयोग करके वाईफाई नेटवर्क से कनेक्ट करें ।

स्क्रिप्ट यहां से डाउनलोड करें । पर रखें/home/pi/

/home/pi/.config/lxsession/LXDE-pi/autostartफ़ाइल खोलें

nano /home/pi/.config/lxsession/LXDE-pi/autostart

अंतिम पंक्ति जोड़ें:

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
sudo bash /home/pi/wifi-to-eth-route.sh

सुनिश्चित करें कि आपने फ़ाइल को पूर्ण पथ दिया है। और आपने कल लिया। अब परिवर्तनों को देखने के लिए रीबूट करें

sudo reboot

1
आपका बहुत बहुत धन्यवाद। बस मेरी पाई पर यह परीक्षण किया और कनेक्शन ठीक था! फिर से अपने समय के लिए धन्यवाद। मैं इसकी सराहना करता हूं।

1
यह एक वायरलेस डिवाइस के साथ इंटरनेट कनेक्शन साझा करने के लिए उत्कृष्ट है। हालाँकि, मैं अपने नेटवर्क में किसी अन्य लैपटॉप से ​​डिवाइस को एक्सेस करना चाहता हूं और यह काम नहीं करता है। मुझे लगता है कि यह इसलिए है क्योंकि वे अलग-अलग सबनेट में हैं? इसके आसपास पाने के लिए कोई टिप?
ब्योर्न एंडरसन

1
यह पूरी तरह से काम करता है, हालांकि रास्पियन स्ट्रेच के तहत, मुझे वाईफाई कॉन्फ़िगरेशन को / etc / नेटवर्क / इंटरफेस में शामिल करना था
xfx

1
@xfx, क्या आप कृपया WiFi कॉन्फिगर के लिए जोड़ा गया कोड दिखा सकते हैं?
karl71

1
मैंने आपकी पोस्ट और लिंक का ध्यानपूर्वक अनुसरण किया। माई पाई (बस एक नया ओएस स्थापित किया गया), जब भी मैं "स्थिर" शब्द जोड़ता हूं, तो यह वाईफाई से कनेक्ट करने में भी सक्षम नहीं है ...
karl71

6

आपका उद्देश्य आपके LAN उपकरणों को इंटरनेट एक्सेस प्रदान करना है, मान लेंगे कि डबल 'NAT' एक बड़ा मुद्दा नहीं होगा।
इस कॉन्फ़िगरेशन के साथ आप गैर-वाईफाई उपकरणों को वायरलेस एक्सेस प्रदान करेंगे जो इंटरनेट एक्सेस से लाभान्वित होंगे।
चि त्र का री

शर्त

सुनिश्चित करें कि आपका वाई-फाई ठीक से कॉन्फ़िगर और काम कर रहा है। अगर कुछ खराब हो जाता है, तो डिवाइस तक आपकी पहुंच eth0सीमित या अक्षम हो जाएगी।

सेट अप

शुरू करने के लिए हमें कुछ पैकेज चाहिए:

apt-get update
apt-get install network-manager isc-dhcp-server

इंटरफेस

/etc/network/interfacesनिम्नलिखित से मिलान करने के लिए फ़ाइल को संपादित करें , यह आपके eth0 को एक फिक्स IP पता (10.10.10.1) निर्धारित करेगा और पुनः बनाएगा resolv.conf

auto lo
iface lo inet loopback

iface default inet dhcp

allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.1
  network 10.10.10.0
  netmask 255.255.255.0
  broadcast 10.10.10.255
  gateway 10.10.10.1

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  up cat /etc/resolv.conf | sed 's/ver /ver 127.0.0.1,/g' > /etc/resolv_local.conf
  up cat /etc/resolv.conf | sed 's/ver /ver 127.0.0.1,/g' > /etc/resolv.conf

डीएचसीपी

dhcpइसे आधिकारिक बनाने के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन को संशोधित करें और LAN नेटवर्क (10.10.10। *) /etc/dhcp/dhcpd.confजोड़ें, फ़ाइल को संपादित करें , निम्न सामग्री जोड़ें:

# configuration for the bridge internal subnet.
subnet 10.10.10.0 netmask 255.255.255.0 {
  range 10.10.10.101 10.10.10.119;
  option domain-name-servers 8.8.8.8;
  option domain-name "domain.local";
  option routers 10.10.1.1;
  default-lease-time 600;
  max-lease-time 7200;
}

iptables

अब सेटअप करने के लिए निम्न स्क्रिप्ट बनाएं और हर रिबूट पर नेटवर्क शुरू करें। स्क्रिप्ट गतिशील रूप से कुछ 'IPTABLES' नियम बनाएगी। इसे नाम दें /root/bridge.sh:

#!/bin/bash
LOCAL_IFACE=eth0
INET_IFACE=wlan0

# this is where the dhcp info comes in. We need the default gateway
# /var/lib/dhcp/dhclient.wlan0.leases
f=/var/lib/dhcp/dhclient.$INET_IFACE.leases
GATEWAY=$(cat $f| grep "option route" | tail -1 |awk '{print $3}'| sed 's/;//')

IPT=$(which iptables)
# get the wlan address
INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' |awk -F$

# Flush the tables
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -t nat -F

$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

# Allow forwarding packets:
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Packet masquerading
$IPT -t nat -A POSTROUTING -o $INET_IFACE  -j SNAT --to-source $INET_ADDRESS
$IPT -t nat -A POSTROUTING -o $LOCAL_IFACE -j MASQUERADE

# save the created tables 
iptables-save > /etc/network/iptables

#cat /proc/sys/net/ipv4/ip_forward
# make sure we are forwarding packets
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl --system > /dev/nul

#remove the default route, usually on eth0 interface
route del default
#ifdown $INET_IFACE  && ifup $INET_IFACE
#ensure is $INET_IFACE now...
route add default gw $GATEWAY $INET_IFACE
gw=$(route -n -A inet | grep '^0.0.0.0' |awk '{ print $2 }')
echo "default route is now " $gw

आखिरकार

अंत में, आपको प्रत्येक रिबूट पर स्क्रिप्ट को चलाने की आवश्यकता है, exit 0इससे पहले बनाई गई स्क्रिप्ट को चलाने के लिए फ़ाइल पर पहले दो पंक्तियाँ जोड़ दें `/etc/rc.local '।

# will run the bridge on startup
sudo ./root/bridge.sh

अब, बस अपने डिवाइस को पुनरारंभ करें और पुल आपके लिए काम कर रहा होगा।

pd: sudoसंक्षिप्तता के लिए छोड़ा गया था। sudo -iEसत्र के रूप में उपयोग करेंroot


वाह! इतने विस्तृत उत्तर के लिए बहुत-बहुत धन्यवाद! मुझे कभी नहीं लगा कि यह इतना जटिल होगा, लेकिन मुझे लगता है कि मैं इससे निपट सकता हूं। फिर से धन्यवाद, मैं इसे कुछ घंटों में आज़माऊंगा और अगर यह काम करता है तो मैं आपको जवाब के रूप में चिह्नित करूंगा। बहुत बहुत धन्यवाद

@GrowlingSolid यह उतना जटिल नहीं होना चाहिए। आपके पास network-managerनेटवर्क का प्रबंधन करने के लिए उत्तर है , जो कि असंगत है dhcpcd, जो कि रास्पियन के लिए डिफ़ॉल्ट है। एक वैकल्पिक प्रबंधक का उपयोग करने में कुछ भी गलत नहीं है, लेकिन आपको अक्षम करना चाहिए dhcpcd(इसका उत्तर अप्रत्यक्ष रूप dhcpसे होता है क्योंकि dhcpcdयह बंद हो जाएगा )। यह जीयूआई में वाईफाई समर्थन को काम करने से भी रोकेगा।
मिलिविज

1
मैंने खुद को सूचित किया है और INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' | awk -F ":" '/1/ {print $2}')आपकी बजाय इस सही लाइन पर आया हूं: आपका "झूठा" संस्करण था:INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' |awk -F$
ल्यूक_आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.