背景已经有了ALL IN ONE，上面安装了PVE。这是安装 OpenWrt 作为旁路网关的记录。题外话为什么选择 All-in-One 这样的方案？知乎上面有很多 AIO 的劝退贴1，主要的观点例如：部署稳定的AIO需要比较高的技术门槛，并且一旦出现故障会影响家庭网路，数据安全很难保证云云，这些对于小白来说确实是不小的问题。然而，作为一个相关领域的从业人员，并且有玩过 VPS 和虚拟机经验的我来说，还是要体验一次。我的主要需求一个是旁路网关，使用旁路网关的方式可以避免一出问题全屋上不了网的情况了。组网目前计划的网路连接开始部署准备安装好的 PVE 系统OpenWrt 系统镜像。为了扩容方便，选择使用 Ext4 分区的 generic-ext4-combined-efi.img.gz 文件。下载页面，在 root 首页找最新版本GParted Live CD 镜像，用来修改系统分区大小。下载页面创建虚拟机Openwrt 需要的资源并不多，可以根据自己需要划分内存和 CPU。选择的镜像是 efi 的，所以 BIOS 要选择 UEFI 的，不需要勾选添加 EFI 磁盘。在磁盘页面也不需要添加磁盘，稍后会从镜像导入。选中数据中心，点击“创建虚拟机”按钮，勾上“高级”，勾上“开机自启动”（软路由一般情况下开机自启动较好），名称填入虚拟机名称openwrt，点击“下一步”操作系统选择“Linux”，版本选择“6.X-2.6 Kernel”即可，先不选择介质，点击“下一步”系统选择默认seabios即可，不选择存储，稍后会从镜像导入。点击“下一步”，磁盘删除掉。cpu默认1，至少改成2核，最多和物理线程一样（我是2核心4线程，可以改到4，先用的2）下一步内存修改2048到1024，即为1GB网络默认半虚拟化。目前就1个网卡。登录 PVE，下载镜像文件，并解压：cd /var/lib/vz/template/iso 本地下载后上传 gunzip openwrt-23.05.4-x86-64-generic-ext4-combined-efi.img.gz将磁盘镜像文件导入到刚刚创建的虚拟机：# qm disk import <vmid> <storage> [OPTIONS] qm disk import 100 openwrt-23.05.4-x86-64-generic-ext4-combined-efi.img local-lvm然后回到 PVE 管理网页，选中新的磁盘双击，添加。现在可以开机进入系统了。但是不急，默认磁盘的剩余空间很小，放不了很多东西。为了以后考虑，还要给磁盘扩容。磁盘扩容选中硬盘 > 磁盘操作 > 调整磁盘大小，扩大虚拟磁盘的大小为2G。接下来是调整分区大小。这一步是可以用命令做的，我偷了一点懒，懒得学分区操作的命令，用了图形化分区工具 GParted，操作起来比较简单。先在 PVE 的 ISO 镜像储存界面上传 GParted 镜像，然后给 OpenWrt 的虚拟机的 CD/DVD 添加上。在 选项 > 引导顺序 中调整到光盘最高。进入系统之后，操作很方便了。根据提示修复错误，然后右键 rootfs 分区调整大小，拖动箭头，把剩余空间拉满就可以了。点击修复/fix最后点击打勾保存关机。然后我们在左上角的添加，网络设备中，添加第二块网卡，依旧默认选择半虚拟化就行。2个虚拟网卡接入了一个网桥，实际是一个物理网口。移除光盘，调整启动顺序，重新启动，就能够进入系统了。修改ip进入openwrt的shell页面，vi /etc/config/network找到config interface lan这一段代码在option ipaddr 这里把原来的'192.168.1.1' 改成你需要的ip，比如我这里改成192.168.31.2保存退出在shell页面输入reboot，重启openwrt，查看ip是否正确配置：现在已经正确获取了 IP 地址，可以用 SSH 连接或者浏览器访问管理页面了。一些基础配置：# 软件源换成清华镜像源 sed -i 's_downloads.openwrt.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.conf # 更新软件包索引 opkg update # 中文包 opkg install luci-i18n-base-zh-cn opkg install luci-i18n-firewall-zh-cn # mDNS 支持，安装后可以用 http://openwrt.local 打开管理页面 # opkg install avahi-daemon-service-http # 未测试，笔者依旧直接ip浏览器打开在浏览器中输入你刚才改好的ip地址，访问openwrt的管理页面。在 OpenWrt 网页管理页面，网络 > 接口 里面，把 DHCP 相关的设置关掉，因为旁路由不需要提供 DHCP 服务。终端配置有两种办法，一种是在设备上手动设置网关为软路由的IP地址，另一种是在主路由上面把 DHCP 默认网关设置为软路由的 IP。为了稳定，我用手动配置的办法。先测试没有修改，自动dhcp可以看到，直接回到主路由31.1访问修改网关和dns给旁路网关测试效果可以看到第一跳、第二跳、第三跳分别是旁路网关、我的硬路由和光猫，然后是联通的网络，最后到达目标地址。
编译Openwrt关于Openwrt不多说了，我一直用Lean大佬的项目，自己编译使用。具体可以参考我之前文章：编译Lean的Openwrt固件全攻略：https://imgki.com/archives/openwrt-lean.html转换固件生成的文件又一堆，具体来说包括：我们这里用openwrt-x86-64-generic-squashfs-combined.img 或者 openwrt-x86-64-generic-squashfs-combined-efi.img进行转换。特别说明的是，里面那个openwrt-x86-64-generic-squashfs-combined.vmdk虽然是vmdk文件，但是不能直接用。转换用StarWind Converter这个软件，下载地址：https://www.starwindsoftware.com/tmplink/starwindconverter.exe之后会得到两个文件Esxi设置Esxi中新建虚拟机删除原来带的硬盘删除不用的光驱添加网络适配器，对口到VM Network这个VM稍后会讲到，一是注意顺序，二是Esxi的逻辑。之后新硬盘-现有硬盘新建一个文件夹，之后把生成的vmdk flat两个文件传上去Openwrt设置启动Openwrt后需要登陆修改Lan的ip地址vi /etc/config/network修改LAN下的IP地址之后就可以i登录啦，Lean的默认密码是password
[scode type="blue"]更新2021.8.18[/scode]软路由之前自己配了一台软路由，3205的cpu+8G内存，一直使用Koolshare的LEDE，但是koolss插件已经长期停止更新，而且各种问题，经常死机，说实话算不上一个很好的固件。后来在网上找其他固件，发现LEAN的LEDE固件非常不错，主要是冲着SSR-plus去的，但是研究了一下发现，这个固件那个是非常的高端啊，要自己用ubuntu编译。说高端就是高端，不得不说lean大佬这个做的太nb了，用作者的原话是：如果你自认为 Koolshare 论坛或者其固件的脑残粉，本人不欢迎你使用本源代码。所以如果你是，那么使用过程中遇到任何问题本人概不回应。作者的Github地址：https://github.com/coolsnowwolf/lede准备工作注意不要用 root 用户进行编译！！！国内用户编译前最好准备好梯子默认登陆IP 192.168.1.1 密码 password安装必备组件输入 sudo apt-get update ，然后输入 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsyncClone源码使用 `git clone https://github.com/coolsnowwolf/lede.git` 命令下载好源代码，然后 cd lede 进入目录配置编译./scripts/feeds update -a ./scripts/feeds install -a make menuconfig下载dll库make -j8 download V=s 下载dl库（国内请尽量全局科学上网）配置固件之后进入如下界面，这实际上是一个配置界面，用来配置编译的配置，并不是编译的过程。进入Target System和Subtarget勾选你需要编译的平台，我用的是X86，并且是64位的，所以你需要选择自助选择。OpenWrt Configuration【OpenWrt配置】Target System (x86) ---> 目标系统（x86） Subtarget (x86_64) ---> 子目标（x86_64） Target Profile (Generic) --->目标配置文件（通用） Target Images ---> 保存目标镜像的格式 Global build settings ---> 全局构建设置 Advanced configuration options (for developers) ---- 高级配置选项（适用于开发人员） Build the OpenWrt Image Builder 构建OpenWrt图像生成器 Build the OpenWrt SDK构建OpenWrt SDK Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链 Image configuration --->图像配置 Base system ---> 基本系统 Administration ---> 管理 Boot Loaders --->引导加载程序 Development ---> 开发 Extra packages ---> 额外包 Firmware --->固件 Fonts --->字体 Kernel modules ---> 内核模块 Languages --->语言 Libraries ---> 图书馆 LuCI ---> LuCI Mail --->邮件 Multimedia --->多媒体 Network --->网络 Sound ---> 声音 Utilities --->实用程序 Xorg --->Xorg进入Target Images勾选你需要的固件格式等(img、vmdk等这里我保持默认，默认也够用了吧？)进入LuCI–>Applications内选中你需要的插件在这里有一些别的选项，比如一些VPN、aria2的web管理等等，根据需要自己进去研究。勾选完需要的东西就可以退回第一个界面保存退出，保存按默认的文件名称(.config）保存即可，不需要修改。编译会根据.config的内容编译，想要恢复到初始配置删掉.config文件即可。在编译的过程中，要下载一些组件什么的，如果你不翻墙，下载速度会非常慢，甚至下载不下来。编译保存后执行以下命令make -j1 V=s //第一次编译非常的慢，要花上一两个小时取得固件cd bin/targets/x86/64 注：这个bin目录在你克隆源码的lede路径下，非根目录下的bin目录在下载openwrt系统时，经常能看到initramfs-kernel.bin，squashfs-factory.bin，squashfs-sysupgrade.bin等结尾的文件，factory适用于从原厂系统刷到openwrt，sysupgrade则是从openwrt刷到openwrt（已经是openwrt系统，在openwrt系统中更新自己），squashfs则是一种文件系统，适用于嵌入式设备。那么initramfs-kernel又是什么呢。initramfs是放在内存RAM中的rootfs 映像文件，跟kernel放在一起。一般来说用不到initramfs-kernel.bin来刷机，因为启动后，所有的配置在路由器重启后都不能保留（毕竟ram文件系统，所有文件放在ram中，断电就没了）。但也有用到initramfs-kernel.bin的时候，就是在移植openwrt系统的时候，没有设备上的flash闪存的驱动的时候。文件类型文件共提供多种类型供下载（根据编译时选择的Target Images配置），需要其他类型的请自行转换，下面是部分说明一般来说，用openwrt-x86-64-generic-squashfs-combined.img 或.gz 文件就可以了固件里面看不到ssr-plus大佬在feed里里面吧ssr的feed隐藏了src-git luci https://github.com/coolsnowwolf/luci src-git routing https://git.openwrt.org/feed/routing.git;openwrt-19.07 #src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-19.07 #src-git helloworld https://github.com/fw876/helloworld git pull rm -rf ./tmp vi feeds.conf.default #其中去掉注释 ./script/feeds update -a && ./script/feeds install -a重新编译或修改配置后再次编译（二次编译是指下一次你编译别的固件的时候）cd lede git pull ./scripts/feeds update -a && ./scripts/feeds install -a make defconfig make -j8 download make -j$(($(nproc) + 1)) V=s如果需要重新配置： rm -rf ./tmp && rm -rf .config make menuconfig make -j$(($(nproc) + 1)) V=s 如果是添加了其他源，如果你是第二次编译，最好使用make clean命令和 ./scripts/feeds clean命令清除一些障碍，如果是全新安装就无须clean。make clean ./scripts/feeds cleanout of memory错误（2019.12更新）今天重新打开编译一个文件的时候，提示out of memory错误，看了一下1g内存估计有点溢出了。一键swap增加：wget https://www.moerats.com/usr/shell/swap.shLEAN大佬原版的说明https://github.com/coolsnowwolf/lede固件使用方法X86/64下Esxi中写入固件，请看这个教程：[post cid="578" cover=""/]https://imgki.com/archives/578.html插件详细清单OpenWrt 编译 LuCI ---> Applications 添加插件应用说明 【人人为我，我为人人】 2019.8.3 更新 ！！！make menuconfig 进入定制界面进入编译选项配置界面,.按照需要配置.( ‘*’ 代表编入固件，‘M’ 表示编译成模块或者IPK包， ‘空’不编译 )非常感谢大佬”L有大雕“更正补充，20181121欢迎加入大佬 QQ 讨论群：Gargoyle OpenWrt 编译大群 ,号码 718010658 （QQ更新）这个地址应该是长期更新插件清单：https://www.right.com.cn/forum/thread-344825-1-1.html找不到ssr-plus~~即使编译了ssr-plus之后，你发现在菜单里依然没有选项。因为作者又一次调皮了，居然给隐藏了。输入以下代码后可以看到`echo 0xDEADBEEF > /etc/config/google_fu_modeecho 0xDEADBEEF > /etc/config/google_fu_mode~~2021.8.18更新，如果还是找不到ssr-plus，请自行添加feedsvim ./feeds.conf.default 如果没有下面这一行 自己添加上 src-git helloworld https://github.com/fw876/helloworld [1]: https://github.com/coolsnowwolf/lede [2]: https://imgki.com/usr/uploads/2019/09/3102421826.png [3]: https://imgki.com/usr/uploads/2019/09/3433535562.png [4]: https://imgki.com/usr/uploads/2019/09/2458172706.png [5]: https://imgki.com/usr/uploads/2019/09/2533905169.png [6]: https://imgki.com/usr/uploads/2019/09/99712410.png [7]: https://imgki.com/usr/uploads/2019/09/53805221.png [8]: http://wget%20https://www.moerats.com/usr/shell/swap.sh%20&&%20bash%20swap.sh [9]: https://github.com/coolsnowwolf/lede [10]: https://www.right.com.cn/forum/thread-344825-1-1.html [11]: https://github.com/kuoruan/openwrt-frp [12]: https://imgki.com/usr/uploads/2019/11/1926474714.xlsxIPV6支持支持 iPv6：1、Extra packages ---> ipv6helper （选定这个后下面几项自动选择了）Network ---> odhcp6cNetwork ---> odhcpd-ipv6onlyLuCI ---> Protocols ---> luci-proto-ipv6LuCI ---> Protocols ---> luci-proto-ppp最好自己确认一下这些是否都选中了固件空间插件比较多的时候，下x86/64下调整一下设置，留下空间Target Images ---> (16) Kernel partition size (in MB) #默认是 (16) 建议修改 (256)Target Images ---> (160) Root filesystem partition size (in MB) #默认是 (160) 建议修改 (512)引用文章：https://www.cnvito.top/37.htmlhttps://www.right.com.cn/forum/thread-344825-1-1.htmlhttps://blog.csdn.net/qq_33867131/article/details/86490083