什么是软路由我就不在重复科普,不知道就直接本站搜文章吧,所以咱直接进入主题。
事情是这样的,几天前网上无意间解到被很多人用来做软路由的R2S开发板自带两个千兆RJ45端口的其中一个千兆网口是用的USB转接的,我立刻想到了我是不是可以买一个USB网卡插在我早些年买来的Intel NUC上实现双网口软路由。
我的NUC是 14年在JD买的
英特尔(Intel)i3-4010U处理器 NUC迷你智能电脑(BOXD34010WYK)京东去购买
型号是 BOXD34010WYK,CPU是i3-4010U,因为用来浏览网页CPU已经有些乏力(用来做路由绰绰有余的多),所以闲置了一两年了,此次就是用它来安装OpenWrt,当然不买USB网卡也可以使用那种旁路由方式,但是我觉得还是有两个物理网口更好。下来简单了就是挑选一个USB网卡,当然首先必须是千兆,最好有使用芯片说明,于是乎在JD找到了绿联的这款
绿联USB3.0千兆有线网卡转RJ45网线接口转换器适用苹果华为笔记本任天堂Switch外置网口扩展坞转接头2025679.9元京东去购买
原因很简单,他明确写着使用了AX88179,而OpenWrt里正好有支持这个片子
https://openwrt.org/packages/pkgdata/kmod-usb-net-asix-ax88179
没错看起来很完美,不到80元,天猫也瞄了下,基本同价,所以我也懒得再货比三家找了,直接下单。
到货后就开整,我的计划是把 OpenWrt 装到 U盘 (虽然也可以装入 NUC 里面内置的硬盘,但是这个要稍微麻烦一些,后面有提到一种顺便的实现方法),现在开始先装系统吧,这个系统安装起来真的非常简单,我的台机是双系统,正好切换到 Ubuntu 系统,所以直接 dd 命令即可。下载当然下载当前最新的版本:19.07.4 (当然你也可以在 这里 下载其他版本),下载完后解压,然后用 dd 命令把镜像写入 U盘
烧录系统到U盘
进入 NUC 的 BIOS 里设置为 U盘 启动,启动后用用网线把你的电脑和 NUC 连起来,记得插自带的网口,因为此时USB网卡还没有驱动所以不能用(官方镜像默认没有这个ax88179的相关驱动,如果有的话我就没有写本篇的必要,其实也是抛砖引玉,如果你是其他芯片的网卡可以类似同步骤),使用 SSH 连默认的地址(OpenWrt 默认是 192.168.1.1)此时就可以登录我们的软路由:
ssh root@192.168.1.1

如果你的 NUC 如果本来就有两个网口(好像 Intel 没出过这种配置的 NUC)的话那么你的 OpenWrt 已经装好,而且会给把一个网口绑到WAN,另一个绑给LAN,文章到此结束,但是我们只有一个,所以现在要做的就是给 USB 网口装上驱动支持,这才是本文的主要内容,因为官方源太慢,我们直接换上清华大学的源:
sed -i 's_downloads.openwrt.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.conf
源换完了就是安装了,但是等等,现在还不能上网,因为电脑连它时占用了它“唯一”的网口,所以我们现在修改配置来让他上网,首先打开 /etc/config/network 文件,此时文件应该是这样的:

我们给他加三行内容来配置 wan 口

嗯,没错 注意我把 lan 的 ifname 换成 eth1 ,让 wan 使用 eth0 (你可能会问,现在还没有eth1啊,是的没错,我们先这么写,因为我们要用eth0作为wan口让它能上网,而且这个也是一次性的后面有了eth1也不需要再改这个配置文件),配置好以后,我们还需要做一件事,就是配置防火墙,让我们一会儿可以从 wan 口连入(嗯,不配置你会很惨,我就掉这坑了,希望你不要掉进去),打开 /etc/config/firewall ,加入图中的六行规则:

嗯,关机,重启,此时拔掉网线(连接你电脑这头的),插入到你电脑原来连的上游路由器(或者交换机)上,其实就是把他当成一个电脑连入你家网络里,让你的电脑此时可以访问它,完成后你就需要上你插入的那个上游路由(或者交换机等开着dhcp服务的设备)看软路由拿到了什么ip,然后就依然是用 ssh 命令访问它
ssh root:192.168.81.158 (注意,我这里这个是分配到了这个ip,你要看自己的)
好了,此时我们可以安装USB网卡的驱动了,先 update :

然后找 ax88179 的包名并安装

