在U-NAS下配置虚拟机建立旁路由

2019-12-05 13:35:24 29点赞 264收藏 26评论

背景介绍

  前段时间被各种油管主播和B站UP主种草软路由,上至N系、J系各类X86架构小主机,下至树莓、友善之臂各类Arm架构的“派”,不一而足。看着家里的就靠一台老旧的R6300v2作为主路由来撑着,不禁又动心起来,构思了好些方案,无奈囊中羞涩,迟迟没能下手。

  在软路由的CPU推荐图和各类评测中,J3455是个出现频率较高的CPU,同时支持VT-D和AES指令集,一直是相对比较受到关注的。突然想起,之前矿难捡的暴风云就是J3455的啊,现在是刷回万由自己的 U-NAS OS 系统来当做NAS使用,没有什么特殊4K解码之类的需求,性能对于我个人的日常使用其实是过剩了的。

  当初捡回来之前也在网上看过作为路由之类的应用,但是以前我想的是它才一个网口,做路由再怎么也需要2个网口才能当路由器吧,所以之后就再也没想过这方面的事了。

  这次除了建了一个虚拟旁路由之外,还顺便把几个月前淘的交换机也顺便换上了,虽然没什么大用,就相当于拓展了一些网络口来为以后做预留吧。

对“旁路由”的浅见

  其实之前对于什么叫“旁路由”完全没有什么概念,包括看各个大神的理解也各自不一样,我自己对它的浅见就是:它就是一台网关服务器,跟网页服务器、储存服务器等没有区别,只是它的功能仅仅是提供网关转发,由它来决定以它作为网关的设备该走什么线路,或者说交换什么数据。

  这样来理解就比较好解释为什么只需要一个网口也能工作,因为它是服务器而不是“路由”,所以本身并不区分什么Wan或者Lan,只是由于大部分这种“旁路由”都是采用基于Openwrt的系统,才在这些系统上区分Wan口Lan口。经过我在自己的网络环境下测试,不管那个网口是使用所谓的Wan口还是Lan口,只要它能够**直接**被指向它的设备发现,就能使用。即它跟网关指向它的设备之间是在拓扑结构上可以是平级的,而不像路由器那样是上下级的结构。

改造前拓扑结构

改造前拓扑结构改造前拓扑结构

  改造之前基本上所有的活都交给一个主路由来进行,主路由是二手的 R6300v2,虽然无线方面的表现已经足够家用,但是跑的插件多了CPU负载还是挺高的,温度高、效率低。

改造后拓扑结构

改造后拓扑结构改造后拓扑结构

  改造之后就是在U-NAS上建立了一台虚拟的网关服务器(旁路由),然后把需要用到“你懂的”那些功能的设备再将各自的网关指向这个虚拟网关。好处是不会影响其他不需要的设备,劣势是每个设备都要手动设置一次。

UNAS安装虚拟机

  我安装的 UNAS 系统是以前安装的 3.11 的版本,在APP管理器中有2个虚拟机APP,1个是VirtualBox、1个是“虚拟机”,这个“虚拟机”其实就是 Qemu-KVM,并且还搭配了一个 Wok+Kimchi插件 的Web管理后台,对于使用来说是相当方便了。

VirtualBox虚拟机

  VirtualBox方案在我的UNAS上没法运行,无法启动,在命令行下查看了一下报“The vboxdrv kernel module is not loaded.”错误,按照提示用`/etc/init.d/vboxdrv setup`命令重新编译内核,无法成功编译。

  后来分析了一下,猜测是我更新到了3.11版本,基于Debian8,采用Linux4.9内核。可能早期的 UNAS OS 3 的版本是基于Debian 7的,而官方APP源里面的VirtualBox版本是4.2,内置的内核头文件是 Linux 4.3版本的内核,所以无法编译到 4.9版本的内核中。

  解决方法也很简单,手动安装5.0版本的VirtualBox,再另外自行安装一个PHPVirtualBox来进行Web管理就行了,但这个不是本文的重点。到了 UNAS 4 的版本中没这个问题了,UNAS 4的APP源里面的VirtualBox已经是6.0的版本了。

