家庭网络的不归路 – 实践

New Game!2

这章的核心内容就是围绕实践来的,总体来说就是大方向,小的细节文章里可能无法展开,有问题可以在评论里尽管问

先来一张拓扑图

拓扑图先看图例,不同速率、介质的线路有不同的表达方式,然后再看区域,根据物理情况将总拓扑图分为3块区域,分别为弱电箱、客厅、书房。弱电箱内的“ESXi宿主机”就是我们梦开始的地方

开始之前先解释一下“为什么使用ESXi,不使用Hyper-V或者PVE甚至KVM”。原因就俩字:熟悉。我从13年运营Minecraft服务器起就开始使用ESXi了,它的各种设定、逻辑、产品交互、管理方式等我都可以接受,遇到常见的奇葩问题都知道怎么解决。

缺点嘛很明显,先说最让我不能接受的,ESXi在不支持BMC功能的主板上无法查看任何温度,所以感知硬件温度只能靠手。在一个是ESXi不像PVE可以依赖Linux本身的软件生态,好在这种情况也不多

优点就一个字:稳。毕竟是to b的商业产品。小到华强北的工控机,大到IBM的刀片机,使用ESXi的过程中真的没有出现过啥大毛病。


配置硬件加电自启动

作为“路由器”,加电自启动这种事肯定是基础功能。BIOS里一般都会有相关设置,我使用的设备还支持跳线设置,选择任意一种或多种办法即可。

安装ESXi

很不幸,这里我就略过。安装ESXi这件事没有什么特殊的,搜索引擎也能找到很多教程。

配置ESXi

比较通用的配置(如配置IP,添加存储等)我就不展开了,只讲讲比较独特的部分。

配置虚拟交换机

仔细观察拓扑图:OpenWrt,CentOS,Windows下载机均为网卡直通,且OpenWrt至少要使用2个网口(事实上我用了3个),也就是说单直通部分就用掉了5个网口。上篇文章也说过,我的设备总共就6个网口,余下的这一个网口既要给虚拟机本身管理使用,且还要通过虚拟交换机接入其他3台虚拟机,开工吧。

首先创建一个虚拟交换机,将仅剩的网卡作为上行链路,这里我使用了br0作为虚拟交换机的名称

在“网络”-“虚拟交换机”下可以“添加标准虚拟交换机”

配置端口组

因为ESXi的设定,绑定了VMkernel的端口组将不能再用于虚拟机,因此通常先将管理用端口组独立出来,这里我设定为console0

然后新增br0端口组用于虚拟机,端口组的虚拟交换机为上一步创建的“br0”

在“网络”-“端口组”下可以“添加端口组”

配置直通

如果在设备支持的情况下,建议优先使用网卡的硬件直通,优点:节省虚拟交换机的开销,极大的提高性能;缺点:使用直通设备的虚拟机需在启动时预留所有内存,且快照功能将被禁用,并且无法内存超卖(大雾)。如果有ESXi集群的话,虚拟机将无法在集群间快速迁移。

在“管理”-“硬件”-“PCI设备”里即可切换硬件的直通

配置直通时注意不要把虚拟机管理用的网卡(即:VMkernel 网卡)直通,要不然Web管理面板肯定就不可访问了(废话,网卡都没了)。如果实在不小心直通错了也不要紧,给软路由插上显示器和键盘即可在ESXi Shell里通过修改配置文件的方式取消错误的直通。

截止自此,宿主机部分的配置已经基本完成,接下来就是虚拟机(软路由)部分


准备软路由系统镜像

下载软路由系统镜像

我使用了OpenWrt作为软路由系统,因此我们要先准备一下它的镜像

https://downloads.openwrt.org/releases/选择合适的OpenWrt版本并下载它,注意要使用x86-64架构,这里我选择了最新版(截止到文章发表日期)

combined有两种文件系统,我更倾向于使用ext4,如果有特殊需要也可以使用squashfs

转换镜像

