家庭网络配置

19年的时候搞了块J3455的板子自己拼了个NAS,可能机箱空间太小,硬盘数据线有时接触不佳,老掉盘。搞了2个2T,1个3T的SATA硬盘,当时图便宜都是SMR的盘,硬盘数据老真的是老慢慢,现在准备是用来搞冷备使用了。系统盘当时用的一个Thinkpad T400淘汰下来2.5寸的机械硬盘,老盘时常出问题,一出问题就只能把机箱搬到电视机前(家里没有HDMI显示器),然后再调试。搞过几次吧,很烦,于是搞了个HPE Microserver Gen8,主要是有iLO,解决显示器的问题。然后后面又搞了一些二手的东西,把家里的网络终于搞得可用了。

硬件

GPON: Nokia G-010S-A,原来用的是运营商光猫桥接,然后有个Buffalo WZR-HP-AG300H刷了OpenWrt来拨号。后来买了个弱三层的交换机,就全部网络设备动了动。

主路由:EdgeRouter X-SFP,当时在小黄鱼蹲守的时候,主要看中的是这个和Mirotik hEX S,两个价格差不多,但前者存储比后者大,所以就入了X-SFP。入手后发现还是X-SFP比较适合我吧,系统基于Debian,配置相对ROS也简单。但确实ROS要配置更丰富一些。

核心交换机:Huarong S5735S-L8T4S-QA2,当时某项目现场用到了这个型号,PDD入了一个,感觉应该是弱三层里非常非常便宜的了。

接入交换机:Linksys SLM2008,简单网管交换机,最早为了测试链路聚合,二手入的。

无线APHuawei AX6,刚开始用的是Tenda AC6。两个都是纯AP模式,后面新买的效果真的是秒杀。

配置

目的

以前用的是OpenWrt通过MAC配合防火墙来实现设备是否可以上网,解决未经许可连接WIFI的人蹭网,主要是常常有人用Android的什么万能钥匙,具体设置

现在用弱三层交换机当核心,实现DHCP Server,ACL控制,路由器与交换机通过OSPF动态路由,这样交换机及路由器功能分开,坏一个,其他能正常工作。不同网段通过ACL进行限速。

然后用GPON可以省掉光猫。用AX6无线路由器当AP,再配合交换机的MAC-VLAN功能,实现无线设备的网络隔离。

具体现有的大致网络示意图如下。

networking

GPON

最初想直接把GPON插在交换机上使用,发现可以识别,但无法使用,后面才买的X-SFP路由器。但GPON最开始的时候LAN IP是192.168.1.10,和现有的网络冲突,记得好像是用fwsetenv的命令改了IP地址,只修改配置文件不行,稍微研究了下,应该是配置文件写到变量里面去了,启动的时候读取mtd分区来设置环境变量,所以单纯修改配置文件无效。

主路由

路由器用的是X-SFP,基本满足了我的需求,但是IPv6这块有点小问题,好像无法用DHCPv6 Server来分配从ISP获得的IPv6 PD进行网络划分,但Mikrotik可以实现。OSPF动态路由,主网10.0.0.0/24(路由器LAN),子网192.168.100.0/24(GPON LAN)。

现在主路由的功能主要是:

  1. PPPoE拨号
  2. FRP内网穿透(IPv4 SSH)
  3. Wireguard,外网可连接路由器
  4. 脚本实现IPv6 DDNS,DigitalOcean可以通过curl来更新DNS记录,方便用IPv6的时候进行连接SSH控制内网。
  1. DNS查询转至内网Pihole,解决部分流氓软件或广告,以及实现内外网同一域名访问服务。同时运行一个小脚本,当内网Pihole无法正常提供服务器,放行外网DNS查询。

其他上Github上找了一个自动备份的脚本,原本是可以在commit的时候自动进行备份,后面发现在频繁,于是改动每天自动备份。

其中各接口用途:

  • Eth0: 之前用于接光猫桥接进行PPPoE拨号的,后空着,后续如果ISP禁了GPON的话,可以直接连光猫使用。
  • Eth1、Eth2: Switch0(10.0.0.1/24),VIF 1000(IPv6),接内网。
  • Eth3: 192.168.200.1,PoE 24v供电给Mikrotik 750Gr3,开启DHCP Server,主要是测试Ros使用,不测试的时候PoE取消。
  • Eth4: VIF 8(192.168.8.x),连接交换机管理VLAN,可通过路由器直接管理交换机。
  • Eth5: 192.168.100.1,PPPoE拨号。

