家庭网络搭建思路

前言

谨以此文写给不折腾会死星人。本文介绍了我个人目前实践成功并稳定运行的一些家庭网络方案,希望可以带给喜欢折腾的人一些启发。

本文对大部分配置不做详细介绍,仅仅介绍思路。

物理拓扑

硬件需求

搭建一个体验良好的家庭网络,硬件上必须不能含糊,包括但是不限于:

  • 100Mb以上的运营商承诺的下行带宽,上行带宽必然不是对称,但是对于家庭网络来说,下行带宽更为影响体验
  • 1000Mb光猫,务必询问运营商的安装工程师,光猫是否为1000Mb光猫,目前某运营商仍有100Mb光猫
  • 1000Mb路由器,路由器是决定家庭网络体验的核心设备。无线功率、CPU、内存都是决定网络体验的重要决定因素,至于设备的选型,按照需求购买
  • 1000Mb交换机,非必须,按照需求购买,例如需要有线网络连接多个设备
  • 超五类网线,设备都是千兆带宽的,网线必须得匹配上这个速率

软件需求

  • 熟悉OpenWRT,后续一些好玩的操作,都是基于OpenWRT进行实现的
  • 熟悉Linux,还是那句话,一些好玩的操作,也都是基于Linux服务器的

拓扑图

下图为当前家庭物理拓扑图,关于拓扑图一些图例的介绍,后续的拓扑图均使用该图例

  • 不同的颜色代表不同的网络区域
  • 设备跨越不同颜色区域表示设备可以实现区域间网络转发,不同网络区域的转发模式有 1568727759270NAT1568727754590网络路由两种模式
  • 1568727759270 NAT 红色箭头方向表示NAT转发方向,即设备所在一个网络区域NAT转发到设备所在另一网络区域
  • 1568727754590 网络路由 路由模式,即设备实现了不同的网络区域之间路由转发
  • 1568727749550 网络桥接 桥接模式,无线桥接为设备对网络区域进行无线拓展,有线桥接利用物理网卡进行网络区域拓展
  • 1568728027850 无线链路 设备之间以无线的方式进行连接
  • 1568727765979 物理链路 设备之间以物理介质进行连接,例如以太网、光纤等
  • 1568729089877 VPN虚拟链路 设备之间以VPN协议维持的虚拟链路
  • 1568727742317 无线 设备具有无线发射功能

1567727134687

设备列表

上面拓扑图涉及到的设备如下列表所示,其中带 * 标记设备为必要设备,为了实现一些好玩的功能,带 * 也是必须的。设备选型不必拘泥于列表中的设备

设备名 类型 硬件 操作系统 备注
Garlic * 路由器 NetGear R7800 OpenWRT 18.06.4 路由器
Orange 服务器 Ryzen 2600X + B450I CentOS 7.6 运行服务
Tomato * 服务器 NUC J3455 CentOS 7.6 运行服务
Apple 路由器 音频Airplay
Swtich 交换机
Tmall Box 终端 M81_A 影音播放
Modem * 调制解调器 KD-YUN-811E 光猫
Xzffwy * 云服务器 CentOS 7.2 阿里云服务器
Vultr 云服务器 CentOS 7.2 外网服务器

光猫桥接

目前运营商很喜欢把路由器的功能集成到光猫里,但是光猫的转发和无线性能比较差,而且使用光猫拨号之后,接入光猫的路由器如果使用桥接模式,则无法使用大部分功能。若再次使用NAT,则接入路由器的终端设备,经过两次NAT才可访问互联网,做端口转发(DNAT)也是极其不友好了,需要配置两次

至于光猫如何修改为桥接模式,这里不做过多介绍,自己Google或者和联通安装工程师进行PY,有很多选

虚拟拓扑

物理拓扑可以满足基本上网需求,但是仍然无法满足一些高级需求,例如:

  • 远程管理家庭网络,一个最简单的场景就是可以在任何接入互联网的地方,通过VPN接入家庭网络,访问家里的私人云盘(owncloud)、文件共享(samba)、个人维基(dokuwiki)、RSS(tiny tiny RSS)、离线下载(transmission)等服务,以及远程管理路由器、服务器。
  • 透明代理,自动对某些屏蔽的域名,转发到指定的服务器
  • 站点到站点VPN,如果有需求的话,打通两个局域网,实现互相访问。

软件需求

实现虚拟拓扑,需要对下面的软件、操作系统的配置有一定程度的了解

  • CentOS/Ubuntu等,服务器操作系统
  • Tinc,主要基于TCP,传输效率较低、开销较大,仅仅用于紧急网络维护
  • Wireguard,新兴的VPN协议,基于UDP传输,其传输效率高、开销低,用于实现站点到站点VPN、透明代理
  • Strongswan,实现IKEv2协议,用于远程接入家庭网络进行管理
  • iptables/netfilter,实现各种虚拟网络的必要工具

