软路由与家庭网络配置

平时喜欢在家折腾一些东西,对很多服务,软路由是一个基础设施。 软路由的概念与硬路由相对,硬路由指由专有硬件来进行网络包转发的设备,而软路由就是由通用计算机通过软件进行网络包转发的设备。 与同样价格的硬路由相比,软路由有更好的硬件以及更高的可配置性,不过需要一定的网络知识才能发挥作用。 下面简单聊聊软路由的部署和功能。

设备与系统

软路由和普通计算机比有几个主要特征: 网口多,功耗低,体积小。 软路由设备至少要有两个网口,一个 WAN 口用于连接公网,一个 LAN 口连接局域网 ( 不过旁路由设备只要一个网口就够了 ) 。 由于需要 24 小时不间断运行,通常功耗低且稳定,体积小一些方便放在弱电箱。

系统方面,通常都是 Linux 内核基础上增加定制的软件源和相关软件构成的,比较知名的有 OpenWRT 和梅林,如果是在硬路由上刷系统需要看硬件是否支持。 我由于之前买的路由器内存太少,又买了 NanoPi R2S 作为软路由,自带定制系统 FriendlyWRT,之前的无线路由就只当作无线接入点使用了。

网络拓扑

上面是我家目前的网络拓扑结构,联通宽带光纤接入光猫,调制后网线连软路由 WAN 口,后面 LAN 口串联两个路由,路由器自带 Mesh 功能,关闭 DHCP 当作纯粹的无线 AP 使用。

功能

上面介绍了设备和网络拓扑,下面聊聊软件部署以及各种功能的实现。

网络拨号

联通宽带安装时的光猫自带拨号以及无线功能,不过光猫拨号的话就没办法使用 DDNS 内网穿透了 ( 一开始因为有公网 IP 想要 DDNS 才折腾半天软路由拨号,几个月之后公网 IP 没了,淦 ) ,所以这里光猫只用作调制解调,软路由负责拨号。 关于软路由拨号的好处可以参考 这里

想用软路由拨号主要需要做两件事:

  1. 将光猫改为桥接模式
  2. 获取宽带用户名密码

第一项因设备型号而异,需要很多奇技淫巧,关于中国联通的光猫可以参考这两篇文章:

第二项需要在装宽带的时候记好,或是打中国联通电话重置密码。

之后在软路由界面 网络 -> 接口 处配置 WAN 口的拨号就可以了。

全局 VPN

PassWall 是个不错的插件,支持 socks、ss、ssr、v2ray、brook 和 trojan。 可以直接订阅机场的链接,定期更新。 还有负载均衡功能,相同协议的节点可以组合在一起,由负载均衡自动分配网络流量,可以充分利用机场的多个节点。

具体的配置网上已经有很多教程了,这里就不再细说,PassWall 本身的页面也是比较直观的。

主机加速器

要给 Switch 用的话只有普通的梯子是不够的,延迟和稳定性都是问题,通常需要专门的加速器。 找了一圈发现 灵缇 是有路由器插件的,在路由器上下载运行之后就能在手机上控制,Switch 不需要任何操作就能享受加速了。

公网访问

如果有本地的服务需要暴露在公网的话,通常需要将 IP 跟域名绑定 ( DNS 解析 ) 并通过域名访问,但是家用宽带一般没有固定 IP 或是公网 IP,这个时候就需要 DDNS 来动态绑定变化的公网 IP,或是借助外部服务做内网穿透。

DDNS

如果家庭宽带本身是有公网 IP 的,那么可以通过 DDNS 来向公网暴露服务。 DDNS 的原理很简单,就是不停的获取自己的 IP,一旦发现 IP 发生变化,就去请求域名解析服务提供商,将特定的域名解析到自己当前的 IP,这样就算 IP 发生变化,也可以通过域名访问到同一个服务。

这样做也有一些缺点。 首先,因为政策原因,中国绝大部分地区的电信运营商是不开放家庭宽带 IP 的 80 和 443 端口的,这导致我们搭建的服务只能通过非标准端口来提供服务,关于非标准端口的事情我在之前的文章 使用 Caddy 在非 443 端口开启 HTTPS 也提到过。 第二点是由于 DDNS 是在 IP 发生变化之后才更改 DNS 解析,这导致在 IP 变化到解析生效的这段时间服务是无法访问的。

FRP 内网穿透

如果没有公网 IP,就只能想办法做内网穿透了,一个比较完善的解决方案是 FRP。 你需要一台有公网 IP 的服务器,将域名绑定到服务器上,并在服务器上运行 FRP 服务。 这样在软路由上的 FRP 客户端就可以连接 FRP 服务,并且支持在客户端动态增删域名到本地 IP 的绑定关系。 如果没有独立服务器的话网上也有很多公益的内网穿透服务可以使用。

FRP 的缺点在于延迟会变高以及需要额外购买云主机,但是服务的稳定性比 DDNS 强很多。

内网静态 IP、 DNS 劫持

内网的服务直接用内网 IP 访问就可以了,为了方便,可以在软路由的 网络 -> DHCP/DNS 处给设备添加永久固定 IP。

还有个比较有意思的问题,比如我在内网搭建了一个云盘服务,位于 192.168.2.86 ,并通过内网穿透将其与公网域名 drive.abc.com 绑定。 那么通过 drive.abc.com 访问云盘,数据包就会走 本地<->FRP 服务器<->本地 的路线,平白增加了 FRP 服务器的流量,带宽也会受到限制。 通过内网 IP 192.168.2.86 确实可以直接访问,但是这样在 drive.abc.com 的 cookie 等信息又不能共享,不优雅。 为了让同样一个域名,在内网直连,在公网走 FRP,我们可以挟持内网的 drive.abc.com 域名,直接将其指向 192.168.2.86 ,这样就可以达到上述效果了,不过这要求客户端 DNS 指向软路由,如果联网的设备没有特殊设置的话这是默认的,在软路由上启动 dnsmasq 以及 DNS 重定向就可以了。 设置自定义挟持域名的功能同样在 网络 -> DHCP/DNS 页面。