路由器具体配置,其中部分就是防火墙部分需要开启对应的规则,LOCAL、IN等端口。

路由器IPv6设置

最开始向导设置的时候就启用IPv6,这样系统会自动创建IPv6的防火墙规则,省不少事。IPv6我主要是用来外网直接访问内网服务和SSH,以及PT下载。AKA:之前是可以直接访问443端口的,后来封掉,只改用其他端口了。

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
firewall {
options {
mss-clamp {
interface-type pppoe
mss 1452
}
mss-clamp6 {
interface-type pppoe
mss 1432 #解决IPv6上网慢的问题
}
}
}
interfaces {
ethernet eth5 {
address 192.168.100.1/24
description "Internet SFP"
pppoe 1 {
default-route auto
dhcpv6-pd {
no-dns
pd 1 {
interface switch0.1000 {
host-address ::1
no-dns
prefix-id :1
service slaac
}
prefix-length /60
}
rapid-commit enable
}
ipv6 {
address {
autoconf
}
dup-addr-detect-transmits 1
enable {
}
}
}
}
switch switch0 {
vif 1000 {
description IPv6_HOME_LAN
ipv6 {
router-advert {
default-lifetime 1800
max-interval 600
min-interval 60
prefix ::/64 {
autonomous-flag true
on-link-flag true
preferred-lifetime 86400
valid-lifetime 86400
}
reachable-time 0
retrans-timer 0
send-advert true
}
}
}
}
wireguard wg0 {
address 10.8.2.x/32
description Wireguard
mtu 1420
peer xxx {
allowed-ips 10.8.2.0/24
endpoint xxxx:52550
persistent-keepalive 60
}
private-key ****************
route-allowed-ips true
}
}
service {
# 转发DNS请求至pihole
nat {
rule 10 {
description DNS
destination {
address !192.168.1.199
port 53,5353,5354,853
}
inbound-interface switch0
inside-address {
address 192.168.1.199
port 53
}
protocol tcp_udp
source {
address !192.168.1.199
}
type destination
}
rule 5002 {
description "Maqquerade for DNS"
destination {
address 192.168.1.199
port 53
}
outbound-interface switch0
protocol tcp_udp
source {
address 192.168.0.0/16
}
type masquerade
}
}
}

核心交换机

当时想搞个三层交换机的原因就是想家里用VLAN进行网络隔离,并对不同网段进行上网限制,但内网访问速度不进行限。最早的时候用X-SFP当单臂路由进行VLAN隔离的,网间流量需要经过路由器,且路由器firewall规则多了之后会影响速度,最后买了个弱三层交换机。

有线部分的网段划分比较简单,然后AX6不支持WIFI VLAN隔离,最后查文档的时候想到VLAN划分还有MAC划分,然后想着就WIFI过来靠MAC进行VLAN划分。

VLAN划分如下:

  • 8: 管理VLAN
  • 100: 用于上行链路,连路由器
  • 200: 服务器及需要大带宽的设备,不限速,其他网段无法访问此网段,除NAS,Pihole
  • 210: 一般设备接入,默认WIFI接入VLAN,下行限100,上行限20
  • 220: 用于IoT,摄像头、天猫精灵、火火兔等,下行限10,上行限10
  • 230: 用于不让连外网的设备,电视机、无线路由器AX6、空调、天猫精灵(不让小孩听的时候)等
  • 1000: 用于IPv6接入

每VLAN配置:

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
64
65
66
67
68
69
70
vlan 8
description lan for mgmt
name MGMT_LAN
management-vlan
vlan 100
description to route
vlan 200
description lan for home
name HOME_LAN
mac-vlan mac-address e45e-3732-xxxx priority 0
dhcp snooping enable
ipv4 source check user-bind enable
ipv6 source check user-bind enable
vlan 210
description lan for guest
name GUEST_LAN
dhcp snooping enable
ipv4 source check user-bind enable
ipv6 source check user-bind enable
traffic-policy tp_vlan210-to-lan inbound
vlan 220
description lan for IoT
name IoT_LAN
mac-vlan mac-address ec3d-fdbe-xxxx priority 0
dhcp snooping enable
ipv4 source check user-bind enable
ipv6 source check user-bind enable
traffic-policy tp_vlan210-to-lan inbound
vlan 230
description intranet
name Intra_LAN
mac-vlan mac-address 345b-bb8f-xxxx priority 0
dhcp snooping enable
ipv4 source check user-bind enable
ipv6 source check user-bind enable
traffic-policy tp_permit-199 inbound
vlan 1000
description ipv6 for lan
interface Vlanif8
ip address 192.168.8.x 255.255.255.0