站点到站点VPN

没有Wireguard的时代,tinc是实现站点到站点VPN的不二选择,至于strongswan嘛,也可以实现,但是其复杂的配置选项,基本可以吓退大部分人了。尽管现在有了Wireguard这种高效的协议,可以实现站点到站点VPN,但是保留tinc仍有必要,可以用tinc作为一个应急链路,维护网络。

如下图所示,Tinc实现了家庭本地网络 Garlic LAN 可以通过 Tinc LAN 以NAT转发的形式访问服务器 Xzffwy,访问的接口是服务器 Xzffwy 的 Tinc LAN 虚拟接口,即 Garlic LAN -> Tinc LAN, 为单向访问。为啥不直接使用路由转发的方式?因为路由转发留给Wireguard。

家庭网络与服务器之间实站点到站点VPN的一个有点为可以在家里无缝访问服务器上的一些不面向互联网的服务。例如在服务器上搭建了Samba、Gitweb等不能面向互联网开放的护肤,可以通过站点到站点VPN的方式方位,这样更为安全,也减少了服务器在互联网暴露的端口。

1568723200287

如下图所示,Wireguard实现了本地家庭网络 Garlic LAN 可以通过 Wireguard LAN 以路由转发的形式访问服务器Xzffwy,即 Garlic LAN <-> Tinc LAN, 为两者可以相互转发访问,Wireguard的传输速度基本接近原生协议,其传输效率十分高效,而且对CPU资源的消耗很低,这使得家庭网络访问服务器上的对传输速度有要求的服务成为可能,例如Samba、Owncloud等。

1568723225863

如下图所示,在服务器上可以再通过Strongswan搭建一个IKEv2 VPN,实现对家庭网络的远程管理。Strongswan的配置十分繁琐、选项众多。Windows、iOS、MacOS上都原生支持IKEv2。

手机或者电脑以IKEv2 VPN链接到服务器Xzffwy之后,即接入了 IKEv2 Virtual LAN ,则可以通过 Wireguard LAN,将流量转发到 Garlic LAN,这样通过间接的方式,实现了对家庭网络的远程访问。

1568723236591

远程管理

如下图所示,也可以在家里的服务器上搭建Strongswan,将家里服务器搭建的VPN端口暴露在互联网上很简单,直接在路由器上端口转发即可(DNAT)。但是仍有一个棘手的问题需要解决,不想服务器Xzffwy这种云服务器,每次路由器拨号的时候,获取的公网IP地址都是不一样的。这时候就引入了一个新的概念:DDNS

实现DDNS的思路也比较简单,需要两个前提:

  • 一个域名,域名的解析可以通过API修改
  • 家里有一台24小时在线的服务器

实现DDNS的思路为:

  • 创建一个域名,例如home.skbtst.cn

  • 家里服务器访问ifconfig.me或者ip.cn等站点,或者你自己的某个云服务器,获取你家里路由器的公网IP地址

  • 通过API查询home.skbtst.cn解析IP,对比你的路由器公网IP,如果不是这个IP,通过API修改解析结果为当前公网IP
  • 上述第二、三步骤,通过Linux的crontab进行循环执行,执行的间隔可以设置在1到2分钟左右

通过上述步骤,可以确保home.skbtst.cn的解析结果为家庭网络路由器获取的最新公网IP。

1569145476072

透明代理

配置透明代理稍微繁琐一些,如下图所示,路由器Garlic和服务器Vultr之间的虚拟网络 Wireguard EX LAN ,用来实现透明代理

主要配置涉及如下三个软件

  • dnsmasq
  • ipset
  • iptables

实现透明代理的核心思路如下

  • 在OpenWRT上需要安装dnsmasq-full,添加dnsmasq配置文件,让需要使用透明代理的域名,访问指定的DNS服务器进行解析,防止DNS污染,并把解析的结果加入到指定的ipset,例如redir
  • 配置iptables,将匹配上述名字为redir的ipset的流量,在mangle表PREROUTING链进行打标记,例如0x80
  • 添加额外的ip rule,将指定标记的0x80的流量转发到指定路由表110
  • 添加额外的路由表110,并添加默认路由为转发到wiregurad虚拟网卡,则需要访问透明代理的域名通过 Wireguard EX LAN 转发到了服务器Vultr
  • 服务器Vultr在iptables的nat表POSTROUTING链增加来自 Garlic LAN 的NAT转发
  • 服务器添加到Garlic LAN 的路由

1569146134817

网络监控

待续

日志管理

待续

统一认证

待续

服务管理

离线下载

文件备份

文件共享

个人云盘

个人维基

代码管理