我有一个运行最新版raspbian的pi,它使用无线USB加密狗连接到Internet。我想做的是共享pi的wifi连接,以便使用LAN电缆连接到pi的任何计算机都可以接收Internet。我环顾了互联网,但似乎找不到任何相关的信息。我对Windows和Mac OS X上的此过程很熟悉,但是在pi上执行此操作却让我感到困惑。
编辑:我不知道这是否有帮助,但是我通过wlan0连接到我的pi上的Internet,但是我想通过eth0共享该Internet连接。
我有一个运行最新版raspbian的pi,它使用无线USB加密狗连接到Internet。我想做的是共享pi的wifi连接,以便使用LAN电缆连接到pi的任何计算机都可以接收Internet。我环顾了互联网,但似乎找不到任何相关的信息。我对Windows和Mac OS X上的此过程很熟悉,但是在pi上执行此操作却让我感到困惑。
编辑:我不知道这是否有帮助,但是我通过wlan0连接到我的pi上的Internet,但是我想通过eth0共享该Internet连接。
Answers:
对于Raspbian Jessie
从此文件:
我们将
dnsmasq
为此目的使用软件包,因为它是DHCP和DNS服务器的组合,并且易于配置。如果您想要更多“重量级”的东西,可以分别将
isc-dhcp-server
和bind9
包用于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
和 之间配置NATwlan0
: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
作为您的目标是为您的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
配置以使其具有权威性并添加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”规则。命名/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
network-manager
用于管理网络,该网络与dhcpcd
Raspbian的默认设置不兼容。使用备用管理器没有任何问题,但是您应该禁用它dhcpcd
(答案是间接执行此操作,这dhcp
将导致dhcpcd
停止)。它还将阻止GUI中的WiFi支持。
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$