interface Vlanif100
ip address 10.0.0.2 255.255.255.0
interface Vlanif200
ip address 192.168.1.1 255.255.255.0
dhcp select interface
dhcp server ip-range 192.168.1.x 192.168.1.x
dhcp server gateway-list 192.168.1.1
dhcp server dns-list 192.168.1.199 223.5.5.5 114.114.114.114
dhcp server logging allocation-fail allocation-success renew-success
interface Vlanif210
ip address 192.168.21.1 255.255.255.0
dhcp select interface
dhcp server ip-range 192.168.21.x 192.168.21.x
dhcp server gateway-list 192.168.21.1
dhcp server dns-list 192.168.1.199 223.5.5.5 114.114.114.114
interface Vlanif220
ip address 192.168.22.1 255.255.255.0
dhcp select interface
dhcp server ip-range 192.168.22.x 192.168.22.x
dhcp server gateway-list 192.168.22.1
dhcp server dns-list 192.168.1.199 223.5.5.5 114.114.114.114
dhcp server logging allocation-fail allocation-success renew-success
interface Vlanif230
ip address 192.168.23.1 255.255.255.0
dhcp select interface
dhcp server ip-range 192.168.23.x 192.168.23.x
dhcp server gateway-list 192.168.23.1
dhcp server dns-list 192.168.23.1
dhcp server logging allocation-fail allocation-success renew-success

各接口设置:

  • G0/0/2: 上行链接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    interface GigabitEthernet0/0/2
    port link-type hybrid
    port hybrid pvid vlan 100
    undo port hybrid vlan 1
    port hybrid tagged vlan 1000
    port hybrid untagged vlan 100
    loopback-detect enable
    traffic-policy tp_dest-vlan210 inbound
    traffic-policy tp_source-vlan210 outbound
    dhcp snooping enable
  • G0/0/6,G0/0/8: Eth-Trunk,连NAS链路聚合

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    interface GigabitEthernet0/0/6
    eth-trunk 1
    interface GigabitEthernet0/0/8
    eth-trunk 1
    interface Eth-Trunk1
    port link-type trunk
    undo port trunk allow-pass vlan 1
    port trunk allow-pass vlan 8 200 210 220 230 1000
    loopback-detect enable
    stp edged-port enable
    dhcp snooping enable
  • G0/0/1,G0/0/3,G0/0/4,G0/0/5,G0/0/7,G0/0/9-G0/0/12: 下行链接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    interface G0/0/x
    energy-efficient-ethernet enable #SFP无
    port-auto-sleep enable #SFP无
    port link-type hybrid
    port hybrid pvid vlan 210
    undo port hybrid vlan 1
    port hybrid tagged vlan 8
    port hybrid untagged vlan 200 210 220 230
    loopback-detect enable
    stp edged-port enable
    mac-vlan enable
    dhcp snooping enable

OSPF及ACL策略:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ospf 1 router-id 10.0.0.2
area 0.0.0.0
network 10.0.0.0 0.0.0.255
area 0.0.0.1
network 192.168.1.0 0.0.0.255
network 192.168.21.0 0.0.0.255
network 192.168.22.0 0.0.0.255

traffic behavior tb_dest-vlan210
car cir 51200 pir 102400 cbs 6400000 pbs 12800000 mode color-blind green pass yellow pass red discard
traffic behavior tb_dest-vlan220
car cir 5120 pir 10240 cbs 640000 pbs 1280000 mode color-blind green pass yellow pass red discard
traffic behavior tb_source-vlan210
car cir 5120 pir 10240 cbs 640000 pbs 1280000 mode color-blind green pass yellow pass red discard
traffic behavior tb_source-vlan220
car cir 5120 pir 10240 cbs 640000 pbs 1280000 mode color-blind green pass yellow pass red discard

SLM2008

交换机没有华为系的Hybrid接口,把连AP的口和上链口都设成同一个untagged vlan ID,这样可以靠上链交换机的MAC-VLAN功能进行VLAN划分。其他口我也没再划分其他VLAN的想法,都设成同一个untagged,只是上链口还有一个tagged vlan 8,这样可对其进行简单管理。

Gen8

哈,刚买Gen8的时候,少几个螺丝,跟客服沟通,我说买的G8(J8)少几个螺丝,那边哥们狂笑,连忙说Gen8(根8),哈哈哈。

硬件稍微升级了下,CPU/E3-1265L V2,内存/HPE SmartMemory 8Gx2,RAID卡/Smart Array P222 Controller,硬盘/SAS 4Tx4/SSD 512G/SD 8G。P222卡的温度还有点高,买了个4cm风扇,接主板里面的USB供电,从原来的70度降到47度左右,不知道夏天温度会怎样。