下载下来是个压缩文件,我们把它解压,可以看到是raw格式的镜像,为了能够在ESXi里使用,我们需要对它的格式进行转换。

转换过程这里不再赘述,有需要可以去查看本系列的补充文章:使用StarWind V2V Converter进行虚拟机镜像之间的互相转换


新建虚拟机

当准备好软路由系统的vmdk之后,即可新建虚拟机了

“虚拟机”-“创建/注册虚拟机”

第一步给虚拟机起个响亮的名字

“兼容性”能最高则最高,除非有什么特殊需求

如果你也和我一样使用高内核版本的OpenWrt,那么“客户机操作系统系列”选择“Linux”,“客户机操作系统版本”选择“其他 4.x 或更高版本的Linux(64 位)”

设置完毕后点击“下一页”

第二步则是给虚拟机选择存放位置,OpenWrt默认镜像使用的空间很少,裸镜像只有290MB左右,所以实际空间大概1G就够

选择完位置后点击“下一页”

第三步则是比较重要的一步,需要对虚拟机硬件部分进行配置,如果打算使用网卡直通,也是要在这一步进行配置。

首先会进入“虚拟硬件”选项卡,“虚拟机选项”一般不需要特殊操作,如果有强迫症可以自勉

在“虚拟硬件”选项卡中配置好CPU和内存,OpenWrt如果不是跑Docker之类的话1G都绰绰有余,即便你跑加解密也是足够的。如果使用了网卡直通,需将“内存”里的“预留所有客户机内存(全部锁定)”勾上

然后移除掉ESXi默认分配的16G的硬盘,但保留控制器,我们稍后再处理硬盘的问题。顺便这里可以移除一些不需要的硬件,比如光驱,网络适配器,USB控制器之类的。

配置选项都完成后可以点击“下一页”

最后一步会给出一个详情清单,确认一切都符合自己预期后点击“完成”即可,否则可以通过“上一页”&“下一页”修改

上传VMDK

虚拟机创建好了,但它的vmdk还没有上传,所以这一步要把前面转换后的vmdk上传至ESXi的文件存储当中

在“存储”中选择虚拟机的存放位置(磁盘),然后点击“数据存储浏览器”

找到我们刚刚创建的虚拟机,并将vmdk上传至该目录

如果文件过大,可以打开ESXi的SSH使用scp传输,没什么区别。

补充文章中有提到过,完整的vmdk是由两个文件构成的,这里都要把它们上传上来。并且当vmdk被正确上传后,在ESXi的“数据存储浏览器”里实际只会看到一个文件,它们合体啦!

编辑虚拟机

vmdk上传完成后距离起航就只差一点点了,接下来要找到刚才创建的虚拟机并编辑它,把刚刚上传的vmdk挂载给它

选择完vmdk后确认一下硬盘类型为“厚制备,延迟置零”(zeroedthick),之后保存启动即可

试航

接下来只需要启动虚拟机就好,一切顺利的话就可以正常启动

选择刚刚新建的虚拟机-“打开电源”即可启动

看到br-lan ready的时候,按一下Enter应该就可以调出OpenWrt的Shell了

至此,我们已经完成了虚拟机相关的所有工作,接下来就要围绕OpenWrt展开了


配置OpenWrt

接下来我将使用本地的VMware Workstations作为演示环境,别担心,虽然环境不同,但接下来文章要讲的内容已经和虚拟机无关了,更多的是在OpenWrt方面

因为本地的VMware Workstations演示环境是为了写博客搭建的测试场景,所以有些参数可能并不太适合用到实际场景中。为此,后面的内容中,我将分别列出测试场景和实际场景的参数(如果有),请大家尽量以实际场景的参数为主,测试场景的参数一般都是特化的。

配置Root密码

为了安全,第一步先把Root密码修改掉,在shell中使用“passwd”命令即可

root@Openwrt:/# passwd
Changing password for root
New password: <stdin>
Retype password: <stdin>
passwd: password for root changed by root
root@OpenWrt:/#

配置Lan网段