很好,此时我们看到一共装了 以下5个包(其他4个是依赖包),其实如果你再装可以直接从源那边下载好这些ipk,用scp复制到软路由直接安装,可以省很多前面的步骤……(但这个是后话)。
- kmod-libphy
- kmod-nls-base
- kmod-usb-core
- kmod-usb-net
- kmod-usb-net-asix-ax88179
此时我们去看网络接口,应该可以看到多出来一个 eth1 :

没错,此时我们实际要做的事情已经完工了,但是我们还需要测试一下速度,如何测试呢,我是这样的:我拔掉我电脑上的原来连路由的线,现在插入到我们软路由的USB网口中,此时我们在网络上其他设备(可以是和软路由一个网段的其他机器)上跑一个 iperf3 server,然后我们在再我们电脑上跑一个iperf3 client 就可以了:
先跑server (我是在之前的上游路由器里运行的)

再跑 client (电脑上运行)

哈哈,估计有人看到了,我上级路由依然是个软路由,没错就是那个 ip 是 192.168.81.1 的设备 J4105,这个是题外话先按下不表,现在我有两个软路由了,第二个总共花费79元和不到1小时的时间。功耗大概6~10W的样子,

因为现在是个裸的OpenWrt设备,所以CPU占用非常低,但是这才是折腾软路由的万里长征的第一步啊,后面才是最精彩的部分,后面能写很多东西,比如常见的 luci、 samba、 dnsmasq、frp、ddns 等等,有的简单安装后就可以用(luci),有的需要你各种配置(samba、dnsmasq、ddns),甚至需要一个外部服务器协同才可以(frp)……,以后慢慢来吧。建议你一定把 luci 装上:
opkg install luci
有了 luci 后很多操作都可以用浏览器来完成。写在最后也该是我的 NUC 露个脸的时候了
新的软路由真容
有人说外挂个u盘不好看,其实你要用里面的内置硬盘也可以,现在就用 dd 命令把u盘复制到内置硬盘里,然后就可以拔掉U盘了,最后还有个问题dd后遗症,就是就是你登陆软路由系统后发现U盘(或者内置硬盘)只有两百多兆的空间,我们可以使用fdisk 和 resize2fs 把丢掉的空间找回来(来自 https://openwrt.org/docs/guide-user/installation/openwrt\_x86 我简单翻译一下),以下是假定你的u盘(或内置硬盘)设备是/dev/sdb,需要根据自己的情况修改(郑重提醒,fdisk 操作有风险,如果弄错了可能会把你其他存储设备分区表搞坏)。
安装 fdisk 和resize2fs(貌似我得ubuntu默认都有)
用 fdisk 显示分区表
记下/dev/sdb2的开始扇区地址
用 fdisk 删除第二块分区(就是 sdb2), 先不要写入(就是不用用w命令)
用 fdisk 创建新的第二块分区, 分区起始扇区位置使用你刚才在第三步记录的 (不要用默认的,默认的不对), 结束扇区使用默认,因为默认就是到最后(就是整个可用空间)
写入分区表变更到U盘. 系统在创建的最后一步会问你已经有一个分区签名在选择的位置, 输入 n 不要删除分区签名.
使用命令: resize2fs /dev/sdb2 增大文件系统的分区大小(刚才fdisk改分区表,现在改文件系统)。
引用官网的图

有人可能看到了其实你在我们的软路由上也可以装个fdisk来做修改分区表这个事情,但是后面的 resize2fs 修改文件系统的事情却还是要到其他设备上操作(因为此时文件系统已经挂载正在使用,ext4并不支持这样的online操作),所以还不如一开始就拔下来u盘插在电脑上操作,其实为啥全文都用的ubuntu系统在搞,这就是方便之处,如果在windows上其实也可以做 不过你要去各种地方下一各种软件来做,包括但不限于 Win32 Disk Imager或 Etcher 、putty 等等软件,太麻烦所以我推荐你用 Ubuntu(当然其他发行版都行看你喜欢),如果你没有现成安装好的 Ubuntu 系统那么就下载一个 ISO,烧录到另外一个u盘,后面用该U盘启动你的电脑,不用安装,只是选择 Try Ubuntu 然后里面打开 Terminal 就可以用了。
总结
有时候我们用闲置的设备再买一些辅助的东西就能再“利用”,还能锻炼自己的动手能力,如果你能看完文章,估计你应该是个软路由玩家或者有一定动手能力,否则肯定没耐心看到这里,肯定有些高手对于我里面有些步骤不太认同,毕竟我水平有限,比如可以重新编译把 ax88179 驱动直接编译进去,当用dd命令后系统就接近完成,省了很多文中步骤……,当然文中这些个只是我自己当时的一个想法和后来一个逐步实现过程的记录,并不非常严谨和完美,仅供大家参考和避坑,如果有错误的地方请指正,当然有更好的方法也欢迎您和大家分享。