宿舍单臂路由捣鼓记录!

牧濑绘守 发布于 2024-12-02 26 次阅读


〇、前言

宿舍买了一台2680v4服务器挂在旁边用,承担宿舍DDNS、NAS、HA和MC服务器等等的作用,从一开始单单一台的Windows虚拟机膨胀到8~9台虚拟机,配上路由器DHCP无序分配IP,宿舍网络IP的熵高到简直无法忍受!于是想着给虚拟机配置子网/VLAN一劳永逸~

一、网络环境分析

起初的网络环境:联通ZTE光猫→(二层交换机→宿舍PC1、PC2)+宿舍PC3+宿舍PC4+服务器。(考虑到PC3、PC4的哥们电竞需要低延迟,把他们的电脑直连路由器。)宿舍DHCP分配由光猫负责,Wi-Fi也在光猫上,实质上的交换机也是光猫。原本就想靠这个孱弱的光猫撑下宿舍的网络,结果日均20台接入设备让光猫烫到要冒烟,PC和Wi-Fi也出现断流现象,再加上光猫破解无果,没法进行进一步的配置(主要是要对路由表和DHCP Option做调整)来划分子网,故而放弃光猫,加购小米AX3000路由器一台继续配置(实际上虽然路由器性能强大,但是也算为后面增添了麻烦,AX3000实质上不能刷入OpenWrt,只能在虚拟机上变通一下了,也因此有了这个文章,不然这个文章就会变成——路由器VLAN捣鼓记录了)。

有效的网络环境:光猫→小米路由器→(二层交换机→宿舍PC1、PC2)+宿舍PC3+宿舍PC4+服务器(单口网卡)。小米路由器默认分配192.168.31.0/24的IP段,改!宿舍PC、Wi-Fi接入设备由小米路由器DHCP服务负责分配IP段192.168.1.0/24(虽然是/24的子网掩码,但是限制了只分配.2~.99的末8位IP,98台撑爆了也足矣足矣),服务器下划虚拟机给定静态IP段192.168.2.0/24。

宿舍IPv4分配详情如下,针对OpenWrt虚拟机设外网网桥即小米路由器下划192.168.1.0子网为Bridge0直接桥接小米路由器,内网网桥即自身下划192.168.2.0子网为Bridge1,且实质上OpenWrt只起到分配两个网桥给下划虚拟机网卡,作为二层交换机的作用:

  • 192.168.1.1,小米路由器;
  • 192.168.1.2-192.168.1.99,小米路由器LAN和Wi-Fi接入设备;
  • 192.168.1.100,服务器PVE桥接Bridge0的IP;
  • 192.168.1.101,OpenWrt虚拟机桥接Bridge0的IP,路由接入192.168.2.0子网的网关;
  • 192.168.1.102,Win虚拟机桥接Bridge0的IP;
  • 192.168.2.99,服务器PVE的Bridge1桥接IP(不设置倒也没什么问题);
  • (以下IP的后8位和PVE中实际的虚拟机ID对应,方便记忆;)
  • 192.168.2.100,Win虚拟机在Bridge1下的IP;
  • 192.168.2.101,OpenWrt在Bridge1下的IP,内划LAN子网网关;
  • 下略,是其他无关紧要的虚拟机IP。

二、IPv4配置过程

接下来是主要的配置过程,先说IPv4,最近学校电信分发了IPv6,有空在最下面再跟进一下IPv6的配置过程。有几个关键点亟待解决,一是小米路由器的路由表和DHCP Option下发对192.168.2.0子网的路由,二是Proxmox VE宿主机的网桥、下滑虚拟机的网卡配置,三是OpenWrt端的一些配置。

1. 小米路由器

先看小米路由器这边,首先是要破解一下,不然实在是什么可配置的空间都没有,这次用到的是GitHub上的xmir-patcher项目,应该是没有什么使用门槛的,利用工具丝滑打开SSH、软固化、修改root密码就可以,如果有什么问题,在打开SSH之后也可以直接使用密码计算器计算出root密码,然后进入SSH微调配置。(在这上面走了不少弯路,一开始跟着网上的老论坛帖子走,手动操作破解,结果拿到手直接更新路由器最新的1.0.38版本竟然封堵了过时的漏洞,白操作一通也没有解锁得了SSH呜呜……至于具体操作细节好像是SmartController上的漏洞,应该就是经典越界访问了吧~)

在这之后就是调整路由表,在br-lan上增加到192.168.2.0子网的路由,途径网关为OpenWrt虚拟机桥接192.168.1.0子网上的IP:

root@XiaoQiang:~# route add -net 192.168.2.0/24 gw 192.168.1.101
root@XiaoQiang:~# route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         101.94.12.1     0.0.0.0         UG    0      0        0 pppoe-wan
0.0.0.0         101.94.12.1     0.0.0.0         UG    50     0        0 pppoe-wan
101.94.12.1     0.0.0.0         255.255.255.255 UH    0      0        0 pppoe-wan
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br-lan
192.168.2.0     192.168.1.101   255.255.255.0   UG    0      0        0 br-lan
192.168.32.0    0.0.0.0         255.255.255.0   U     0      0        0 br-miot

