利用公有云穿透至家庭服务器并对外提供服务

2024 年 7 月 12 日 星期五(已编辑)
/ ,
6
摘要
利用公有云服务器上部署frp工具,实现流量穿透至家庭服务器,提供服务。详细配置包括在公有云服务器上部署frp服务端和在家庭服务器上部署frp客户端。配置文件分别为frps.toml和frpc.toml,通过配置代理协议实现流量转发至家庭服务器的特定端口,如SSH连接等。特别在80和443端口代理配置中增加了transport.proxyProtocolVersion = "v2"以确保远端请求时能识别真实IP。
这篇文章上次修改于 2024 年 8 月 2 日 星期五,可能部分内容已经不适用,如有疑问可询问作者。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

利用公有云穿透至家庭服务器并对外提供服务

利用公有云穿透至家庭服务器并对外提供服务

​ 我是一个喜欢折腾的人,但是也仅限于享受折腾的过程,很多时候折腾完了就扔在了一边,也没有记录的习惯。这导致下次再遇到相同问题的时候还需要再次翻资料,所以在发现了shiro之后便有了记录解决问题的习惯。

​ 言归正传,我们都知道公有云的服务器价格都不低,但是配置却一般,不过最吸引人的在于它拥有固定IP以及80和443端口(前提需要备案)。于是乎我们是否可以借助公有云的资源将流量穿透到家庭服务器,答案是可以的。

​ 这次借助的工具是frp.frp分为客户端和服务端,服务端部署在公有云的服务器上,客户端部署在自己的服务器上。我们首选在公有云服务器安装frp,安装过程见官方文档,建议加入systemd,方便启动,我这边只展示相关配置,我在服务端定义配置文件为 frps.toml

bindPort = 7000
auth.token = "<your token>"

服务端配置很简单,启动之后会占用7000端口。接下来在自己的服务器上同样下载frp,配置文件名称设置为 frpc.toml

serverAddr = "<your server ip>"
serverPort = 7000
auth.token = "<your token>"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8000


[[proxies]]
name = "80"
type = "tcp"
localIP = "127.0.0.1"
localPort = 30871
remotePort = 80
transport.proxyProtocolVersion = "v2"

[[proxies]]
name = "443"
type = "tcp"
localIP = "127.0.0.1"
localPort = 30166
remotePort = 443
transport.proxyProtocolVersion = "v2"

[[proxies]]
name = "6443"
type = "tcp"
localIP = "127.0.0.1"
localPort = 6443
remotePort = 6443

简单解释下配置文件含义,第一个proxies协议为四层网络协议TCP类型,代表本地服务器和云厂商服务器通过8000端口穿透,即访问远端服务器的8000端口时,会代理到本地服务器的22端口,所以在使用ssh命令连接远端服务器的8000端口时,会自动连接到家庭服务器的ssh。以下三个proxies配置同理。

我在80和443的proxies上增加了一行transport.proxyProtocolVersion = "v2",这个目的是为了让经过穿透后的请求到达后端时,依旧能识别出remote ip。因为我我的本地服务是个k3s集群,由ingress-nginx作为网关,safeline作为防火墙,加上这行配置可以让safeline识别到远端的真实ip。后面有机会单独写一篇文章描述下相关配置。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...