树莓派 Zero W 的USB/以太网应用一例


来自 Archer 的投稿,感谢~

前些日子突发奇想,想用树莓派 Zero W 做成S*P*Y无线网卡来玩,用Openwrt来做,不过怎么做都不成功,于是我就换个思路,做成以太网卡如何?我就用树莓派连通我的SPI网卡,把USB-OTG接口配置成USB/以太网,SPI网卡连接路由器,USB-OTG连接电脑,来实现以太网卡功能,没想到在Raspbian系统之下能顺利这么多,一试一下就行了。

首先是连接SPI网卡,我在前面有教程详细叙述,这里就不多做赘述了。

先修改/boot/config.txt文件,在最末尾添加这两段语句

dtoverlay=dwc2
dtoverlay=enc28j60

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

modules-load=dwc2,g_ether

然后保存退出。
再用sudo raspi-config,在interfaces选项中,打开SPI接口,这样树莓派Zero的两边接口都连通了。
安装一下所需要的dhcp软件

sudo apt-get update
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

添加一下段落(或者修改到跟以下段落一样)

# 表示使用localhost
auto lo 
iface lo inet loopback
 
# eth0 自动获取IP
auto eth0
iface eth0 inet dhcp
 
# usb0 为静态IP
auto usb0
iface usb0 inet static
address 192.168.253.1
netmask 255.255.255.0

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

sudo service dhcpcd restart

重启dhcp失败了也不要紧,可以直接重启树莓派。

sudo reboot

重启过后,修改网段配置文件

sudo nano /etc/udhcpd.conf
start 192.168.253.100 #配置网段
end 192.168.253.150
interface usb0 # The device uDHCP listens on.
remaining yes
opt dns 192.168.1.1 223.5.5.5
opt subnet 255.255.255.0
opt router 192.168.253.1 # 无线lan网段
opt lease 3600 # 租期一小时

之后备份一下文件/etc/dnsmasq.conf

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

然后编辑

sudo nano /etc/dnsmasq.conf

添加一下段落的文件(或者修改到跟以下段落一样)

interface=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 eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o usb0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i usb0 -o eth0 -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

然后重启树莓派。

到此,树莓派以太网卡就成功了。把USB-OTG接口用一根USB手机数据线,连接到电脑,SPI网卡连接到路由器,就可以上网了。
这样做是有点大炮打苍蝇的感觉,但是这两个网卡的神奇之处在于,每一次重启,USB-OTG网卡和SPI网卡的MAC地址就会变化,从硬件上就很适合做成匿名设备,假如再往里面加塞点匿名服务和抓包软件,将会是一个完美的匿名硬件设备,凭MAC地址无法被锁定。
速度也测试了一下,迅雷全速下载能到400Kb/s,碍于SPI接口的速度问题,全速时CPU使用率在60%。
这种大炮打苍蝇的网卡,我开着nload和htop,看着网速和CPU使用率,我会有点什么莫名的满足感,针友们(探针爱好者)应该能理解。
教程就到这里,希望各位能够挖掘出更多的玩法。

参考教程:
http://shumeipai.nxez.com/2017/10/10/raspberry-pi-spi-netword-configuration-tutorial.html
http://shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html
http://shumeipai.nxez.com/2018/03/13/raspberry-pi-double-network-cards-for-wireless-hotspot.html

— 更多尝试和思考的分割线 —

树莓派实验室小编按:作者 Archer 希望在 OpenWRT 尝试把USB-OTG接口配置成USB/以太网,因此做了下面的实验。
实验目的是把树莓派Zero W的OTG接口作为网络接入口,给其他计算设备直接分配IP地址,树莓派Zero W自带的无线作为无线接入点,为树莓派Zero W提供网络。

网络数据路线是:
外部无线网络 -> 树莓派Zero W 无线芯片(WLAN接口)-> 树莓派USB-OTG网口(LAN接口)-> 目标电脑的USB接口

这次试验最好有一根可靠的USB-TTL线,不然会痛不欲生:)

系统版本最好使用 OpenWRT 18.06,因为在 OpenWRT 17.04 上,根本不会显示gadget网卡。
OTG 作为USB网口,需要有自带的 USB-gadget-eth 驱动,因此会需要下列软件包:
kmod-usb-core kmod-usb-gadget kmod-usb-gadget-eth kmod-usb-lib-composite kmod-usb-dwc2 kmod-usbip kmod-usbip-client kmod-usbip-server kmod-fs-configfs kmod-nls-base

如果你是编译玩家,在编译系统时,把上述软件包选上,还要注意不要选到任何跟 kmod-usb-net 有关的host模式驱动包。使用官方系统的,可以在烧录完官方镜像后,在其他Linux计算机的辅助下,把所有包放在root文件夹之下,然后opkg逐个安装:

uci set wireless.radio0.disabled=0
uci commit 
reboot

执行完这三条指令之后,树莓派就会开启无线,你会执行得轻松一点。
修改 /boot/config.txt,往文本末尾加一行:

dtoverlay=dwc2

再修改/etc/rc.local,在exit0前加一行:

modprobe g_ether

下次开机,就会自动加载gadget-eth网卡驱动,然后把ZW的OTG口接上安卓手机数据线连到电脑,你的电脑就能感知到RNDIS设备了。
接下来只要开着网页,把usb0接口添加到lan界面,就可以了。

然后问题来了,usb0接口没有分配到正确的IP地址。可是软件层面的问题,如果你有办法通过配置解决这个问题,欢迎与我联系(QQ 854715850)~


1 评论

  1. 这个玩法还能扩展,第一,装上树莓派仪表盘开着网页,估计是针友们最高兴的玩法了。第二,可以吧eth0换成wlan0来实现无线网卡玩法。至于openwrt我真的搞不定,希望各路高手给我支个招,谢谢。

发表评论

你的邮件地址不会公开


*