前置准备
- 需要进行穿透的机器
- 一台云服务器
- 一个域名(如果在大陆使用最好在云服务器提供商处购买,备案会比较方便)
配置 frp
项目地址:https://github.com/fatedier/frp
文档地址:https://gofrp.org/zh-cn/
Server
下载 frp
# make sure you choose the filename corresponds to your system architecture $ wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz $ tar -zxf frp_0.60.0_linux_amd64.tar.gz $ mv frp_0.60.0_linux_amd64 frp
frp 文件夹包含以下文件:
LICENSE frpc frpc.toml frps frps.toml
编辑 frp server 配置文件
$ vim ~/frp/frps.toml
添加如下内容:
bindPort = 7000 # any port you like
使用
systemd
管理 frps 服务首先创建一个 frps 服务文件
$ sudo vim /etc/systemd/system/frps.service
添加如下内容:[Unit] Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # change the path to real absolute path ExecStart = /path/to/frps -c /path/to/frps.toml [Install] WantedBy = multi-user.target
开始服务并且设置为自启动
$ sudo systemctl start frps $ sudo systemctl enable frps
Client
下载 frp(同 server 端)
编辑 frp client 配置文件
$ vim ~/frp/frpc.toml
添加如下内容:
serverAddr = "x.x.x.x" # change it to your server's ip address serverPort = 7000 # reconnect if fail loginFailExit = false [[proxies]] name = "web" type = "tcp" localPort = 5080 # any port you like remotePort = 6080 # any port you like
使用 systemd 管理 frpc 服务
首先创建一个 frpc 服务文件
$ sudo vim /etc/systemd/system/frpc.service
添加如下内容
[Unit] Description = frp client After = network.target syslog.target Wants = network.target [Service] Type = simple # change the path to real absolute path ExecStart = /path/to/frpc -c /path/to/frpc.toml Restart = always RestartSec = 5 [Install] WantedBy = multi-user.target
开始服务并且设置为自启动
$ sudo systemctl start frpc $ sudo systemctl enable frpc
现在你可以使用 [server ip]:port
(e.g. [ip]:6080) 来远程访问你的客户端机器服务。
配置 Nginx 反向代理
使用 [ip]:port 访问的方式既不优雅也不安全,推荐使用 nginx 反向代理的方式实现域名访问并且隐去端口号。
设置域名解析
访问你的域名提供商,它应当会提供域名解析服务。
将你要使用的域名解析到云服务器的 公网 ip
设置反向代理
个人实践过程中才用过以下三种方式
Nginx Proxy Manager (Recommended)
使用 docker 部署 Nginx Proxy Manger,非常优雅。
在 [SSL Certificate] 中申请域名对应的 Let’s Encrypt 证书。
申请过程中 [DNS Challenge] 选择你的解析服务提供商,比如我的域名是在腾讯云购买的,就选择 [DNSPod], id 和 tokens 在 dnspod api 界面生成,不同服务商可能存在差异。
宝塔面板(极其不稳定,强烈不推荐使用)
使用
certbot
或许证书,在 Nginx 手动配置。你都选择这样操作了,应该不需要看这种教程,直接看官方文档就好了。
现在你可以直接使用域名访问你的内网服务。
如果你的选择的云服务器在国内,记得备案!