目录
  • 前言
  • 方案选择
    • 软件系统
    • 硬件选择
  • Esxi
    • 封装驱动

      • 安装Vmware PowerCli
      • 封装驱动
    • 硬件直通
  • OpenWrt
    • 编译
    • 阿里云DDNS
      • DDNS开机不启动的问题
  • TrueNas
    • 设置中文不生效
    • 硬盘无法休眠
    • 时区问题
    • Chrome端口的坑

前言

春节在家,偶然看到了一个关于介绍ipv6的视频,抱着试试的态度,给自家的移动光猫做了桥接,发现竟然拿到了Ipv6前缀,没想到我这「高贵的移动内网用户」竟然第一次有了公网地址,甚是兴奋。

很久之前就想在家里放个NAS当个下载器和网盘使用。国内比较成熟的家用NAS方式方案有比如群辉,威联通等,但奈何囊中羞涩,一直没能狠下心。虽然家里也有一些老旧的电脑可以用来做NAS,但是功耗感人还不如直接买成品。更主要的问题是,一是家里没有公网IP,虽然这些NAS都提供了很成熟的外网访问家中文件的方案,但是没有公网IP的前提下,只能走他们的服务器,没多少可玩性;二则我到没有多高的需求,只是想有个可以随时能访问的个人网盘,直接买成品有点不值得。

现在有了公网IP,一些就都好说了,不仅可以不花一分钱实现外网访问,不仅网盘、下载器,还可以随时访问家里的电脑,整个旧电脑当做Linux开发机放家里。

不过家里的淘宝爆款路由器实在没多少功能,无法堪此重任,直到后来了解到软路由这个东西,可以随心所欲的定制化,这不就是我要找的东西嘛。

折腾完毕特此记录一下。这不是一篇软路由的教程,只是记录一些折腾过程中遇到的一些坑,希望对你有所帮助。

方案选择

简单梳理了一下自己的需求,发现自己想要的也就那么多:

  1. 一个稳定好用的支持IPv6路由器系统,可方便设置的防火墙功能
  2. 目前手头有一个闲置的阿里云域名,能够实现阿里云动态域名解析
  3. 一个简单好用的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文档中给出了安装安装方法:

  1. 首先再在PowerCli主页下载PowerCli Zip文件
  2. 使用以下命令检查 PowerShell 模块路径:$env:PSModulePath
  3. 将 ZIP 文件的内容提取到其中一个列出的文件夹中。
  4. 使用命令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)相关推荐

  1. 水星路器服务器无响应,联想M720Q、光网卡、Pon stick、Openwrt我的完美软路由折腾记...

    联想M720Q.光网卡.Pon stick.Openwrt我的完美软路由折腾记 2020-11-11 15:43:09 26点赞 208收藏 74评论 一直以来就是个完美党(其实就是zuo) ,之前的 ...

  2. docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...

    我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能 2020-06-20 11:28:38 57点赞 415收藏 74评论 你是AMD Yes党?还 ...

  3. 软路由折腾日记(一)

    欢迎移步博主小站:白亮吖雅黑丫の小站 软路由折腾日记(一) 简介 1.安装Lede系统 ①准备 ②进bios设置U盘启动 ③进PE ④磁盘分区 ⑤开始装机 ⑥配置下级路由ip 简介 昨天入手一套d25 ...

  4. asuswrt 单臂路由_我的软路由折腾-斐讯N1单臂路由设置

    我的软路由折腾-斐讯N1单臂路由设置 2020-07-26 23:11:52 58点赞 738收藏 86评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动 ...

  5. 树莓派3B实现软路由过程记录(无线网络通过网线共享给台式机)

    树莓派3B实现软路由过程记录 背景 实验过程 准备openwrt固件 向TF卡里刷入固件 设置路由器 总结 背景 实验室有一台台式机电脑,没有无线网卡,之前一直使用有线网上网,但体验极差.后实际测试时 ...

  6. esxi怎么传输文件到虚拟机_软路由篇2:3865U软路由折腾记——Esxi软虚拟机+OpenWrt教程

    继篇1的直装OpenWrt教程,很多小伙伴在评论里面说"这么好的配置只装OpenWrt软路由系统,有点奢侈浪费",那么本篇就来了.本篇将会就如何安装虚拟机Esxi系统,以及在虚拟机 ...

  7. 二手MicroServer Gen8折腾记 - 配置 RouterOS 软路由

    我之前宽带一直都是光猫拨号,电脑和NAS直连光猫,光猫下挂个二级无线路由器来给其他设备联网,但我早就对这个拓扑不爽了,主要原因是自己花大钱买的AC86U派不上用场,只能干点边缘的杂活,而且搞两套局域网 ...

  8. 软路由折腾记(一)openwrt

    软路由 虚拟机安装软路由测试 先在虚拟机上安装软路由进行测试,找出问题并解决和记录. 然后在实体机上操作,更加快. 安装平台:VMware Workstation 找到对应的教程:Vmware搭建软路 ...

  9. 从零开始的软路由之爱快虚拟机搭建openwrt

    缘起 上篇文章我们介绍了爱快软路由的搭建方法,成功了实现了软路由的初级布置--能上网了.接下来就是搭建双软路由中的另一个openwrt了,上期介绍了爱快的特点,主要是用来多拨,分流,流控等操作,在这些 ...

最新文章

  1. 也谈压缩感知和贝叶斯大脑
  2. [转] MongoDB 入门
  3. mysql命令行语句_MySql命令行命令和SQL语句
  4. php开源 饭馆记账软件_GitHub - CNYoki/xxjzWeb: 小歆记账WebApp项目(Web服务端)
  5. Codeforces-743D - Chloe and pleasant prizes(树dp)
  6. 单片机模块学习之键盘
  7. 怎样用c语言写超市管理程序,C语言超市收银管理系统实现程序.doc
  8. numpy 索引多个_Numpy基础三,学习Python编程必备
  9. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...
  10. java 编程字体_Java 是否可以为整个应用程序设置自定义字体?
  11. Android lsof查看已打开文件
  12. 在propreties文件中引用另一个properties文件中的内容
  13. R语言基于S3的面向对象编程
  14. 变量不在选择列表中_Python3中的表达式运算符
  15. 基于RGB图像的机器人抓取算法汇总
  16. Dijkstra + 堆优化
  17. iphone之参数知识(一)
  18. MFC-CEdit派生一个只允许输入16进制数据的新类
  19. 【echarts高级用法】在地理坐标系中镶嵌柱状图,在加上时间轴让图动起来
  20. 手机链游撼动腾讯王者荣耀?Nova Battles更具潜力

热门文章

  1. Python案例分析:中美汇率转换(2)
  2. python工资多少-python数据分析师待遇有多少?工资待遇如何?
  3. 老上海的美味,你中意几个?
  4. 推荐几款SSH客户端
  5. alipay-sdk-python支付宝开放平台官方SDK使用详解
  6. 单工、半双工、全双工一点通
  7. stm32 USART串口半双工功能测试
  8. HustOJ - 1026
  9. 【光学镀膜】-- 镀膜工艺
  10. Android小米手机必须插入sim卡才可以usb调试解决方案