找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lou 于 2020-5-7 14:21 编辑

透过树莓派 ZeroW 的 RNDIS 实现一个无线网卡



121.jpg

一篇来自Archer 的投稿,详细介绍了使用树莓派 ZeroW 的RNDIS 功能实现一个无线网卡,可以给需要联网的设备共享网络。
啊,之前一直在祷念把树莓派ZeroW做成无线网卡用一直不成功,现在终于成功了,来分享一下我的做法和一些心得。

步骤一

首先找一张新的TF卡,刷个新系统,然后

  1. sudo raspi-config
复制代码

调整好树莓派ZeroW的基础设置。
然后修改文件开始连接网络

  1. sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
复制代码

在该文件最后加上

  1. network={

  2.     ssid="自家WIFI"

  3.     psk="WIFI密码"

  4. }
复制代码

重启后即可连上无线网络

  1. sudo nano /boot/config.txt
复制代码

在文件最后加入

  1. dtoverlay=dwc2
复制代码

然后再修改/boot/cmdline.txt文件,找到 rootwait,在后面插入

  1. modules-load=dwc2,g_ether
复制代码

插入后保存退出
重启后,即可连上USBRNDIS网络,具体连接方式请参考往期文章
https://shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html
联网成功之后,开始更新和安装软件

  1. sudo apt-get update

  2. sudo apt-get upgrade

  3. sudo apt-get dist-upgrade

  4. sudo apt-get install dnsmasq isc-dhcp-common
复制代码

步骤二

修改/etc/dhcpcd.conf文件,

  1. sudo nano /etc/dhcpcd.conf
复制代码

在文件末尾添加这两句

  1. interface usb0

  2. static ip_address=192.168.253.1/24
复制代码

然后再修改/etc/network/interfaces文件

  1. sudo nano /etc/network/interfaces
复制代码

添加一下段落

  1. auto usb0

  2. iface usb0 inet static

  3. address 192.168.253.1

  4. netmask 255.255.255.0
复制代码

修改完毕之后,重启dhcp服务

  1. sudo service dhcpcd restart
复制代码

修改网段配置文件

  1. sudo nano /etc/udhcpd.conf
复制代码

添加以下段落

  1. interface=usb0

  2. bind-interfaces

  3. server=180.76.76.76

  4. server=114.114.114.114

  5. server=223.5.5.5

  6. domain-needed

  7. bogus-priv

  8. dhcp-range=192.168.253.2,192.168.253.254,1h
复制代码

然后再修改文件dhcp规则文件之一的/etc/sysctl.conf

  1. sudo nano /etc/sysctl.conf
复制代码

在末尾添加以下内容

  1. # Uncomment the next line toenable packet forwarding for IPv4

  2. net.ipv4.ip_forward=1
复制代码

添加完毕之后,设置转发规则

  1. sudo iptables -F

  2. sudo iptables -X

  3. sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE

  4. sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT

  5. sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT

  6. sudo sh -c "iptables-save> /etc/iptables.ipv4.nat"
复制代码

再往/etc/network/interfaces末尾添加一下内容。

  1. sudo nano /etc/network/interfaces
复制代码

添加以下语句

  1. up iptables-restore < /etc/iptables.ipv4.nat
复制代码

然后保存退出
再编辑一下文件

  1. sudo nano /etc/network/if-pre-up.d/iptables
复制代码

往里面添加以下段落

  1. #!/bin/bash

  2. /sbin/iptables-restore < /etc/iptables.ipv4.nat
复制代码

保存退出之后,设置一下权限

  1. sudo chmod 755 /etc/network/if-pre-up.d/iptables
复制代码

我们需要新建空文件/lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat,

  1. sudo vi /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat
复制代码

然后输入 :wq回车退出
再设置一下转发

  1. sudo iptables-restore < /etc/iptables.ipv4.nat
复制代码

重启一下dnsmasq服务

  1. sudo service dnsmasq start
复制代码

然后编辑域名服务器(DNS)文件

  1. sudo nano resolv.conf
复制代码

写入以下内容

  1. # Generated by resolvconf

  2. domain lan

  3. nameserver 127.0.0.1

  4. nameserver (路由器或者网关的IP)

  5. nameserver 180.76.76.76
复制代码

然后再编写可执行的sh文件

  1. sudo nano network .sh
复制代码

文件如下

  1. sudo cp /home/pi/resolv.conf /etc/resolv.conf

  2. sudo /etc/init.d/networking restart

  3. sudo iptables -F

  4. sudo iptables -X

  5. sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE

  6. sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT

  7. sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT
复制代码

然后赋予可执行权限

  1. sudo chmod 0777 / home/pi/network.sh
复制代码

然后向开机运行脚本rc.local添加语句

  1. sudo nano /etc/rc.local
复制代码

在exit0之前添加一下语句:

  1. sudo ifup wlan0

  2. sudo ifconfig wlan0 up

  3. sudo wpa_supplicant -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf  -B

  4. sudo ifconfig wlan0 192.168.150.163(无线网卡参与的IP地址)

  5. sleep 120

  6. sudo cp /home/pi/resolv.conf /etc/resolv.conf

  7. sudo /etc/init.d/networking restart

  8. sudo iptables -F

  9. sudo iptables -X

  10. sudo iptables -t nat -APOSTROUTING -o wlan0 -j MASQUERADE

  11. sudo iptables -A FORWARD -i wlan0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT

  12. sudo iptables -A FORWARD -i usb0 -o wlan0 -j ACCEPT

  13. sleep 120

  14. sudo /home/pi/network.sh

  15. sudo /home/pi/network.sh

  16. sudo /home/pi/network.sh

  17. sudo /home/pi/network.sh

  18. sudo /home/pi/network.sh

  19. sudo /home/pi/network.sh

  20. 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地址有问题,请各路大神指教。
其他用法:
来试试树莓派绑定局域网共享文件夹的测试,希望把磁盘阵列的大容量能运用到树莓派上面。
首先在Windows10的局域网盘服务端上,先做以下准备工作
先去控制面板—程序那里,找到 启用或关闭Windows功能

122.jpg
然后把SMB/CIFS相关服务全开了

123.jpg

再然后去网络设置那里,把所有网络的设置设为对网络共享有利的选项

124.jpg

(修改专用网络和所有网络即可)

然后去用户账户控制(控制面板搜索UAC),新建一个有密码的用户,我就新建跟树莓派一样的,然后对着你要共享的文件夹右击找到“授予访问权限” 的选项,设置共享,用户名就用新建跟树莓派一样的那个,免得跟你正在使用的用户冲突。

125.jpg

然后知道共享网络那里看到你要的共享文件夹,那就成功了。
树莓派端的准备:
安装网络访问软件包

  1. sudo apt-get install smbclient  smbfs cifs-utils  ntfs-3g avahi-daemon
复制代码

这些软件包
在安装完毕之后重启树莓派
对树莓派打以下指令,探测网盘,smbclient -L //192.168.253.66 -U pi
192.168.253.66是我的电脑的服务器内网IP,pi是我自定的用户名,你们按照自己的需要进行修改
然后绑定用如下指令sudo mount -t cifs //192.168.253.66/TDDOWNLOAD2 /home/pi/data -ousername=pi
/home/pi/data是我指定的挂载点,你们按照你们的状况进行修改 ,这样基本上就绑定成功了。

126.jpg
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册