🧐双系统软路由组网杂记

tags
server
life
type
Post
summary
status
Published
slug
play-with-the-router
date
Oct 15, 2023
最近购入了一台畅网N100小主机当作家中的网关,经过几天折腾,初步理出利用这台小机器的组网方案,记录并分享一下。

系统环境

  • OS: Windows Server 2022 Datacenter
  • CPU: Intel N100 Alder Lake
  • NIC: Intel I226-V *4
由于I226-V并非服务器网卡,Intel官方不提供其Windows Server版本驱动,直接下载Intel的驱动包会发现无法安装。
作为一个替代解决方案,可以将Windows设置为Test Mode,修改Intel驱动包中I226-LM网卡的设备签名并强制安装(即I226-V的服务器版本),即可为其安装驱动。目前尚不清楚这样做是否会影响网络稳定。

最终实现效果

iKuaiOS是国内较知名的免费软路由固件,提供丰富的流控和转发功能,但由于众所周知的原因,该平台不提供三方插件的开发和安装。
Openwrt也是流行的路由器固件,发行版众多,插件丰富,但系统稳定性比较一般。
目前比较流行的玩法是将Openwrt安装为一台旁路网关(所谓旁路由),当设备连接到网络时,需要手动更改ip并将网关指向Openwrt,即可借助其转发流量,或者在DHCP服务器中配置旁路网关信息——很明显,这样的玩法不够优雅,而且由于网关不唯一,iKuai无法探测到Openwrt下连设备的情况,流控功能残缺。
因此我采用如下方案,搭建两套基于Hyper-V虚拟环境的软路由系统,以结合二者的优势:
  • iKuaiOS负责拨号,分流,DHCP服务器
  • Openwrt系统负责部署OpenClash科学客户端、去广告插件等。这里我选用了iStoreOS固件,部署比较方便。
网络拓扑图
网络拓扑图
图中黑实线代表直通给虚拟机的三张物理网卡,黑虚线代表Hyper-V中的private v-switch;红实线代表external v-switch,宿主机借助这个虚拟网口联网,实际设备上对应的这个网口是不插线的(也就是所谓的管理用网口)
根据以上的拓扑设计,能实现如下的效果:
  • Hyper-V直通网卡给到iKuai路由系统,尽量避免使用Windows提供的虚拟交换机,从而保证内网/公网交换达速运行,且不影响宿主机CPU负载
  • 彻底淘汰旁路由,家中所有设备均采用iKuai的网关,由iKuai根据访问场景自动分流到Openwrt虚拟机,无感科学上网
  • 当Openwrt中出现链接与环境问题,Internet链接会自动切换回默认的拨号连接,保证可用性
  • 如果有设备需要使用Openwrt中的插件(智能家居,游戏加速器等),在爱快中可以指定ip分流到wan2

Hyper-V如何实现硬件直通

Windows Server版本的Hyper-V中,提供了名为Discrete Device Assignment(DDA)的功能。此功能可以将Windows中安装好的PCI硬件卸载并直通到指定的虚拟机环境中。
默认情况下,不支持硬件虚拟化的设备多为驱动限制——比如Nvidia仅为专业版显卡提供vGPU的支持,而借助DDA的直通功能,只要虚拟机环境中有此设备的驱动,即可直接在虚拟机中使用这一设备。
为软路由系统直通网卡,可以直接使用硬件交换内部流量,相较于v-switch使用CPU效率更高,在高负载内部转发的场景中大大减少CPU占用。
关于如何为硬件设备配置DDA可以参考微软的官方说明:
当然,有好心人开发出了DDA配置的GUI界面,可以进一步节省我们的配置时间:

双软路由系统网络如何配置

参照如上的拓扑图分别在iKuai和Openwrt中自行设置其实更有成就感😊
境内外流量分流基于中国IP CIDR数据实现,表内IP走直通,表外IP走Openwrt转发。
借助于iKuai的多线负载功能实现,参考的是如下大神的一篇分享:
关于iKuai保存的中国IP CIDR数据的更新,也有好心人实现了自动化,启用一个docker容器即可自动更新
由于iKuai的Docker插件并不好用,而且资源占用很大,我仍倾向于手动管理这个IP表,两三个月想起来的时候更新一下就是。
提醒一点,组网时只在iKuai中搭设lan口DHCP服务器,一定要关闭Openwrt的lan口DHCP服务器,这一点非常容易遗忘。

远程管理&基本的Server Hardening

采用如上拓扑的Windows Server宿主机无物理网卡控制权,需要于外网使用远程桌面与Admin Center时,应于iKuai中为宿主机ip配置端口转发。(注:这也体现采用此种方案的一个优越性,旁路由模式需要将相同的端口转发两次,很丑陋)
俗话说,GUI只会拖慢我们拔剑的速度,对于真正的强者,直接操作Windows Server Core也不失为一种头铁的选择。对于我们这些弱者,可以安装Windows Admin Center,提供了远程管理服务器的Web界面,操作逻辑和Azure差不多。
除开远程管理转发的那些端口,我们暴露于公网的设备其实是iKuaiOS,虽然对于个人来说遭受虚拟机逃逸攻击的概率不大(前提是远程端口不被扫出来),但以防万一,Windows中基本的server hardening还是要做一些的,我罗列了几点,也欢迎大家帮忙补充:
  1. 禁用Administrator账户,可以于Administrators用户组新建一个自定义账户用于日常操作
  1. 启用复杂的密码并定期更新,如果有AzureAD Premium订阅,可以为Windows登录启用2FA验证
  1. 避免使用3389当作远程端口,iKuai端口转发时设定一个偏门的高位端口相对安全
  1. 最优选是选一台家中装了Windows 11的台式机当作登录Windows Server的跳板机,在Windows Server中只放行Private Network域中的3389流量。Windows 11机器平时是关闭的,开机远程时需要使用Microsoft账户登录,自然更加安全
  1. 定期查看Security Event Logs,评估安全风险
  1. 只启用必要的服务,如果只是完成软路由的需求,除了Hyper-V不需要别的组件了

一些踩坑总结

Q:Hyper-V安装爱快iKuai x64版本提示内存不足怎么办?
A:x64镜像启动时要求至少有4GB可用内存,实际上1G左右足矣。可以在其他电脑中先用镜像装出VHDX虚拟磁盘文件,再挂载在软路由的虚拟机上
Q:双路由系统数据交换,使用虚拟交换机是否会有性能瓶颈?
A:对于N100来说没有什么瓶颈。实际使用时,内网数据交换只会经过iKuai路由,而它已经网卡直通了。至于iKuai中多lan口软桥接的性能瓶颈是不可避免的,软路由的限制就在于此;外网访问也仅有境外流量会走虚拟交换机,受限于实际带宽,基本不可能有瓶颈。

如果你有什么想法,欢迎多多交流评论!
 

lucky_bricks © 2018 - 2024