Host OS: HPE-ESXi-6.7.0-Update3-19195723-iso-Gen9plus-670.U3.10.9.0.8 (Hewlett Packard Enterprise),安装在内置的8G SD卡,为了减少SD卡的写操作,将系统的log日志改写到其他Datasource里。

最开始的时候买了个PCIe转NVMe的卡,然后Datasource就放在这个盘里面。后来看到小黄鱼上面有4个4T的SAS盘,买回来后感觉还是超值的,2021年产,通电时间2年,写入只有30多G。为了这4个盘,所以买了P222卡(改成HBA模式),然后PCIe转NVMe的卡只能下岗。后面把SATA 5位置(ODD)升级为512G的SSD盘了,之前是一个12年买的Intel 40G :(,虽然接口速度只有SATA1,但用来安装Guest OS影响不大。然后Guest OS备份的话,可以直接挂载Guest OS的NFS成Datasource,将备份文件存到NFS里。

Guest OS

  1. Alpine: Docker Image里经常看到的OS。这里最主要的作用是用来跑Docker aList,用来挂载中国移动的网盘,然后Debian挂载,备份文件存到网盘。最开始的时候是在Debian里面直接容器跑的,但是不能一启动就挂载,所以改到Alpine里面跑,然后把Alpine设置成随Host OS第一个启动,Debian延迟启动,这样就不用去搞脚本在Debian里延迟挂载,总感觉优雅,所以单独用Alpine提供aList网盘服务,Debian启动直接WebDav挂载。
  2. Debian: 主力NAS系统。直通P222卡,挂载4个SAS盘。三张网卡,分别对应VLAN 200/8/1000,不限速网段/管理网段/IPv6网段。
    2.1 提供SMB服务,TV Kodi给小孩看影片,通过Siri可远程开关服务
    2.2 提供NFS服务,TV Kodi给大人看影片,呵呵,Kodi可设置多个profile,这样小孩默认profile默认是用SMB,而切换profile后默认是用NFS。 :)
    2.3 Nextcloud容器,方便手机照片备份以及其他一些小资料存储
    2.4 Navidrome容器,提供音频服务,硬盘里有一直存放的音乐,可以用手机播放,还能用CarPlay,很不错,解决了车上听歌的问题,不用再烦各种音乐播放软件
    2.5 Pihole容器,提供内网DNS服务,解决部分广告及隐私收集问题,还有内网域名解析。
    2.6 qBittorrent容器,主要用于PT下载。之前用的Transmission,几个CUI停更后,换成qBittorrent了。
    2.7 其他,FRP内网穿透,Netty-Protobuf内网穿透(自己写的),Wireguard内网穿透,CURL脚本更新域名DNS IPv6地址,Nginx反代各二级域名访问内网以上各服务及iLO、ESXi等(同步VPS的SSL证书,并加简单认证),BorgBackup备份Debian系统、Nextcloud及个人资料并定时上传到网盘。
  3. Win7: QQ或Wechat使用,远程给小孩打印作业 :),并增加各网段网卡测试使用。
  4. DSM7: 当时本来打印用作主力NAS的,因无法使用现有硬盘资料,且挂载的NFS无法使用各服务(当时主要想用Audio Station)。现在主要用来下载一些其他网盘的资料,比如OneDrive,GoogleDrive等。
  5. FreeBSD: 想着用ZFS,但没法用Docker,又不想再去折腾Jail,放弃作主力NAS,当作测试使用。
  6. Gentoo: 一直非常喜欢的一个发行版本,当时在上家单独,一直用它当主力开发系统。留着测试使用。
  7. pfSense: 尝尝其他系统 :)

访问内网服务

域名DNS设置:

  • A Record: 设置成VPS的IPv4地址,然后NAS里设置FRP将Nginx端口映射到VPS,再在VPS的Nginx设置反代到FRP映射的端口,NAS里的Nginx通过二级域名访问各服务。Internet --> VPS Nginx --> FRP --> NAS Nginx --> 各服务
  • AAAA Record: 因某国内最轻的VPS没有IPv6地址,NAS脚本每隔1小时更新此记录。这样可以直接SSH连到内网,或访问各服务。Internet --> NAS Nginx --> 各服务
  • CNAME Record: 设置各服务的二级域名alias到前面A和AAAA记录上,这样只需改A和AAAA记录,服务的二级域名无需修改。

主要参考: