概述

这个假期回来把自己家的网络进行了一次大改造,主要是实现了以下内容

  1. 增加了两台机器(单网口),并实现虚拟化
  2. 实现到 LuckyServer 方向的网络互通
  3. 实现自建 DNS Server
  4. 增加旁路网关
  5. 增加 IPTV 服务器
  6. 使用 LuckyServer 端设备对本端网络设备进行监控
  7. 增加了 IPV6 并对外提供服务

为了实现以上目的,增加了两台 X86 的机器,使用 PVE 进行了虚拟化,用 PPTP 打通了两端网络,AdGuard 实现 DNS 服务,OpenWRT 实现旁路网关,MQiTV 实现 IPTV 服务器,Cacti 对网络设备进行监控,使用之前建设的 serverstat 平台监控新增的两台设备的运行状况,UptimeRobot 从外网端进行监测

细嗦

01 虚拟化

虚拟化本次选择了非常经典的 ProxmoxVE ,选择 PVE 的原因有这么几个

  • UnRAID 一台机器需要一个U盘,很浪费U盘
  • 本次不需要用机器来跑 Docker
  • 不需要存储功能
  • PVE 的 Debian 系统本身可以跑一些程序
  • 相比 ESXI 开源免费

安装非常简单,需要注意的是虚拟化如果要做成 All in One 的话,网络设置这里稍稍有点复杂,尤其是单网口的机器

说个小插曲,这次用的机器兼容性有点诡异,最开始没有做虚拟化跑了一段时间,这个机器和软路由系统兼容性不大好,可以跑的系统只有 OpenWRT 和秒开路由,iKuai 装上了无法启动,看论坛说可能是硬盘的问题,硬盘是 BIWIN 的 64G SSD。

秒开对单网口机器在 Wiki 上给出的方法是使用混杂模式跑 macvlan ,家里用的交换机是某宝百元的八口千兆交换机,这个交换机的 Vlan 实现方法和平时配的锐捷交换机相差很大,是 Tagged/ Untagged/ Not Memeber 模式 + PVID 而不是 Trunk / Access 模式,这个倒是折磨了半天才绕过弯儿来

秒开的 macvlan 模式很怪,不知道是不是这个机器的网卡的问题,DHCP 的静态分配固定不下来,导致用起来很麻烦。于是就更想换掉,最后想到了虚拟化这个方法,最后成功让这个机器把 iKuai 跑起来啦~

顺带,我办公室用的秒开的机器似乎有不时断网的问题,等回去了之后还是换 iKuai 试试,根据之前调试的情况怀疑是它的问题

还有就是秒开到现在还是不支持 IPV6 ,有点拉了

交换机设置

回到正题,单网口的机器需要借助 VLAN 来扩充网口,交换机像这样设置,iKuai 软路由使用单臂模式(虚拟 8 个网口,对应 VLAN 1 ~ 8 )

VLAN号 VLAN名 组成端口 TAG标记端口 无TAG端口
1 LAN24 2-8 2 3-8
2 server 2-8 2 3-8
8 WAN8 1-2 2 1

TAG 可以简单理解是 Trunk 口,无 TAG 可以理解是 Access 口,进 PVE 的口划为 Trunk 口

VLAN 1 作为 LAN 口,2 作为 PVE 的内网段,8 作为 WAN 口,交换机 1 口接光猫,2 口接 PVE ,3 ~ 8 口接内网

PVID 这样设置(检测没有 TAG 的报文就打上这个 TAG )

端口 PVID 接收帧格式
Port 1 8 All
Port 2 1 All
Port 3 1 All
Port 4 1 All
Port 5 1 All
Port 6 1 All
Port 7 1 All
Port 8 1 All

同时需要做 DHCP Snooping 防止光猫、内网路由器等可能的 DHCP 服务器分配地址导致冲突

Port Port 1 Port 2(PVE) Port 3 Port 4 Port 5 Port 6 Port 7 Port 8
DHCP Server x
DHCP Client x x x x x x x

PVE 设置

如下图,vmbr0 桥接网卡( enp2s0 ),vmbr0 给到软路由,vmbr0.1( VLAN 1 )给 PVE 做管理地址,vmbr0.2( VLAN 2 )给 PVE 内部虚拟机用

在创建 VLAN 网段的时候有点绕,需要先创建一个 VLAN ,再桥接这个 VLAN ,再把这个桥接的网卡给虚拟机

PVE网络设置

虚拟化的重点就是这些

02 网络互通

这个移动坏的很,Ovpn 流量是被阻断的,用手机流量可以连但是用宽带就不行,但是 PPTP 和 L2TP 还是可以用的,我们使用 PPTP 来做互通

方法很简单,服务器给客户端固定 IP 地址,两侧写静态路由,把通往对端的路由写进路由表即可

服务端网关 IP 177.229.26.1 ,服务端给客户端固定分配地址 177.229.26.2 ,服务端主 IP 段 177.229.25.0/24 ,服务端 PPTP 服务网段 177.229.26.0/24 ,客户端主 IP 网段 177.229.24.0/24 ,客户端虚拟机网段 177.229.23.0/24

服务端设置

线路 目的地址 子网掩码 网关 优先级 备注 状态 操作
自动 177.229.24.0 255.255.255.0 (24) 177.229.26.2 1 已启用 编辑 复制 停用 删除
自动 177.229.23.0 255.255.255.0 (24) 177.229.26.2 1 已启用 编辑 复制 停用 删除

客户端设置

线路 目的地址 子网掩码 网关 优先级 备注 状态 操作
自动 177.229.25.0 255.255.255.0 (24) 177.229.26.1 1 已启用 编辑 复制 停用 删除

需要注意,如果用旁路由的话,旁路由也要做相应设置

03 DNS Server

使用旁路网关的 AdGuard 即可实现,OpenWRT 编译非常简单,我用的是自己编译的固件,可以参考我的仓库

04 旁路网关

同上

05 IPTV 服务器

这个有两个比较好的方案,一个是秒开的 IPTV ,免费版限制 20 终端,家用够了,客户端好用,而且支持点播。还有安网的 iTV ,也是免费,还没有试,后面试试再康康,不能点播

关于 IPTV 的来源,可以去 GitHub 上找别人分享的,但是要注意只能使用同运营商的,比如移动的宽带只能用移动的 IPTV 源,另外,如果有买运营商的 IPTV 服务,可以考虑自己抓源,服务比较废内存,需要注意一下服务器的配置,另外,如果不走运营商 iTV 的话,带宽还是比较吃紧的

06 网络监控

对于支持 SNMP 的机器,可以使用 Cacti 监控,Docker 即可部署,很简单

fangwentao/docker-cacti 这个源,给一个时区参数 -e TZ=Asia/Shanghai ,带中文界面

对于 Linux 系统,使用自建监控 serverstat ,使用的是 Github 的 cokemine/ServerStatus-Hotaru

UptimeRobot 配置很简单不多介绍,另外本地也可以自建 Uptime Kuma 服务来进行监控

07 IPV6

这个稍稍有点麻烦了,主要是两点

  • IPV6 全程公网 IP ,不存在端口转发,给了就是公网,需要注意安全问题,可以用 rich-rule 对管理端口加以限制,网站后台管理 URL 不使用默认地址,另外使用 Google 动态口令二次验证
  • IPV6 DHCP 分有无状态,实际测试建议使用有状态+无状态模式,纯有状态模式部分机器租期到了不会继续获取地址(emmmm,就很……)

对于域名解析需要使用 DDNS ,需要注意 DDNS 服务必须在跑服务的机器跑,试了 C# 写的 real-zony/AliDDNSNet 但是似乎不支持 IPV6 的 DDNS ,最后选的 Go 写的 honwen/aliyun-ddns-cli ,设置每分钟执行一次,很好用

如果使用宝塔的话,需要注意自动生成的模板可能没有 IPV6 的服务,需要手动加一下( server 一节开头)

[::]:端口 提供 IPV6 服务

server
{
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;