#1 楼
对于Raspbian Jessie来自本文档:
我们将为此使用
dnsmasq
软件包,因为它是结合使用的DHCP和DNS服务器,也很容易配置。
如果您想要更多“重量级”的东西,可以分别将
isc-dhcp-server
和bind9
软件包分别用于DHCP和DNS,但出于我们的目的,
dnsmasq
工作正常。sudo apt-get install dnsmasq
我们需要配置接口。我们将为
eth0
分配一个静态IP地址,该地址将用作网关。打开接口文件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
编辑
/etc/sysctl.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
从包含
#
的行的开头删除net.ipv4.ip_forward=1
将在下次重新启动时启用数据包转发。但是,如果您想立即尝试而不重启,请执行。
sudo nano /etc/sysctl.conf
我们还需要与通过Wi-Fi连接的设备共享RPi的Internet连接。我们将在
eth0
和wlan0
之间配置NAT: ,因此请运行sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
将规则保存到文件
/etc/iptables.ipv4.nat
中。现在我们需要在每次重新启动后运行此文件,因此使用
/etc/rc.local
并在sudo nano /etc/rc.local
行上方打开exit 0
文件,然后在行以下添加:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
仅此而已!现在,只需重新启动RPi,您就可以
访问Internet
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
针对Raspbian Stretch进行了更新
以上配置在Raspbian的较新版本中无效。因此,我为此创建了一个脚本,以减轻痛苦。
使用本指南连接到WiFi网络。
从此处下载脚本。将其放在
/home/pi/
打开
/home/pi/.config/lxsession/LXDE-pi/autostart
文件iptables-restore < /etc/iptables.ipv4.nat
添加最后一行:
sudo reboot
请确保已提供文件的完整路径。这样就完成了。现在重新启动以查看更改
nano /home/pi/.config/lxsession/LXDE-pi/autostart
评论
非常感谢你。刚刚在我的pi上测试了一下,连接很好!再次感谢您的宝贵时间。我很感激。
–user47488
16年7月21日在17:34
这非常适合与无线设备共享Internet连接。但是,我想从网络中的另一台笔记本电脑访问该设备,但这不起作用。我猜是因为它们位于不同的子网中?有什么建议可以解决吗?
–BjörnAndersson
17年3月18日在13:40
它运行完美,尽管在Raspbian Stretch下,我不得不手动将WiFi配置包含到/ etc / network / interfaces中
–xfx
17年9月14日在9:49
@xfx,能否显示您为WiFi配置添加的代码?
–karl71
17年11月10日在21:26
我仔细地关注了您的帖子和链接。我的Pi(只是重新安装了操作系统),每当我添加“静态”一词时,它甚至都无法连接到wifi ...
–karl71
17年11月11日在9:45
#2 楼
作为您的目标是为您的LAN设备提供Internet访问,将假定双“ NAT”不会成为大问题。使用此配置,您将为非WiFi设备提供无线访问,这将从Internet访问中受益。
前提条件
请确保您的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.10.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 }'| sed 's/;//')
IPT=$(which iptables)
# get the wlan address
INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print }' |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 }')
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
评论
哇!非常感谢您提供如此详细的答案!我从来没有意识到它会那么复杂,但是我认为我可以解决它。再次感谢您,我将在几个小时内尝试一下,如果可以,我会将您标记为答案。非常感谢
–user47488
16年4月4日在7:59
@GrowlingSolid应该没有那么复杂。答案是您使用network-manager来管理网络,该网络与dhcpcd不兼容,而dhcpcd是Raspbian的默认设置。使用备用管理器没有任何问题,但是您应该禁用dhcpcd(答案是间接执行此操作,因为dhcp将导致dhcpcd停止)。它还将阻止GUI中的WiFi支持。
–地铁
16-6-26在4:27
我已通知自己,并来到了正确的行而不是您的行: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
2017年12月6日18:26
dhcpd.conf选项路由器应该是10.10.1.1还是10.10.10.1?错别字?
–大卫
20年8月21日在23:57
评论
在Pi上桥接WiFi和以太网连接并将其插入路由器会更简单。这可能适合您的应用程序吗?不幸的是,@ tlhIngan没有,您看到我无权访问任何以太网套接字,并且我需要从PXE引导笔记本电脑,这必须通过以太网来完成。另外,我想了解有关Linux的更多信息,并且我认为构建该项目会使我对Linux更有信心。我认为这将是一个更简单的解决方案,因为我的路由器一直在我家各处:/无论如何,谢谢您的答复。
我发现此教程视频正是您所需要的:youtu.be/IAa4tI4JrgI Raspberry PI共享从wifi到以太网端口的互联网。
@tlhIngan-您能详细说明吗?创建网桥是否也需要路由器?我希望网络音频接收器通过以太网共享我的Pis WiFi,并与主路由器位于同一子网和DHCP。