0%

从0开始部署家庭网络

最近C同学希望升级一下他家里的网络,让我给他一点方案,希望能实现低成本的家庭基无线网络漫游、NAS相册备份、视频转码播放、无感出国留学、在外远程接入等功能。

这些基本上就是很标准的homelab玩法了,由于是从零开始搭建,再此记录一下以便日后可以翻看。

硬件选型

由于C同学已有一台arm的白群,内置了两盘位。所以新增的X86小主机选择了体积较小和较为节能的联想M710Q(NEC 7代小主机),具体配置G4560 + 8Gx2 RAM + 128G NVME。安装pve通过iscsi挂载白群的硬盘使用。

路由器用了最便宜的wifi6路由器小米CR660x ,mt7261的SOC虽然老一点,但是应付1G以内的宽带还是轻轻松松的,需要消耗性能的业务交给x86去解决就好了,路由器就做好网络NAT转换和无线网络覆盖就好了。openwrt对mt7621的支持也很完善。

硬件清单:

1
2
3
4
NAS:M710Q(NEC 7代小主机):G4560 + 8Gx2 RAM + 128G NVME
主路由:小米CR6609
AP:小米CR6608
光猫:友华pt921g

网络架构

C同学用的是移动宽带,没有公网ip,有NAT1和ipv6。考虑到需要实现在外远程接入,光猫改桥接是必须的。并且为了防止运营商随意修改光猫配置,使用了祖传的pt921g取代运营商送的光猫。

CR6609接管PPPOE拨号、dhcp、dhcpv6、openconnect+quagga接入D2O-Network、natmap内网穿透。

CR6608只做AP,通过有线连接CR6609,开启802.11kvr实现屋内无线网络漫游。

内网分为2个vlan分别绑定到2个SSID,有线口untag vlan 8,tag vlan 2。

1
2
LAN1(vlan8):主用lan,可接入D2O-Network,平常上网,nas服务等在此lan,地址分配198.18.x.x/24,ipv6分配0号子网 /63前缀
LAN2(vlan2):隔离lan,仅可访问互联网,适合各类iot设备接入和主lan隔离不可互访,地址分配192.168.x.x/24,ipv6分配2号子网 /63前缀

M710Q小主机安装pve系统,通过iscsi挂载群晖的硬盘

1
2
虚拟机1:安装飞牛NAS,直通核显提供相册和影视服务
虚拟机2:openwrt系统,通过lucky提供ddns和nat打洞实现在外访问

光猫改桥接

关于光猫改桥接,现在光猫上线后会随机改密码,默认的超级密码已经不可用,不想麻烦装维小哥获取超级密码。

直接通过原光猫背面的user账号登录,找到GPON的password并记录好,找到wan接口的vlan信息也记录好,PPPOE账号密码可以通过移动app重置。

pt921g是电信的光猫,用电信超级账号登录并开启telnet就可以手动设置vlan信息了,在wan连接,新建桥接,服务类型全部用OTHER。

1
2
3
4
5
6
移动的vlan绑定设置
vlan 41/41 宽带上网
vlan 45/45 语音vlan(由于没有固话,这个vlan不需要)
vlan 46/46 tr069
vlan 48/48 组播900 iptv
vlan 50/50 组播900 iptv2

值得留意的是,电信用的是LOID认证,在pt921g的web页面里设置的LOID和PASSOWRD是没法注册到移动的OLT上的,需要进入TELNET,通过命令行来设置GPON PASSOWRD。

pt921g开启telnet登录的方法

1
2
3
登录后在浏览器打开http://192.168.1.1/telnet.asp,就可以看见开telnet的选项。
telnet 192.168.1.1
# 帐号admin,密码1234/TeleCom_1234

改pon password

1
2
3
4
5
6
7
tcapi set GPON_ONU Password dxxxxxxxx3(原光猫内找到的GPON的password)
tcapi commit GPON_ONU
tcapi save
tcapi show GPON_ONU
reboot
查看注册状态
tcapi show XPON

配置完成后,路由器wan口接光猫千兆口拨号,iptv机顶盒接光猫的百兆口直接获取ip。

路由器固件

CR6609和6608先降级原固件,通过漏洞开启ssh,刷入pb-boot,具体流程网上太多了,不再展开。

然后刷ImmortalWrt,跟据需要在https://firmware-selector.immortalwrt.org/ 定制固件内置的固件包。

主要用到的的软件包:

1
2
3
4
5
-wpad-openssl wpad-mesh-openssl,删除默认的wpad-openssl,安装wpad-mesh-openssl提供802.11kvr功能
luci-proto-openconnect luci-proto-vxlan luci-proto-wireguard,提供基本的隧道功能
luci-app-ddns luci-app-natmap,ddns和natmap打洞
quagga-watchquagga quagga quagga-bgpd quagga-vtysh quagga-zebra,BGP接入D2O-Network
luci-app-https-dns-proxy,提供dns over https服务

构建汇总:

1
base-files block-mount busybox ca-bundle default-settings-chn dnsmasq-full dropbear firewall4 fstools ipv6helper kmod-gpio-button-hotplug kmod-leds-gpio kmod-nf-nathelper kmod-nf-nathelper-extra kmod-nft-offload libc libgcc libustream-openssl logd luci luci-app-opkg luci-compat luci-lib-base luci-lib-ipkg mtd netifd nftables opkg ppp ppp-mod-pppoe procd procd-seccomp procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd -wpad-openssl kmod-mt7603 kmod-mt76x2 kmod-usb3 kmod-usb-ledtrig-usbport -uboot-envtools wpad-mesh-openssl luci-app-ddns luci-proto-wireguard luci-proto-openconnect luci-proto-vxlan snmpd htop ip-bridge ip tcpdump mtr quagga-watchquagga quagga quagga-bgpd quagga-vtysh quagga-zebra luci-app-https-dns-proxy pppoe-discovery luci-app-upnp luci-app-banip ip6tables-mod-nat keepalived luci-app-natmap

ImmortalWrt与原版的OpenWrt对比(主要是C同学有用到的功能对比)

  • ImmortalWrt默认支持NAT1,原版OpenWrt没有合并代码,要自行补丁再编译。

  • ImmortalWrt的wan口使用独立GMAC,wan口与lan之间口路由转发可以跑满上下行千兆。但wan口与lan口桥接转发要经过CPU没法OFFLOAD,只能跑到300M左右。

    原版OpenWrt的wan口和lan口使用同一GMAC。wan口与lan口通过交互芯片桥接不经过cpu,桥接转发可跑满千兆。wan口与lan之间口路由转发需要经过CPU单臂路由,上下行加起来只有1G,没法上下行同时跑满千兆。

  • ImmortalWrt默认有luci-app-natmap,原版OpenWrt需要另外找ipk,另外构建固件或者刷机后再opkg安装。

Enjoy~~

参考:

https://www.chinadsl.net/thread-158357-1-1.html
https://www.callmewing.com/books/hardware/Modem/pt632.html
https://openwrt.ai/cr660x-%E8%8E%B7%E5%8F%96ssh%E5%88%B7pb-boot%E4%B8%8Eopenwrt%E6%95%99%E7%A8%8B/
https://www.right.com.cn/forum/thread-5400725-1-1.html
https://forum.openwrt.org/t/2-gbps-wan-lan-nat-routing-on-ramips-mt7621-devices/131478/48