整个家庭网络的架构如下:
整体的网络架构非常的扁平化和简单:
物理设备图如下:
坐标上海嘉定。我是直接微信询问的宽带运维小哥,很爽快的就帮我在后台查询了超级密码,自己进入光猫后台修改桥接即可。
如果运维小哥不肯帮忙查询,也可以闲鱼搜索"地名+运营商+光猫"等关键字,花一点小钱即可解决。
光猫修改桥接的目的是为了搭配后面的主路由进行拨号上网和获取公网 IP 来使用的。
直接打运营商客服电话说需要开通公网 IP 即可,上海联通宽同时分配有公网 IPv4 和 IPv6 的地址。
当然各个地方运营商可能存在差别,据了解联通和电信都会给公网 IPV4 ,移动不会给公网 IPV4 地址,但是 IPV6 的地址应该会给的。
主路由上正常的设置好拨号上网,这样主路由上获取的 IP 就是公网 IP ,这个 IP 是互联网上其它设备可以直接进行访问的。
很多人都存在一个误解,认为这个公网 IP 是固定的。实际上每次重启主路由,或者一段时间后,分配的这个公网 IP 都会变更的。IP 每次都发生变化很难记忆,所以后面需要搭配 DDNS 服务进行动态域名解析。
其次,运营商为了阻止个人用户在家里架设网站等服务,家庭宽带一般都会封禁了 80 、443 等重要的低位端口。
主路由设置好后,基本无需各种折腾,能正常的上网即可。虽然 iStoreOS 支持非常丰富的插件,能够实现各种功能,但是为了整个家庭网络的稳定性,建议尽可能少在主路由上面安装各种插件。
使用旁路由模式一般都是为了科学上网服务的。
iStoreOS 的网络设置向导中就带有拨号上网、旁路由设置等入口。界面清爽简洁,对小白用户来说非常友好。
在旁路由上搭建好了科学上网的服务之后,需要科学上网的设备,只需要将网关和 DNS 修改为旁路由的 IP 地址,即可享受科学上网的服务。例如个人使用的手机、黑苹果、AppleTV 等设备都可以非常方便的修改网关和 DNS 指向旁路由的地址。
推荐一个 iStoreOS 的插件包: https://github.com/AUK9527/Are-u-ok
无线 AP 采用的是一台红米 AX6000+小米 AX6000 组的有线 mash 。
红米 AX6000 在无线信号覆盖、散热以及稳定性等方面都极其出色,理论上一台红米 AX6000 即可覆盖,无需 2 台路由器。缺点就是红米 AX6000 不带 2.5G 网口,小米 AX6000 带有一个 2.5G 网口。
如果不在意 2.5G 网口的话,个人还是非常推荐红米 AX6000 的。体积比小米 AX6000 小巧,300 元左右,性价比极高。设置好 Wi-Fi 之后,基本上就会忽略它的存在。
由于主路由是软路由,负责 DHCP 和路由相关的功能。所以不需要硬路由器的路由等功能,只需硬路由器的无线信号发射功能,所以将硬路由设置为有线中继模式即可。
由于有线设备较多,交换机我选择的是磊科 GS10 ( 8 个 2.5G + 2 个万兆 SFP+),618 入手不到 300 块,性价比极高。
该交换机外壳为金属外壳,体积非常小巧。8 个 2.5G 网口可以满足绝大多数家庭用户的需求,额外的 2 个万兆光口适合连接 NAS 和台式机等设备。
该架构带来的好处非常多:
后面会基于上述的物理网络架构,继续分享《家庭内网服务》、《在外访问家庭内网服务的最佳姿势》等更多内容。
1
StrongNoodles 100 天前
家里当初没有预置弱电线路,又不想大动,最后只搞了三个无线路由器搞了个有线 MESH ,大佬这个留以后装修参考了。另外,问一句,放 NAS 和网络设备的置物架看着挺不错的,大佬有空的话可以回复下厂家或购买链接参考下,感谢!
|
2
Kinnice 100 天前 via Android
差不多,区别点是
把所有设备网关/DNS 都切到了虚拟 IP 上 然后主路由和旁路网关 装了 Keepalived ,旁路为 Master 旁路网关绕过中国大陆 IP 效果是旁路由随便拔掉,对家庭网络没影响,国内服务不会断. |
4
Kinnice 100 天前 via Android
10.0.0.1 主路由
10.0.0.10 VIP 谁是 Master ,谁持有这个 IP ,dhcp 默认下发这个 网关和 dns 10.0.0.100 旁路由 |
5
fenghuang 100 天前 via Android
经过旁路由的设备要两次 nat 吧
|
6
x86 100 天前
省流:光猫->主路由->交换机->其它
|
7
0xD800 100 天前 via Android
现在新开的宽带都没有公网了,老的有
|
8
povsister 100 天前 1
给提个这种配置下的一个小问题,可以思考一下。
假设在 PVE 上有一个 web 服务,而且此 PVE 中,提供 web 服务的容器或虚拟机的默认网关是旁路由。 此时有需求从外网访问,通过公网 IP 的端口映射,直接访问 PVE 上的 web 服务,而且 web 服务要能看见访问者的真实 IP (而不是主路由的 IP ) 请问,这种情况你的拓扑配置可以支持吗 |
9
Jiceburger 100 天前
为啥不把主路由当唯一网关然后把科学数据包/DNS 请求分到旁路由上去?这样就不用去按设备改网关了(当然所有设备都具备了魔法能力也许不是一个好事...)。我家负责拨号的主路由是 PVE 下的一个爱快,我发现这玩意简单粗暴而且特别好分流...
|
10
dhuzbb OP @StrongNoodles 我是淘宝购买的 80X35cm ,到手 92 。我的弱电箱在柜子中,最后安装好之后,尺寸刚刚好,一点不多不少。特别提醒一下,需要事先注意量好尺寸。购买地址: [淘宝] http://e.tb.cn/h.grAYnlhiNItchZT?tk=4eOi3i7zkod HU9046 「厨房置物架微波炉收纳架家用钢制货架地下室杂物储物架夹缝铁架子」
点击链接直接打开 或者 淘宝搜索直接打开 |
11
dhuzbb OP @Jiceburger 修改主路由的网关和 DNS 指向旁路由并不是一个好的选择。当你旁路由挂了之后,整个家庭网络都会瘫痪。上面的做法保证了无论如何家里网络都会有一条正常的线路。
|
14
povsister 100 天前
@dhuzbb
但看到访问者的真实 IP 是一个很常见的需求,假设你暴露的不是 web 服务而是 ssh 服务,那么为了防爆破肯定要 fail2ban ,那么如果无法看到真实 IP ,确实有诸多不便。。 这也是所有”同网段改网关走旁路由科学“方案的一个无法解决的痛点问题。 |
15
chenbin36255 100 天前
@dhuzbb #11 用 paopaogateway+paopaodns dns 实现分流
|
18
maybeonly 100 天前
@povsister
你知道的我很讨厌旁路由 但是确定的内网 ip 和端口的话只要匹配来自这个 ip:port 的数据包直接转发给主路由 还是做得出来的 不过如果能做这个,大概也就不会用旁路由了 搞好的主路由其实没那么脆弱 很多时候被弄坏了都是因为把调度整个搞坏了 只需要访问墙内的设备,方案有 1) 采用不同的 ssid/vlan 2) 在入口网关上根据 mac/ip 打 tag ,走不同的路由表 |
19
yeh 100 天前
楼主这个图挺好,简洁明了。
需要换设备的直接换设备就行。 我是搞了 adguard+modns+旁路由,改了局域网设备的默认 dns 为 adguard ,把 fakeip 拦截到旁路由。 旁路由挂了不影响主要的上网。 |
20
WhatTheBridgeSay 100 天前
楼主有没有发现你所谓的这种“旁路由”模式,即通过 DHCPv4 方式修改 IPV4 默认网关到单独的网关的方式会导致 IPV4 和 IPV6 的网关不一致。会有包括但不限于以下问题:
1. UPnP 需要在 NAT 设备上自动打洞的协议会失效,因为你的默认网关并不负责 NAT 2. 如果不在 DNS 层面 drop AAAA 就会导致你在所谓“旁路由”上部署的透明代理等 trick 通过 IPV6 逃逸 3. 除非像楼主一样愿意不厌其烦地给每一台局域网设备手动设置网关,否则也不存在所谓“旁路由”挂了而你使用此作为默认网关的设备不受影响 关于第三点目前 openwrt 有个很好的实践,可以通过在 DHCP 的“静态地址分配”里给客户端打“标签”,再在接口的 DHCP 服务器设置里使用 DHCP option 给不同 tag 分配不同的默认网关。 例如下列给打了 trans_gateway 标签的指定 192.168.1.2 作为默认网关和 DNS tag:trans_gateway,3,192.168.1.2 tag:trans_gateway,6,192.168.1.2 |
23
povsister 100 天前
@maybeonly
害,你没细看我给的问题。op 这种部署,主路由 DNAT 做端口映射,对于默认网关是旁路由的设备无论怎么改都只有不通一个结果。。因为设备会把回复的包通过默认网关发给旁路由,旁路由只会满脑子问号这是什么东西然后直接丢了。 #20 说的 UPnP 还有 ipv6 逃逸问题也确实存在。anyway ,我是真不建议这种同一个网段里有俩网关设备的操作,不但和网络部署最佳实践背道而驰,而且出问题很多人甚至不知道如何排查。 |
24
frankilla 100 天前
|
25
dhuzbb OP @WhatTheBridgeSay 我的技术水平没有达到你这样的深度,可能会出现你说的问题。但是我个人使用方面没有什么影响。需要科学上网的设备毕竟是少数,我确实是手动设置的,目的主要是尽可能少的改动主路由的设置。
|
27
bluaze 100 天前
@povsister #23 端口映射只在主路由上做,旁路由上只根据新建连接( tcp syn, udp ctstate NEW )来决定整个连接是否转发至代理端口,同时防火墙关掉 SYN-flood 防御(其实旁路由用普通 linux 发行版手搓而不是 openwrt 那么防火墙默认就没这规则)
|
28
bluaze 100 天前
@povsister #23 ipv6 逃逸好解决,dns 关掉海外的 AAAA 解析就好,至于同一个网段里有多个网关再正常不过,简单举个例子,一个大点的公司或组织,用了一个 B 类地址比如 192.168.0.0/16 建设内网,每个 C 类地址如 192.168.x.0/24 为子网为一个部门服务,那么所有子网网关和总网关所在的那个子网里个个都是网关
|
29
bluaze 100 天前
@WhatTheBridgeSay #20 关于 upnp ,我本来也以为是要失效的,但我家的情况却是自动找上了主路由并配置成功,当然这个成功可能并不能复制,可能跟我使用的主路由以及配置 upnp 使用的 miniupnp 相关
|
30
maybeonly 100 天前
@maybeonly #18 勘误,最后应该是打 mark
@povsister #23 这个真的能做出来,在 mangle/PREROUTING 直接打 mark 走某个路由过掉,并且自己配置好防火墙,不要因为 status 不对之类的原因丢掉就好了。或者更骚的,可以在防火墙丢弃原来的数据包之前在 mangle/PREROUTING 直接 TEE 过去(谨慎使用,小心爆炸)。而且虽然我是自己搓的主路由,但是里边也是存在一些不对称路由的,比如梯子选出口,dns 分流。 @bluaze #29 upnp 发现用的组播( ssdp ),如果是二层直通的话基本上是可以到达的。如果旁路网关做 nat 的话,还要看旁路网关实现的是 nat 几。 所以从几个地方看,他的旁路至少在没过墙的时候没有 nat ,如果是直接走路由表或者 dae 那种基于包的转发的话,普通回包是可以到达的(不过墙)。 不过我自己是有海外站从家里的 git 上拉代码,所以嘛。 最后就是说,设计良好、运维得当的主路由是没那么容易挂的。旁路由要么是条件所限没办法用主路由,要么就是个过度的学习阶段。旁路由结构反而复杂,如果旁路由都真的搞明白了,也就有能力上主路由了才对。 除了 ipv6 ,还有一些事情是旁路由无论如何做不出来的,比如我家有两条宽带。 另一个想到的场景,就是隔壁帖子的家里一大堆 docker ,既然在自己家起了那么多 docker ,难道还用端口映射嘛?就算 docker 的 v6 稀烂,至少把 v4 宣告出来/主路由静态指下去吧,然后到边界处统一做 nat 就好了。毕竟好多 docker 也是需要墙外资源/镜像的。 |
31
yjsdaniel 100 天前
NAS 上不能跑个软路由吗?节约一个旁路由的硬件
|
32
dhuzbb OP @yjsdaniel 你说的对,旁路由有 Docker 版本的形式。或者连旁路由都可以去掉,回到只用客户端软件的形式。 甚至只需 1 台机器,虚拟化出来主路由、旁路由、window 、nas 等等所有的设备。其实都看个人喜好的,有的人觉得 All in one 好,有的人觉得设备分开会比较好一些。
|
34
WhatTheBridgeSay 100 天前
@bluaze #29 查了一下,UPnP 似乎是通过广播来通信的,看起来可以成功映射,具体行为我还没有尝试过,上述第一条可能不正确
|
35
smg 100 天前
和你唯一的区别是你的主路由器 旁路由和 2 个无线 AP 我是用一个小米万兆 刷了 openwrt 代替。
|
36
weicools 98 天前
旁路由需要改网关和 dns 好麻烦
|
37
TYTheKing 98 天前
OP 这是什么软件画的,还有图形这么丰富的嘛
|
38
dhuzbb OP @TYTheKing 用的是开源的 drawio ,付费应用 processon 的替代品,自己 docker 部署的,后面的文章有提到过。默认的图标不是那么好看,图标网站上找的。
|
39
c9792536451 79 天前
请问图标在哪找的呀
|
40
dhuzbb OP @c9792536451 后续的文章中 https://www.v2ex.com/t/1074688 有写到。主要是 2 个网站:
https://icons8.com https://www.iconfont.cn |
41
c9792536451 67 天前
@dhuzbb #40 谢谢
|
42
huangya 62 天前
@WhatTheBridgeSay 请问你举的打 tag 的例子,配置出来的 config 是类似于下列这样子( config dhcp 'wan'和 config host )吗?
root@OpenWrt:/# cat /etc/config/dhcp config dnsmasq option domainneeded '1' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp.leases' option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto' option localservice '1' option ednspacket_max '1232' config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option dhcpv4 'server' option dhcpv6 'server' option ra 'server' option ra_slaac '1' list ra_flags 'managed-config' list ra_flags 'other-config' config dhcp 'wan' option interface 'wan' option ignore '1' option start '100' option limit '150' option leasetime '12h' list dhcp_option 'tag:trans_gateway,6,192.168.1.2' config odhcpd 'odhcpd' option maindhcp '0' option leasefile '/tmp/hosts/odhcpd' option leasetrigger '/usr/sbin/odhcpd-update' option loglevel '4' config host option name 'tonydt' option dns '1' option mac '00:E0:4D:71:BB:2B' option ip '192.168.1.100' option tag 'trans_gateway' |
43
WhatTheBridgeSay 62 天前
@huangya #42
# uci show dhcp.@host[0] dhcp.cfg05fe63=host dhcp.cfg05fe63.ip='192.168.1.100' dhcp.cfg05fe63.dns='1' dhcp.cfg05fe63.mac='AA:AA:AA:AA:AA:AA' dhcp.cfg05fe63.tag='gwtp' |
44
WhatTheBridgeSay 62 天前
@huangya #42
# uci show dhcp.lan dhcp.lan=dhcp dhcp.lan.interface='lan' dhcp.lan.start='100' dhcp.lan.limit='150' dhcp.lan.leasetime='24h' dhcp.lan.dhcpv4='server' dhcp.lan.ra='server' dhcp.lan.ra_flags='none' dhcp.lan.dhcp_option='6,192.168.1.120,192.168.1.120' dhcp.lan.dhcp_option='tag:trans_gateway,3,192.168.1.2' dhcp.lan.dhcp_option='tag:trans_gateway,6,192.168.1.2' |
45
WhatTheBridgeSay 62 天前
@huangya #42 忽略掉两边的 tag 名字对不上,因为我目前用的不是这套方案,只是为了给你演示正确的配置
|
46
huangya 62 天前
@WhatTheBridgeSay 感谢,犯了个低级错误。我的 dhcp_option 是配置在 wan 这边,而不是 LAN 这边。LAN 这边已经成功。
|