记一次软路由折腾记录(Esxi封装驱动、OpenWrt编译与DDNS、Truenas)
- 前言
- 方案选择
- 软件系统
- 硬件选择
- Esxi
- 封装驱动
- 安装Vmware PowerCli
- 封装驱动
- 硬件直通
- 封装驱动
- OpenWrt
- 编译
- 阿里云DDNS
- DDNS开机不启动的问题
- TrueNas
- 设置中文不生效
- 硬盘无法休眠
- 时区问题
- Chrome端口的坑
前言
春节在家,偶然看到了一个关于介绍ipv6的视频,抱着试试的态度,给自家的移动光猫做了桥接,发现竟然拿到了Ipv6前缀,没想到我这「高贵的移动内网用户」竟然第一次有了公网地址,甚是兴奋。
很久之前就想在家里放个NAS当个下载器和网盘使用。国内比较成熟的家用NAS方式方案有比如群辉,威联通等,但奈何囊中羞涩,一直没能狠下心。虽然家里也有一些老旧的电脑可以用来做NAS,但是功耗感人还不如直接买成品。更主要的问题是,一是家里没有公网IP,虽然这些NAS都提供了很成熟的外网访问家中文件的方案,但是没有公网IP的前提下,只能走他们的服务器,没多少可玩性;二则我到没有多高的需求,只是想有个可以随时能访问的个人网盘,直接买成品有点不值得。
现在有了公网IP,一些就都好说了,不仅可以不花一分钱实现外网访问,不仅网盘、下载器,还可以随时访问家里的电脑,整个旧电脑当做Linux开发机放家里。
不过家里的淘宝爆款路由器实在没多少功能,无法堪此重任,直到后来了解到软路由这个东西,可以随心所欲的定制化,这不就是我要找的东西嘛。
折腾完毕特此记录一下。这不是一篇软路由的教程,只是记录一些折腾过程中遇到的一些坑,希望对你有所帮助。
方案选择
简单梳理了一下自己的需求,发现自己想要的也就那么多:
- 一个稳定好用的支持IPv6路由器系统,可方便设置的防火墙功能
- 目前手头有一个闲置的阿里云域名,能够实现阿里云动态域名解析
- 一个简单好用的NAS系统,可以支持Docker,支持硬盘休眠(基本所有NAS系统都支持,但是在虚拟机上就不一定了
软件系统
通过调研,网上很多All in one的方案都可以满足需求。
为了在一台物理机上能够同时跑路由系统和NAS系统,只能选择虚拟机方案了。虽然也有一些软路由系统里跑NAS的骚操作,但是路由还是做好自己的本职工作为好。最后选择了VMware Esxi 7.0,VMware官网注册个账号即可获得永久免费使用的LICENCE。
就路由器系统而言,目前比较出名的有OpenWrt和iKuai。OpenWrt是基于Linux系统开发的开源嵌入式Linux发行版,并且提供了众多的官方软件包,且网上也有很多第三方开发的软件包可以使用。iKuai是国内厂商开发的免费版路由系统,个人猜测也是基于Linux开发的。不仅适应国内环境使用(比如天生支持阿里云DDNS),并且提供了丰富的功能,但是对硬件要求较高(内存至少2GB起步),而且扩展性不佳,且防火墙比较难用。综合比较之下,选择了OpenWrt。
再就是NAS系统的选择了,开源方案有unRaid,TrueNAS,OMV,破解方案有黑群晖。本想选择黑群晖,但折腾了一下后发现问题频出,无奈换回了开源方案。由于之前使用过TrueNAS,所以选择了TrueNAS Scale。
硬件选择
最开始在淘宝上选择了倍控的成品软路由,配置四个2.5G网口,J4125 CPU准系统,需要自己加内存硬盘。但是买回来后在硬盘休眠上遇到了问题。因为要实现硬盘休眠,必须要将SATA控制器直通给NAS系统,这个系统只有一个SATA控制器,将这唯一一个SATA控制器直通给TrueNAS虚拟机后,Esxi宿主机就没法用了,没有办法只能换货,也只能怪自己前期没能调研好。
最后思量之下,又选择了倍控店里N5100 CPU的另一款,和J4125只是CPU不同,一样的价格,最重要的是支持M.2 Nvme硬盘。这样就可以让Esxi宿主机使用Nvme控制器,把SATA控制器直通给NAS虚拟机了。此外,虽然发现很多人都选择的是N5105款的,N5100款几乎没人用。但是N5105款据别人使用体验来看发热巨大,N5100 TDP只有6W,感觉相比于N5105 的10W来说可能会好一点,并且我的系统是要跑在虚拟机上,也不需要太考虑兼容性了。
Esxi
关于Esxi申请许可证和安装使用,网上已经有很多大佬的文章介绍的很详细了,我这里不在赘述。下面主要记录一下驱动封装和硬件直通的事。
封装驱动
由于我购买的软路由成品是Intel I226V网卡,发布没多久。安装Esxi的过程中遇到的第一个问题就是无法识别网卡。所以必须手动将驱动封装到Esxi镜像。封装好的镜像也已经上传到网盘,有需要可以自取。
安装Vmware PowerCli
vmware文档中给出了安装安装方法:
- 首先再在PowerCli主页下载PowerCli Zip文件
- 使用以下命令检查 PowerShell 模块路径:
$env:PSModulePath
。 - 将 ZIP 文件的内容提取到其中一个列出的文件夹中。
- 使用命令
cd <path_to_powershell_modules_folder>
和Get-ChildItem * -Recurse | Unblock-File
取消阻止这些文件。
之后可以使用Get-Module -Name VMware.PowerCLI -ListAvailable
命令验证 PowerCLI 模块是否可用。
封装驱动
准备好Esxi的离线捆绑包和社区版驱动程序,下载下来的文件无需解压。社区版的驱动程序可在vmware flings进行下载,这里驱动程序的接受程度都是「合作伙伴支持」级别的,所以无需担心封装不上或不能用,但要注意与Esxi版本匹配。
这里以封装net-community驱动为例进行演示:
打开PowerShell,将软件包添加到工作区:
PS> Add-EsxSoftwareDepot -DepotUrl ./VMware-ESXi-7.0U3g-20328353-depot.zip
PS> Add-EsxSoftwareDepot -DepotUrl ./Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
PS> Get-EsxSoftwareDepot # 返回当前环境中软件库列表
Depot Url
---------
zip:C:\Users\Home\esxi\VMware-ESXi-7.0U3g-20328353-depot.zip?index.xml
zip:C:\Users\Home\esxi\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip?index.xml
通过克隆新建映像配置文件
PS> Get-EsxImageProfile #查看当前可用的映像配置文件
Name Vendor Last Modified Acceptance Level
---- ------ ------------- ----------------
ESXi-7.0U3g-20328353-no-tools VMware, Inc. 2022/8/23 3:... PartnerSupported
ESXi-7.0U3g-20328353-standard VMware, Inc. 2022/9/1 0:0... PartnerSupported# 克隆映像配置文件,myesxi为映像配置文件的名称,author为作者,可随意更改
PS> New-EsxImageProfile -CloneProfile ESXi-7.0U3g-20328353-standard -Name myesxi -Vendor author
向映像配置文件中添加驱动程序
PS> Add-EsxSoftwarePackage -ImageProfile myesxi -SoftwarePackage net-community
net-community
为驱动软件包的名字,其名称可以通过新开一个工作区,并通过 Get-EsxSoftwarePackage
命令查看:
重新打开一个PowerShell窗口,执行:
# 只将驱动软件包添加到工作区
PS> Add-EsxSoftwareDepot -DepotUrl .\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
# 获取当前工作区的软件包
PS> Get-EsxSoftwarePackage
Name Version Vendor Creation Date
---- ------- ------ -------------
net-community 1.2.7.0-1vmw.700.1.0.15843807 VMW 2022/3/10 21:...
其中的Name列就是驱动的名字了。
4.导出ISO镜像
PS> Export-EsxImageProfile -ImageProfile myesxi -ExportToIso -FilePath myesxi.iso
执行完成就可在当前目录下看到封装好的myesxi.iso文件,之后就可开始安装Esxi了。
关于更多驱动封装的细节,也可参考官网文档
硬件直通
对于一些硬件,可以直接在Esxi的PCI设备选项里切换直通,但是有些设备(例如SATA控制器),这里的选项却是灰色的,则需要编辑/etc/vmware/passthru.map
文件。例如直通SATA控制器,在该文件添加:
# SATA controller passthrough
8086 4dd3 d3d0 default
其中,8086是供应商ID,4dd3是设备ID,这两项每个人可能不同,可以在下图位置查看。至于第三、四列,具体含义passthru.map
文件里详细阐述。保存后重启,就可在PCI设备选项里看到SATA控制器可以直通了。
OpenWrt
编译
没什么特殊需求的话使用官方的镜像包即可,不过感觉都折腾了,不如手动编译一下试试。
网上有很多流传的编译好的OpenWrt高大全版,虽然功能丰富,但是对我来说大都没什么用。而那些编译好的精简版,又满足不了自己的需求。并且路由系统还是按照最小化原则,万一路由挂了直接就断网了。
OpenWrt编译的话也没什么困难的,只需要几步就可以。其中最重要的是保证良好的网络环境,因为很多软件包都在国外,网络环境不好很容易因为下载失败编译失败。
编译环境需要Linux,物理机和虚拟机都可以,不过推荐Windows WSL2,只需一条命令就能安装,简单方便。我这里使用的WSL2 Debian 11。其他Linux发行也可以按照官网文档搭建自己的编译环境。
注意:openwrt编译时要求PATH不能包含空格,如果使用WSL2的话,由于WSL2会自动将C盘的一些目录加入PATH,所以会使得PATH中带有空格。
可以先执行
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
临时改变PATH。
首先安装编译所需的一些软件包:
sudo apt update
sudo apt install build-essential clang flex g++ gawk gcc-multilib gettext \
git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev \
file wget
克隆openwrt仓库到本地。当然,如果不想用git克隆整个仓库的话,到release直接下载源码包也可以:
git clone https://github.com/openwrt/openwrt.git
cd openwrt
git checkout v22.03.3 # 签出自己需要的版本
然后拉取最新feed并安装:
./scripts/feeds update -a
./scripts/feeds install -a
第一步会将feeds.conf.default
文件中列出的仓库拉取到本地,第二步会让这些软件包在make menuconfig
可用。如果要使用第三方软件包的话,可以在package
目录下创建一个目录(目录名随意),然后将第三方软件包克隆到该目录下,然后再执行上面的的命令即可,如:
mkdir -p package/mypackage
git clone git@github.com:renndong/ddns-scripts-aliyun.git package/mypackage/ddns-scripts-aliyun
执行make menuconfig
定制编译选项。
这部分需要依据自己的需求进行选择,不过多介绍了,需要注意的是,对于I226V网卡,需要为其在「Kernel module」> 「Network Devices」中选上kmod-igc驱动(kmod-igc说明写的是I225,实际上在22.03版本之后也是支持I226的)。官方编译的固件会默认选择该驱动。
最后执行编译即可:
make download V=s # 先下载必要的软件包,需要确保网络通畅
make -jN V=s | tee compile.log # 编译
其中N
编译时的线程数,建议指定为电脑CPU的线程数。这里很多教程都设置为1,其实并不推荐,多设置几个线程可以大大节省编译时间。
编译结束后,即可在bin
目录里边找到编译好的镜像包。
阿里云DDNS
openwrt的官方包并没有提供aliyun的ddns功能,虽然网上有一些阿里云ddns的基本,但折腾了一圈都没搞定,后来看了看官方的包的源码,发现写起来也不是特别复杂,于是自己写了个也勉强够用,代码和用法都放在了Github, 效果个人还算满意
DDNS开机不启动的问题
在对设备pppoe-wan
做了ddns后,还遇到另一个问题是:尽管已经设置了ddns的开机启动,但是ddns服务还是无法开机自启。看了网上的一些文章,大概是因为ddns和pppoe冲突导致的。在pppoe拨号完成前,ddns已经启动,但是此时的pppoe还没建立连接,ddns找不到pppoe设备,导致ddns又停止。
网上解决方法大概有两种:一是设置一个定时任务,定期检查ddns的状态,停止了就再拉起来。但这种的问题是实时性不强。另一种是在/etc/ppp/ip-up.d
建立脚本,每当ppp建立连接后会调用该目录下的脚本,用脚本重启ddns服务即可。但是这种方法试了一下没能搞定。
后来在openwrt官网上找到另一种方法是使用Hotplug。在/etc/hotplug.d/iface
目录下建立一个脚本,每当网络接口发生改变时,openwrt都会按照字典序依次调用该目录下的脚本。当然hotplug不单单有监测网络变化的功能,更多用法和功能可以参考官网文档
附上我的脚本:
# /etc/hotplug.d/iface/99-pppoe-ddns
# 检查是否是wan_6接口启动,启动后等待5秒重启ddns服务
[ ifup = "$ACTION" ] && [ wan_6 = "$INTERFACE" ] && {sleep 5 && /etc/init.d/ddns restart &
}
TrueNas
设置中文不生效
我使用的是TrueNAS-SCALE-22.12.0版本。社区的一个帖子给出了解决方法,其原因是因为WebUI的i18n文件内容不全导致的,找不到国际化内容时自动降级到英文,重新替换i18n文件即可解决:
# 进入i18n文件所在目录
cd /usr/share/truenas/webui/assets/i18n/
# 备份原始文件
mv zh-hans.json zh-hans.json.bak
# 下载正确的文件到此处
wget https://raw.githubusercontent.com/truenas/webui/master/src/assets/i18n/zh-hans.json
之后再设置中文即可生效了。
硬盘无法休眠
起初设置了硬盘的休眠时间,但是经过测试发现并不起作用。后来也就没管它,但是晚上机械硬盘真的太吵,脑瓜子嗡嗡的,后来实在受不了。按照官方社区的讨论:
- 将「系统数据集池」改为
boot-pool
,这样系统的日志就不会写到机械硬盘所在的池 - 将smart的电源模式更改为「待机」,这样机械硬盘休眠时就不会执行smart检测,也就不会唤醒硬盘
但是经过上面的两个步骤还是无法休眠,使用命令hdparm -y /dev/sdc
手动使硬盘进入休眠,但是过了几秒又被自动唤醒。使用iotop
命令,发现dockerd和k3s进程一直在读写磁盘
将应用程序的所在池改为SSD后,再手动使硬盘休眠,世界瞬间安静了。之后再设置自动休眠也起效了。
时区问题
Truenas每次重启后都提示浏览器时间和主机的时间不对。原因在Esxi上,Esxi使用的是UTC时区(并且没有办法更改),但是Esxi默认设置是同步浏览器时间作为自己的UTC时间,浏览器时间为东八区时间,显然不对。解决方法是Esxi使用NTP服务去获取时间就好了。
Chrome端口的坑
对于一些端口,Chrome以及其他一些浏览器禁止了包括HTTP,HTTPS, FTP在内的TCP访问,以防止NAT Slipstreaming 2.0攻击。此外,Chrome也禁止了69, 137, 161, 554, 1719, 1720, 1723, 5060, 5061,和6566端口上的HTTP,HTTPS和FTP访问。Google Chrome blocks port 10080 to stop NAT Slipstreaming attacks
记一次软路由折腾记录(Esxi封装驱动、OpenWrt编译与DDNS、Truenas)相关推荐
- 水星路器服务器无响应,联想M720Q、光网卡、Pon stick、Openwrt我的完美软路由折腾记...
联想M720Q.光网卡.Pon stick.Openwrt我的完美软路由折腾记 2020-11-11 15:43:09 26点赞 208收藏 74评论 一直以来就是个完美党(其实就是zuo) ,之前的 ...
- docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...
我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能 2020-06-20 11:28:38 57点赞 415收藏 74评论 你是AMD Yes党?还 ...
- 软路由折腾日记(一)
欢迎移步博主小站:白亮吖雅黑丫の小站 软路由折腾日记(一) 简介 1.安装Lede系统 ①准备 ②进bios设置U盘启动 ③进PE ④磁盘分区 ⑤开始装机 ⑥配置下级路由ip 简介 昨天入手一套d25 ...
- asuswrt 单臂路由_我的软路由折腾-斐讯N1单臂路由设置
我的软路由折腾-斐讯N1单臂路由设置 2020-07-26 23:11:52 58点赞 738收藏 86评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动 ...
- 树莓派3B实现软路由过程记录(无线网络通过网线共享给台式机)
树莓派3B实现软路由过程记录 背景 实验过程 准备openwrt固件 向TF卡里刷入固件 设置路由器 总结 背景 实验室有一台台式机电脑,没有无线网卡,之前一直使用有线网上网,但体验极差.后实际测试时 ...
- esxi怎么传输文件到虚拟机_软路由篇2:3865U软路由折腾记——Esxi软虚拟机+OpenWrt教程
继篇1的直装OpenWrt教程,很多小伙伴在评论里面说"这么好的配置只装OpenWrt软路由系统,有点奢侈浪费",那么本篇就来了.本篇将会就如何安装虚拟机Esxi系统,以及在虚拟机 ...
- 二手MicroServer Gen8折腾记 - 配置 RouterOS 软路由
我之前宽带一直都是光猫拨号,电脑和NAS直连光猫,光猫下挂个二级无线路由器来给其他设备联网,但我早就对这个拓扑不爽了,主要原因是自己花大钱买的AC86U派不上用场,只能干点边缘的杂活,而且搞两套局域网 ...
- 软路由折腾记(一)openwrt
软路由 虚拟机安装软路由测试 先在虚拟机上安装软路由进行测试,找出问题并解决和记录. 然后在实体机上操作,更加快. 安装平台:VMware Workstation 找到对应的教程:Vmware搭建软路 ...
- 从零开始的软路由之爱快虚拟机搭建openwrt
缘起 上篇文章我们介绍了爱快软路由的搭建方法,成功了实现了软路由的初级布置--能上网了.接下来就是搭建双软路由中的另一个openwrt了,上期介绍了爱快的特点,主要是用来多拨,分流,流控等操作,在这些 ...
最新文章
- 也谈压缩感知和贝叶斯大脑
- [转] MongoDB 入门
- mysql命令行语句_MySql命令行命令和SQL语句
- php开源 饭馆记账软件_GitHub - CNYoki/xxjzWeb: 小歆记账WebApp项目(Web服务端)
- Codeforces-743D - Chloe and pleasant prizes(树dp)
- 单片机模块学习之键盘
- 怎样用c语言写超市管理程序,C语言超市收银管理系统实现程序.doc
- numpy 索引多个_Numpy基础三,学习Python编程必备
- mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...
- java 编程字体_Java 是否可以为整个应用程序设置自定义字体?
- Android lsof查看已打开文件
- 在propreties文件中引用另一个properties文件中的内容
- R语言基于S3的面向对象编程
- 变量不在选择列表中_Python3中的表达式运算符
- 基于RGB图像的机器人抓取算法汇总
- Dijkstra + 堆优化
- iphone之参数知识(一)
- MFC-CEdit派生一个只允许输入16进制数据的新类
- 【echarts高级用法】在地理坐标系中镶嵌柱状图,在加上时间轴让图动起来
- 手机链游撼动腾讯王者荣耀?Nova Battles更具潜力