Qemu-KVM虚拟机

  Qemu-KVM方案就简单了,在 UNAS 的APP管理器中安装“虚拟机”这个应用就行了。

UNAS的APP管理器UNAS的APP管理器

勾上开启并应用勾上开启并应用

Wok+Kimchi 后台Wok+Kimchi 后台

  安装好了之后重启一次在启动,就能进入 Wok+Kimchi 的Web管理后台,采用默认的“root/yutech”用户登录即可,在这里就可以直接添加ISO建立虚拟机来装系统了。在这个后台建立虚拟机的正常做法是先建立储存器,准备好ISO放入资源池中,然后建立相应的“模板”,再正式添加“Guest”虚拟机。比如我在这里面装了 Alpine 和 iKuai 等。

虚拟机安装LEDE

  在选择网关服务器的系统的时候,我分别尝试了L大的[LEDE](https://github.com/coolsnowwolf/lede/)和Koolshare的系统,最终为了方便采用了Koolshare。

1、建立虚拟网络

  在UNAS中安装好虚拟机后,默认建立了一个 nat 转发的虚拟网络,而我们需要让虚拟的旁路由直接被主路由进行管理,所以需要建立一个网桥连接的虚拟网络。

  在 Wok+Kimchi 后台建立网络很简单,找到“Virtualzation”→“网络”,点击“Add Network”按钮

建立网络建立网络

  然后起好名字(我这里是“vnet”),选择网络类型为“bridge”再创建即可。

选择网络类型选择网络类型

2、准备系统镜像

  虚拟机安装LEDE不需要通过镜像来引导安装,只要直接把镜像转换格式成为虚拟磁盘映像作为虚拟机的“硬盘”就可以了。系统镜像可以在[这里](https://firmware.koolshare.cn/LEDE_X64_fw867/虚拟机转盘或PE下写盘专用/)下载,注意要选择“虚拟机转盘或PE下写盘专用”下面的版本。

  先用SSH登录UNAS,进入“储存器”中建立的路径,我这里直接采用默认的“/var/lib/libvirt/images”目录,用“wget”命令下载“.img.gz”格式的镜像,大约40多MB。

3、转换镜像格式

  下载完镜像后,先用`gzip -d openwrt-koolshare*`解压缩,解压出来一个“.img”格式的镜像,解压出来后一下就有700多MB了,其实是因为这个“硬盘”本身就是700多MB的空间,不管虚拟系统用没用到都占用完实际系统的这个空间。

  随后使用虚拟机管理的命令`qemu-img convert -O qcow2 openwrt-koolshare*.img koolshare.qcow2`把img格式的映像转换为qcow2格式,尺寸又回到原本的40多M了,之后虚拟系统用掉了多少空间这个文件就增大多少。

4、建立虚拟机

  建立好虚拟机用的硬盘之后,就可以建立虚拟机了,但是因为是直接用现有硬盘映像,所以只能手动创建 xml 文件来配置虚拟机,而不能直接再 Wok+Kimchi 后台进行了。

  用 SSH 连接到 UNAS,为了方便管理,我切换到默认的目录,并且建立一个 xml 配置文件。

cd /etc/libvirt/qemu

touch koolshare.xml

vim koolshare.xml

  然后把下列内容复制进去,可以自行生成[UUID](https://1024tools.com/uuid)和[MAC](https://www.osgeo.cn/app/s2907),网络配置记得改为此前建立的虚拟网络(`<source network='vnet'/>`)。

<domain type='kvm'>

<name>koolshare</name>

<uuid>ebaac289-7124-4476-92d3-2c9a2dda78d6</uuid>

<memory unit='KiB'>1048576</memory>

<currentMemory unit='KiB'>1048576</currentMemory>

<vcpu placement='static'>2</vcpu>

<os>

<type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type>

<boot dev='hd'/>

</os>

<features>

<acpi/>

<apic/>

<pae/>

</features>

<clock offset='utc'/>

<on_poweroff>destroy</on_poweroff>

<on_reboot>restart</on_reboot>

<on_crash>restart</on_crash>

<devices>

<emulator>/usr/bin/kvm</emulator>

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none'/>

<source file='/var/lib/libvirt/images/koolshare.qcow2'/>

<target dev='hda' bus='ide'/>

<address type='drive' controller='0' bus='0' target='0' unit='0'/>

</disk>

<controller type='usb' index='0'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>

</controller>

<controller type='pci' index='0' model='pci-root'/>

<controller type='ide' index='0'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

</controller>

<interface type='network'>

<mac address='88:3B:28:11:E3:72'/>

<source network='vnet'/>

<model type='e1000'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

</interface>

<serial type='pty'>

<target port='0'/>

</serial>

<console type='pty'>

<target type='serial' port='0'/>

</console>

<input type='mouse' bus='ps2'/>

<input type='keyboard' bus='ps2'/>

<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>

<listen type='address' address='0.0.0.0'/>

</graphics>

<sound model='ich6'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

</sound>

<video>

<model type='cirrus' vram='9216' heads='1'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

</video>

<memballoon model='virtio'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>

</memballoon>

</devices>

</domain>

  建立 xml 配置文件后,将该文件引入虚拟机管理系统中。

virsh define koolshare.xml

  然后从该配置文件启动虚拟机

virsh create koolshare.xml

  因为是作为网关服务器,所以还是需要配置成开机自动启动。

virsh autostart koolshare

  此时已经可以在 Wok+Kimchi 后台看到这台新建的虚拟机,并且已经运行了。

启动虚拟机启动虚拟机

虚拟旁路由配置

1、配置底层网络

  刚安装好运行虚拟机有时候主路由并不会给它分配IP地址,所以直接在网页上想访问过去不一定成功。而采用 Wok+Kimchi 后台有一个好处是,可以直接用“查看控制台”功能通过网页版 VNC 控制虚拟机,所以可以再命令行下检查网络配置或者进行手动配置。

查看控制台查看控制台

  通过 VNC 连接到虚拟机后,先查看一下网络配置。

vi /etc/config/network

  我在这里直接给它分配了一个固定的静态地址,添加的配置如下:

config interface 'lan'

option ifname 'eth0'

option proto 'static'

option ipaddr '192.168.1.5'

option netmask '255.255.255.0'

option multipath 'off'

option gateway '192.168.1.1'

option dns '223.5.5.5 223.6.6.6 8.8.8.8 9.9.9.9'

  随后用`reboot`命令重启一下虚拟机,启动成功后就能在主路由上面看到这台虚拟旁路由了,此时在局域网上就能网页访问到它了。

2、后台配置

  在局域网的电脑中访问这台虚拟旁路由的地址,比如我这里是“192.168.1.5”,就可以进入网页后台了,默认密码是 koolshare,第一次登陆之后更改一下。

登录网络后台登录网络后台

  首先需要配置的是网络,找到“网络”→“接口”,由于我刚才手动配置的是“LAN”口,所以把“LAN”口之外的接口都删除掉,如果手动配置的是“WAN”口就把“WAN”口之外的接口都删除掉。

  然后点击“编辑”,把最下方的“DHCP 服务器”那里勾上“忽略此接口”,因为在这里不把它当路由使用,而是当作网关服务器,所以不需要由它分配地址给其他设备。

  到这里其实就算是配置完了,后续要安装各类插件就是其他方面的事情了。

安装各类插件安装各类插件

设备设置

  虚拟的网关服务器配置好之后,设备的配置非常简单,只要将设备的“网关”地址填写旁路由的地址即可,像电脑上是这样,其实DNS服务器部分我认为是可设可不设,各位大神的观点也不一致,以防万一我这里还是设置了。

客户端配置网关客户端配置网关

  设置完成后可以用路由追踪命令查看一下,出来的第一个是 192.168.1.5,第二个到主路由的 192.168.1.1,就说明已经把数据包先通过虚拟的网关服务器来走了,配置完成。

  如果局域网里面有二级路由或者AP之类的,只要把二级路由或者AP本身的网关指向这台虚拟旁路由,其下的所有设备不用设置也都能直接走它来做数据处理了。

后记

  其实整体的配置挺简单,关键在于怎么去理解“旁路由”,虽然我自己把“旁路由”理解为“服务器”的想法不一定是最精确的,但是这样去想比较方便我去理解每一步的设置是为什么。

  而 UNAS 系统作为一款基于 Debian 的国产NAS管理系统,在自由度很大的同时,也具备简单易用的特性,后续的发展也值得期待。至少在一水的“黑群晖”之下,多了个选择的空间。

展开 收起
26评论

  • 精彩
  • 最新
  • DNS Server

    校验提示文案

    提交
    网关服务器跟DNS服务器还不大一样,DNS服务器仅仅是在服务器上解析IP地址,客户端把域名传递给DNS服务器,DNS服务器把解析出来的IP回复给客户端。

    校验提示文案

    提交
    收起所有回复
  • 想当年我像你一样各种折腾,而现在想着如何简化家里网络结构,看来是我老了

    校验提示文案

    提交
    不是老了,是现在有钱了,可以用一个贵的设备带起以前一堆便宜设备才干得动的活儿了

    校验提示文案

    提交
    以前恨不得所以设备都弄上,现在只有一个猫,感觉也够用 [喜极而泣]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 大神,为什么我的u-nas进到kvm的web界面没有virtualization那个标签,我的CPU是g4600,我查了一下支持虚拟化,bios里virtualization的开关也开了

    校验提示文案

    提交
    我也遇到过,解决方法就是多进去几次 [尴尬]

    校验提示文案

    提交
    试了好多次,后来我选择放弃KVM了 [观察]

    校验提示文案

    提交
    收起所有回复
  • 家里有台淘汰的主机,能这样废物利用一下吗?

    校验提示文案

    提交
    可以啊,只要认为功耗可接受就行。

    校验提示文案

    提交
    收起所有回复
  • 我1037u组了套万由nas [皱眉] ,又用1037组了个软路由 [皱眉]

    校验提示文案

    提交
    1037u可以的,支持VT-x。虽然不支持VT-d和AES指令集在某些特殊用途上有些限制,但是超有性价比的!

    校验提示文案

    提交
    收起所有回复
  • wow, UNAS界面已经这么好看啦!

    校验提示文案

    提交
    嗯嗯,据说4.0的版本更好看

    校验提示文案

    提交
    收起所有回复
  • 这个比n1还是爽得多 mt7621我的主路由 总感觉响应速度不好 不知道是不是心理作用,开了硬件加速 跑300多M没问题。

    校验提示文案

    提交
    可是N1便宜啊,最低的时候才70多,我这个接近翻了十倍了。。。 [流泪]

    校验提示文案

    提交
    n1也就那样吧 我手头有一个 打算刷成盒子 然后入手n3150。

    校验提示文案

    提交
    收起所有回复
  • 读了这么多,都不知道这个旁路由有什么用?代理服务器吗?加这个东西,信息交换不是更延迟吗?

    校验提示文案

    提交
    您理解为代理服务器也没错,确实从数据交换的角度上来说多了一个层级,但是很多时候网关服务器做的数据交换并不仅仅是转发,而需要对数据进行加密打包、解包等运算操作,这种操作不是所有硬件的执行能力都一样的。所以有些特定环境专门增加一个设备来处理。仅从“交换数据”的角度上来说,会增加延迟,但是我们真正提到的网速上的延迟指的是“交换数据+处理数据”,通过处理数据时间的降低提升来弥补交换数据时间的极小上升,使得整体延迟降低。

    校验提示文案

    提交
    加密,解密应该是在终端<如pc).路由只负责分包和转发吧

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 看看,看看,看看

    校验提示文案

    提交
  • 楼主,我下载了U-NAS4.0.6安装在虚拟机中后,WOK页面没有Virtualzation页面,再次安装到一台I54460的机器上也是没有Virtualzation页面,最后按照你的版本下载了U-NAS3.1.1安装到这台机器上后终于有了Virtualzation页面。按照你的教程一步一步生成了xml文件,随机生成了UUID和MAC,但是在引入虚拟机管理系统中时提示error: Failed to define domain from koolshare.xml
    error: XML error: expected unicast mac address, found multicast '***'
    请问如何解决?

    校验提示文案

    提交
  • 查到原因了。原来生成的MAC是组播地址。改成单播就可以了。但是还有个问题。不管事3.1.1还是4.0.6,都遇到file资源管理器打开是空白的现象。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
挂件

candura

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
264
扫一下,分享更方便,购买更轻松