本文是树莓派爱好者投稿文章,授权树莓派爱好者基地发放,请勿转载!否则承担相应法律责任!
本文作者 如下, 如果对作者有兴趣或者对本文有什么异议或者疑问可以直接与作者联系沟通,也可以加群和作者讨论。
也欢迎大家前来投稿!!!一起建设树莓派生态,一起玩转树莓派!!!投稿邮箱如下:
教程开始
一、给zero w写好一个官方系统,然后连接上无线网络,具体联网方式可以参考树莓派爱好者基地新手教程中的连接wifi教程
二、修改配置文件
sudo nano /boot/config.txt
在文件最后加入
dtoverlay=dwc2
然后再修改/boot/cmdline.txt文件,找到 rootwait,在后面插入
modules-load=dwc2,g_ether
插入后保存退出
重启后,即可连上USB RNDIS网络
三、联网成功后,开始更新安装软件
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install dnsmasq isc-dhcp-common
四、修改配置文件
修改 /etc/dhcpcd.conf文件
sudo nano /etc/dhcpcd.conf
在文件末尾添加这两句
interface usb0
static ip_address=192.168.253.1/24
然后再修改 /etc/network/interfaces文件
sudo nano /etc/network/interfaces
添加一下段落
auto usb0
iface usb0 inet static
address 192.168.253.1
netmask 255.255.255.0
五、修改完毕之后,重启dhcp服务
sudo service dhcpcd restart
六、修改网段配置文件
sudo nano /etc/udhcpd.conf
添加以下段落
nterface=usb0
bind-interfaces
server=180.76.76.76
server=114.114.114.114
server=223.5.5.5
domain-needed
bogus-priv
dhcp-range=192.168.253.2,192.168.253.254,1h
然后再修改文件dhcp规则文件之一的/etc/sysctl.conf
sudo nano /etc/sysctl.conf
在末尾添加以下内容
#Uncomment the next line toenable packet forwarding for IPv4
net.ipv4.ip_forward=1
七、添加完毕之后,设置转发规则
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT
sudo sh -c "iptables-save> /etc/iptables.ipv4.nat"
八、再往/etc/network/interfaces末尾添加一下内容。
sudo nano /etc/network/interfaces
添加以下语句
up iptables-restore < /etc/iptables.ipv4.nat
然后保存退出
再编辑一下文件
sudo nano /etc/network/if-pre-up.d/iptables
往里面添加以下段落
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.ipv4.nat
保存退出之后,设置一下权限
sudo chmod 755 /etc/network/if-pre-up.d/iptables
我们需要新建空文件/lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat,
sudo vi /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat
然后输入 :wq 回车退出
再设置一下转发
sudo iptables-restore < /etc/iptables.ipv4.nat
九、重启一下dnsmasq服务
sudo service dnsmasq start
十、然后编辑域名服务器(DNS)文件
sudo nano resolv.conf
写入以下内容
#Generated by resolvconf
domain lan
nameserver 127.0.0.1
nameserver (路由器或者网关的IP)
nameserver 180.76.76.7
十一、然后再编写可执行的sh文件
sudo nano network .sh
文件如下
sudo cp /home/pi/resolv.conf /etc/resolv.conf
sudo /etc/init.d/networking restart
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT
然后赋予可执行权限
sudo chmod 0777 / home/pi/network.sh
十二、然后向开机运行脚本rc.local添加语句
sudo nano /etc/rc.local
在exit0之前添加一下语句:
sudo ifup wlan0
sudo ifconfig wlan0 up
sudo wpa_supplicant -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
sudo ifconfig wlan0 192.168.150.163(无线网卡参与的IP地址)
sleep 120
sudo cp /home/pi/resolv.conf /etc/resolv.conf
sudo /etc/init.d/networking restart
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT
sleep 120
sudo /home/pi/network.sh
sudo /home/pi/network.sh
sudo /home/pi/network.sh
sudo /home/pi/network.sh
sudo /home/pi/network.sh
sudo /home/pi/network.sh
exit 0
十三、然后重启树莓派。
这样在重启的四分钟之后,树莓派ZeroW就会作为RNDIS设备给电脑转发无线网络,若不能正确联网,就用ssh登录192.168.253.1,多次运行network.sh,就能正确连接网络。
若要连接其他wifi,需要修改的地方有三处
/etc/wpa_supplicant/wpa_supplicant.conf上面,wifi的ESSID和密码
/home/pi/resolv.conf 上面nameserver 192.168.150.1(路由器或者网关的IP)
/etc/rc.local 上面sudo ifconfig wlan0 192.168.150.163(无线网卡参与的IP地址)
首先这玩意很不实用,不建议各位拿来实际使用,因为树莓派启动转发服务需要两分钟时间,所以在rc.local的语句中,有sleep 120(延时120秒启动后面服务项的语句),而且每次重启之后,那些转发设置、DNS服务器,会全部重置,需要额外开机启动设置,所以特别麻烦,只适合有嵌入式无线设备开发的玩家,算是给各位一个思路。要是openwrt的gadget_ether能用的话,实用性会比现在的raspbian强太多,不过就是软件层面分配IP地址有问题,请各路大神指教