在实施这一步之前,你需要先从A、B、C类私有地址中挑选出一个你想要的范围,然后才可以进行下一步,同时确保你挑选的范围有足够的可用IP用于容纳你网络内的所有接入设备。

这里我的Lan范围如下:
测试场景:10.80.80.1/29
实际场景:192.168.0.0/16

挑选好网段后,我们编辑/etc/config/network文件

root@Openwrt:/# vim /etc/config/network

修改option ipaddr和option netmask

测试场景:
option ipaddr '10.80.80.6'
option netmask '255.255.255.248'

实际场景
option ipaddr '192.168.254.254'
option netmask '255.255.0.0'

修改完成后,我们重启network服务以便应用配置

root@Openwrt:/# /etc/init.d/network restart

理论上这时候就可以访问OpenWrt的luci了,插上Lan口线,使用浏览器打开前面设置的“ipaddr”试下

然后输入第一步“passwd”后的密码

如果到这里一切顺利的话,那说明OpenWrt的Lan已经配置完成,且DHCP理论上也已经运行,内网就算成型了,接下来就可以配置Wan了。

配置Wan前的准备工作

配置Wan之前得先确定你Internet接入方式,家庭网络通常有两种接入方式:

  1. 光猫拨号(PPPoE),同时承担路由器功能
  2. 光猫只做光交,由接入光猫的客户端自行拨号(PPPoE)

如果你没有自行改动过配置或进行申请,通常ISP均使用第一种方式

第二种方式一般称之为桥接,桥接有一些好处和坏处,这里就不展开了

但好巧不巧,我就是向ISP申请过桥接的那个人,所以实际场景中我需要将Wan配置为PPPoE形式。但因此文章来自于测试场景,我干脆两个都讲讲好了。

配置Wan(DHCP)

针对光猫拨号的场景,需要将Wan配置为DHCP客户端,事实上这一步不需要做什么。。。OpenWrt默认就是这个配置,所以你只要插上网线应该就可以用了。

配置Wan(PPPoE)

针对桥接的场景,则需要将Wan配置为PPPoE拨号。

进入到luci的接口管理页(Network-Interfaces),删除默认的WAN6接口,并保存,PPPoE不需要它获取IPV6。

接下来,编辑WAN,切换协议至PPPoE,输入用户名密码后保存

如果PPPoE拨号出现问题,可以至“Status – System Log”查看系统日志来排除故障

这一点真的比不上各种国产路由或iKuai之类的软路由(不够接地气)

如果系统日志没什么帮助的话(多半没什么帮助),那就需要通过SSH登陆至OpenWrt,去修改位于/etc/ppp/options的ppp的配置以便查看更为底层的日志了

root@OpenWrt:~# vim /etc/ppp/options

OpenWrt默认把ppp日志直接灌进“黑洞”(/dev/null)了,修改该路径为合适的路径后保存。同时也可以把debug前的注释拔掉。

在调试完成之后记得把相关配置再修改回来,除非你打算每时每刻看拨号日志。

配置好之后应该看到这个效果,Wan是有获取到IP且有tr/rx

这张配图来自实际场景,所以UI表现会有所不同,意会一下即可

至此,Wan相关的配置已经结束,如果一切顺利的话,这时候连接至内网的设备已经可以正常访问Internet了,下面我们配置一下稍微进阶的功能。

使用opkg安装所需依赖

opkg是OpenWrt下的包管理程序,就像CentOS下的yum/dnf,Ubuntu下的apt-get一样。接下来我们将使用它将路由器的功能进一步强化,以实现标准路由器(指傻瓜型)的所有功能。

使用opkg有两种方式,第一种可以通过luci直接对包进行增删改查,第二种可以通过SSH直接使用opkg <sub-command>进行使用。这里为了降低门槛,文章以luci为主要使用方式

通过“System – Software”访问到luci的“软件中心”

首次使用需要先更新一下列表,以便抓取远程源中的包列表

待更新…

1 个评论
来吐个槽(ノ*・ω・)ノ)