通过以太网端口共享Pi的WiFi连接


28

我有一个运行最新版raspbian的pi,它使用无线USB加密狗连接到Internet。我想做的是共享pi的wifi连接,以便使用LAN电缆连接到pi的任何计算机都可以接收Internet。我环顾了互联网,但似乎找不到任何相关的信息。我对Windows和Mac OS X上的此过程很熟悉,但是在pi上执行此操作却让我感到困惑。

编辑:我不知道这是否有帮助,但是我通过wlan0连接到我的pi上的Internet,但是我想通过eth0共享该Internet连接。


在Pi上桥接WiFi和以太网连接,然后将其插入路由器会更简单。这对您的应用程序可行吗?
tlhIngan

不幸的是,@ tlhIngan没有,您看到我没有访问任何以太网套接字的权限,我需要从PXE引导笔记本电脑,这必须由以太网完成。另外,我想了解有关Linux的更多信息,并且我认为构建该项目会使我对Linux更有信心。我认为这将是一个更简单的解决方案,因为我的路由器一直在我家各处:/总之,感谢您的答复。

我发现此教程视频正是您所需要的:youtu.be/IAa4tI4JrgI Raspberry PI共享从wifi到以太网端口的互联网。
Mia19 '16

@tlhIngan-您能详细说明吗?创建网桥是否也需要路由器?我希望网络音频接收器通过以太网共享我的Pis WiFi,并与主路由器位于同一子网和DHCP中。
square_eyes

Answers:


40

对于Raspbian Jessie

从此文件

我们将dnsmasq为此目的使用软件包,因为它是DHCP和DNS服务器的组合,并且易于配置。

如果您想要更多“重量级”的东西,可以分别将 isc-dhcp-serverbind9包用于DHCP和DNS,但就我们的目的而言,它dnsmasq可以正常工作。

sudo apt-get install dnsmasq

我们需要配置接口。我们将分配一个静态IP地址 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"

我们还需要与通过Wi-Fi连接的设备共享RPi的互联网连接。我们将在eth0和 之间配置NAT 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  

但是,每次重新启动Pi时都需要应用这些规则,因此请运行 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  

就这样!现在,只需重新启动RPi,您就可以访问Internet

sudo reboot

更新了Raspbian Stretch

以上配置在Raspbian的较新版本中不起作用。因此,我为此创建了一个脚本,该脚本可以减轻痛苦。

使用指南连接到WiFi网络。

此处下载脚本。放在/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
非常感谢你。刚刚在我的pi上测试了一下,连接很好!再次感谢您的宝贵时间。我很感激。

1
这非常适合与无线设备共享Internet连接。但是,我想从网络中的另一台笔记本电脑访问该设备,但这不起作用。我猜是因为它们位于不同的子网中?有什么建议可以解决吗?
比约恩·安德森

1
它工作得很好,尽管在Raspbian Stretch下,我不得不手动将WiFi配置包含到/ etc / network / interfaces中
xfx

1
@xfx,能否请您显示为WiFi配置添加的代码?
karl71 '17

1
我仔细地关注了您的帖子和链接。我的Pi(只是做了一个全新的OS安装),每当我添加“ static”一词时,它甚至都无法连接到wifi ...
karl71's

6

作为您的目标是为您的LAN设备提供Internet访问,将假定双重“ NAT”不会成为大问题。
使用此配置,您将提供对非WiFi设备的无线访问,这将从互联网访问中受益。
画画

先决条件

确保您的Wi-Fi配置正确并且可以正常工作。如果出现问题,您对设备的访问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服务器

修改默认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;
}

IP表

现在,创建以下脚本以在每次重新启动时设置并启动网络。该脚本将动态创建一些“ 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用于管理网络,该网络与dhcpcdRaspbian的默认设置不兼容。使用备用管理器没有任何问题,但是您应该禁用它dhcpcd(答案是间接执行此操作,这dhcp将导致dhcpcd停止)。它还将阻止GUI中的WiFi支持。
Milliways

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$
Luke_R
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.