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

背景介绍

  前段时间被各种油管主播和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管理器中安装“虚拟机”这个应用就行了。

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

虚拟机安装LEDE

  在选择网关服务器的系统的时候,我分别尝试了L大的LEDE和Koolshare的系统,最终为了方便采用了Koolshare。

1、建立虚拟网络

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

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

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

2、准备系统镜像

  虚拟机安装LEDE不需要通过镜像来引导安装,只要直接把镜像转换格式成为虚拟磁盘映像作为虚拟机的“硬盘”就可以了。系统镜像可以在这里下载,注意要选择“虚拟机转盘或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 配置文件。

1
2
3
cd /etc/libvirt/qemu
touch koolshare.xml
vim koolshare.xml

  然后把下列内容复制进去,可以自行生成UUIDMAC,网络配置记得改为此前建立的虚拟网络(<source network='vnet'/>)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<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 配置文件后,将该文件引入虚拟机管理系统中。

1
virsh define koolshare.xml

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

1
virsh create koolshare.xml

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

1
virsh autostart koolshare

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

虚拟旁路由配置

1、配置底层网络

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

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

1
vi /etc/config/network

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

1
2
3
4
5
6
7
8
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管理系统,在自由度很大的同时,也具备简单易用的特性,后续的发展也值得期待。至少在一水的“黑群晖”之下,多了个选择的空间。

文章目录
  1. 1. 背景介绍
    1. 1.1. 对“旁路由”的浅见
    2. 1.2. 改造前拓扑结构
    3. 1.3. 改造后拓扑结构
  2. 2. UNAS安装虚拟机
    1. 2.1. VirtualBox虚拟机
    2. 2.2. Qemu-KVM虚拟机
  3. 3. 虚拟机安装LEDE
    1. 3.1. 1、建立虚拟网络
    2. 3.2. 2、准备系统镜像
    3. 3.3. 3、转换镜像格式
    4. 3.4. 4、建立虚拟机
  4. 4. 虚拟旁路由配置
    1. 4.1. 1、配置底层网络
    2. 4.2. 2、后台配置
  5. 5. 设备设置
  6. 6. 后记
|