然后再设置一下DHCP Option,因为小米路由器实际上是OpenWrt魔改版,所以熟练地找到/etc/config/dhcp进行修改就可以,修改如下,实际条目是增加一条DHCP Option 121,向自动获取DHCP地址的客户端发放一条路由:

config dhcp 'lan'
        option interface 'lan'
        ……
        list dhcp_option '121,192.168.2.0/24,192.168.1.101'  # 增加到192.168.2.0子网路由

修改完成后提交并重载dnsmasq服务即可:

root@XiaoQiang:~# uci commit dhcp
root@XiaoQiang:~# service dnsmasq reload

2. PVE宿主机

再看PVE宿主机这边,配置两个网桥vmbr0(前文中的Bridge0)、vmbr1(Bridge1)。vmbr0与服务器实际单口网卡桥接,设置IP为192.168.1.100/24,配置默认网关192.168.1.1。vmbr1与下划虚拟机网卡桥接,设置IP为192.168.2.99/24。关闭所有虚拟机内防火墙(有能力可以好好配置一下啦,但是PVE的防火墙用UI配置起来有点儿笨)。

此外,因为依赖了软路由的虚拟机,没有接入到Bridge0的下划虚拟机在OpenWrt没有正常启动前无法正常联网,需要保证OpenWrt虚拟机在宿主机内应该最优先启动。

3. OpenWrt虚拟机

最后看OpenWrt虚拟机,为其接入Bridge0、Bridge1后,像正常路由器一样配置就可以,WAN为桥接Bridge0的网卡并配置IP为192.168.1.101/24、网关为192.168.1.1,LAN连接Bridge1并配置IP为192.168.2.101/24,并配置正确的防火墙转发和Masquerade等选项。具体配置效果和配置内容可见下面IPv6配置过程中的OpenWrt接口截图。

三、IPv6配置过程

主要是对虚拟机下的设备配置IPv6,能够穿透DHCPv6包到Bridge1下划设备中,关键操作点:在OpenWrt虚拟机中配置接口WAN6,设置协议为DHCPv6客户端并自动获取IPv6地址和前缀,设置桥接接口为br-WAN,设置master选项(Specifies whether DHCPv6, RA and NDP in relay mode is a master interface or not.)为1,不然OpenWrt可能中继了自己的本地ULA前缀下发到子网里的虚拟机去。配置LAN接口中DHCPv6服务启动,路由通告服务、DHCPv6服务和NDP代理调为中继模式。

# /etc/config/network 关键修改省略号下若干行
config interface 'WAN6'
        ……
        option proto 'dhcpv6'
        option ifname 'br-WAN'
        option reqaddress 'try'
        option reqprefix 'auto'
# /etc/config/dhcp 关键修改省略号下若干行
config dhcp 'WAN6'
        option interface 'WAN6'
        ……
        option master '1'

config dhcp 'LAN'
        option interface 'LAN'
        ……
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'

可见OpenWrt的WAN6接口正确获取了IPv6地址和前缀,验证无误:

可见Windows虚拟机下两个连接到Bridge0和Bridge1的网卡都可获得IPv6地址,验证无误:

四、总结

这个方案主要还是有个缺点,因为前往虚拟机子网的路由强依赖DHCP Option 121下发,Windows和Linux都是正常支持的,安卓不知道抽了哪根筋不支持,所以安卓设备正常情况下被ban访问子网192.168.2.0咯,但是其实因为在OpenWrt上配置过OpenVPN,所以意外地最方便解决这个问题的办法是在宿舍连接VPN(套娃连接)!但是一想虚拟机这个子网也是个网络,所以这么做没有问题吧!!

其实做VLAN方案从效率和网络质量上来说还是最好的,就是实在太庞大了,小米路由器没有一套UI,相对来说就是一个黑盒,再加上服务器网卡只有单口,就算考虑到软件转发的性能也不能完全只拿它做软路由;所以走完这样一套流程下来,避免了VLAN和对小米路由器的大幅修改,这样配置也挺简单清晰的说……

而这里之所以在虚拟机下使用了OpenWrt的原因,一是考虑到是虚拟机专用的子网,所以在虚拟机下做网桥更合逻辑也更稳定合理;二是小米AX3000本身是ARM架构的芯片,刷入breed不可能,捣鼓OpenWrt更是没有相应版本,故而退步走更周折的方法,如果自备路由器支持安装OpenWrt,一些命令行的操作可以避免,实际上也不是单臂路由的方案而是要考虑VLAN了,划分服务器上192.168.1.0子网为VLAN1,192.168.2.0子网为VLAN2,再对路由器到服务器的网线进行Trunk汇聚即可~(缺点是:OpenWrt虚拟机必须启动,192.168.2.0子网下的设备才能有网络,仍需要保证OpenWrt在虚拟机启动时在最优先顺序。)

此作者没有提供个人介绍。
最后更新于 2024-12-02