使用软路由、cf、反代、frp等建立个人/家庭网(转载)
[复制链接] 分享:原文由 naonao 发表在 Networking 版 >>>
0. 写在前面
自从购入了某双网口小主机用作软路由后,lz一发不可收拾,在家陆续搭建了个人服务器以及其上搭载的各类服务,包括但不限于jellyfin(影音流媒体),next_terminal(堡垒机与远程连接管理和共享),lms(音乐播放器),alist(网盘管理),kodbox(可道云,云文件管理),qbit(bt下载),jupyter(代码管理和共享),bitwarden(密码管理),frpc(内网穿透)等。
众所周知,国内是很难获取公网ip的,对于建站等需备案的服务要求也极其严格,以上也是曾经很大程度劝退lz折腾这些的因素。但经研究发现,利用恰当的工具及配置,是很容易绕开所有的限制的,因此本文也主要是分享这个模式,希望能够对大家有所启发和帮助,也欢迎大家多多交流。
最终我们期望达成的效果为,使用同一个域名,在局域网外可以正常访问局域网内的服务(但可能速度较慢,因为是有cf的代理),在局域网内也可以使用该域名正常访问同一个服务,但走的路径是局域网内直连,而非出局域网走cf的代理再绕回来。
1. 需要准备的材料
1.1 一个域名,最好长期使用,并解析到cf(必备)。注:cf即cloudflare,可以白嫖众多服务,大家都亲切地称呼其为大善人,后文中大家可以发现其发挥着无法替代的作用,也是本操作的核心。当然享受这一切的前提是需要有域名解析进去。建议大家在海外的域名平台上购买域名,一是长期使用价格一般比国内低,二是海外对建站这些事没这么敏感,不需要到处搞身份验证备案什么的,相对轻松些。毕竟我们所有的服务也都自己用,并不打算在国内备案。
1.2 至少一台linux服务器(必备)。作为我们所需要的服务所搭建的平台,如果有一定linux/docker基础,应该可以发现在linux架构下搭建和管理自己的服务端省时省心。毕竟管理服务端完全用不到图形化桌面。
1.3 软路由(必备,或可替换为具备dns反代功能的路由器,常开)。软路由一般也为linux服务器,使用软路由可以极大丰富我们对网络的操控和管理。必备软路由的原因是需要将我们的域名在内网解析至反向代理服务端。
1.4 内网反向代理服务端(必备,常开)。该服务端必须常年运行,作用为在内网将子域名分发至各个服务。
1.2-1.4所提到的机子可以是同一台,这也是大家常提到的AIO(All In One),不过操作不当可能会变成AIB(All In Boom),所有东西一起挂掉,希望大家谨慎
2.操作步骤
2.1 使用cf的Tunnels功能进行服务端内网穿透
该步骤目的是能够使内网服务端在公网进行访问,具体操作步骤为:
2.1.1 在内网某台机子上建立隧道客户端:
登录cf,左侧边栏单击选择Zero Trust,进入后左侧边栏单击Networks下三角,进一步弹出的选项里单击选择Tunnels,界面点击Create a tunnel,根据cf提供的步骤在自己的服务端/软路由/win客户端/其他设备上建立隧道,这个建立隧道的设备需要满足的要求是:能够在内网访问所有需要访问的服务,且在外网访问内网服务时,这个设备需满足开启且在运行cf Tunnel程序的状态。
2.1.2 为某一个需要公网访问的服务建立隧道:
建好隧道后,该页面点击对应的Tunnel name,在右边弹出栏中选择edit,弹出界面上方选择Public Hostname,页面切换后点击Add a public hostname,弹出界面中,Subdomain为子域名,Domain选择解析到cf的域名,Path留空。下方Type选http,URL填写内网访问该服务的IP地址及端口。或者说,在内网访问该服务时地址栏写啥这里就写啥。填完后右下角Save Hostname
做完这一步之后,这一个服务应该就可以用你的域名在公网进行访问了,一般国内的延迟在200ms左右,大家可以进行测试。
2.1.3 重复2.1.2的步骤,为所有的服务搭建隧道
2.2 使用内网反向代理服务端,配合软路由,将域名解析至内网ip和端口
经过以上操作后,我们在局域网外应该是能正常使用域名访问我们的服务了,在局域网内也可以正常访问,但是相比局域网内ip+端口的模式会慢不少,因为流量实际上是走cf绕了一圈回来。因此采用软路由dns反向代理解析域名至内网反代服务端+内网反代服务端反向代理解析子域名至对应的服务上,这一思路可以使我们用同一个域名在内网走内网链路访问服务。
2.2.1 软路由dns反向代理解析域名至内网反代服务端
软路由系统lz选择ikuai,主要因为配置简单+功能丰富。Ikuai环境下操作步骤为:网络设置-DNS设置-DNS设置-开启DNS加速服务-开启强制客户端DNS代理-最下方添加DNS反向代理。域名为*.+你解析到cf的域名,解析类型ipv4,解析地址为内网反代服务端的IP地址。
2.2.2 内网反代服务端反向代理解析子域名至对应的服务上
内网反代服务端lz选择在软路由docker下架设的lucky服务,当然也可以选择nginx等其他服务。lz是小白,搞不定nginx的配置文件,lucky全图形化配置,方便友好,资源占用也低,强烈推荐。
具体操作步骤如下:在lucky面板左侧选择web服务,点击添加web服务规则,监听类型全选,监听端口443(https默认端口)。之后在创建的规则下添加子规则,前端地址为2.1为访问该服务在局域网外用到的地址(即子域名),后端地址为局域网内直接访问该服务用到的地址(局域网内ip+端口),其他的都不用改。
进行测试可以发现,在局域网内也可以用域名快速访问对应服务了,使用tracert(win平台)或traceroute(linux平台)对域名进行追踪可以发现访问路径为内网路径。
经过以上步骤,即可以达成我们的目标,即同一域名在内外网,均以最佳的方式访问同一个服务。在该策略下,大家可以发现全程没有使用任何公网ip,所有的域名也仅仅只是解析到cf的cdn节点,因此该策略具备极强的普适性。甚至说,即使有了公网ip,因为大部分的服务其实不刚需低延迟,结合曾经爆出新闻运营商可能会扫描所有端口看有没有人私自建站,使用cf的方案甚至也优于公网ip。毕竟,公网ip还有更重要的用途,尤其是刚需低延迟的时候(没错说的就是你,RDP)。
3. 写在后面:该方案的不足与补充
3.1 该方案主要解决家庭组网,在校园网环境下,该策略其实仍不完全好用。因为校园网是个大局域网,理想环境下在校园网内且在自己在校园网内搭的局域网(如宿舍自建的wifi等)外时,也应当直接走校园网访问自己的服务,而不是从cf绕一圈。但显然,校园网的绝大多数使用者无法在校园网全网的环境下配置dns反代和静态路由。这一情况是否有好的解决方法,也可以请大家集思广益。
3.2 RDP怎么办?
cf的服务有两个问题,一是延迟高,二是根本就不支持tcp协议,因此无法用于RDP。但在白嫖cf解决绝大多数服务的问题后,RDP显得并不那么棘手。在没有公网ip的情况下,可以白嫖市面上部分提供免费frp服务的站点。目前lz的感觉,国内最好用的是skaura frp,白嫖的情况下每月10g基础流量+签到赠送流量,带宽10mbps,可以创建两个免费服务。大家选择离自己近的节点,延迟基本可以控制在100ms内,远程桌面是差不多够用了。使用skaura提供的frp配置文件与自己的frpc客户端进行反代映射即可。
当然,rdp也可以做到同一个连接配置在局域网内走局域网,在局域网外走skaura的效果。在cf将子域名做cname解析至frp提供的域名,然后在lucky内做端口转发即可。
3.3 关于软路由
软路由功能强大,包括但不限于多条wan聚合,流控分流设置,自动化科学上网,静态路由配置,dns代理等等,推荐大家研究和使用。
一般情况下软路由需要至少有两个板载的网口,这件事情在一般的电脑上并不常见。当然对于只有单网口的主机也可以做软路由,使用usb转网口即可,但该操作配置复杂,需要在无网络或非软路由接入其他路由lan口的情况下做usb网口的驱动,不建议大家轻易尝试。
欢迎大家互相交流指正
赞,mark
Bigscience (🔞🧜♀️|已毕业44天22时47分15秒) 在 ta 的帖子中提到:
0. 写在前面
自从购入了某双网口小主机用作软路由后,lz一发不可收拾,在家陆续搭建了个人服务器以及其上搭载的各类服务,包括但不限于jellyfin(影音流媒体),next_terminal(堡垒机与远程连接管理和共享),lms(音乐播放器),alist(网盘管理),kodbox(可道云,云文件管理),qbit(bt下载),jupyter(代码管理和共享),bitwarden(密码管理),frpc(内网穿透)等。
众所周知,国内是很难获取公网ip的,对于建站等需备案的服务要求也极其严格,以上也是曾经很大程度劝退lz折腾这些的因素。但经研究发现,利用恰当的工具及配置,是很容易绕开所有的限制的,因此本文也主要是分享这个模式,希望能够对大家有所启发和帮助,也欢迎大家多多交流。
……