树莓派 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使用率,我会有点什么莫名的满足感,针友们(探针爱好者)应该能理解。 教程就到这里,希望各位能够挖掘出更多的玩法。 参考教程: https://shumeipai.nxez.com/2017/10/10/raspberry-pi-spi-netword-configuration-tutorial.html https://shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html https://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)~