本地服务器通过frp实现内网穿透

本地服务器通过frp实现内网穿透

购买完vps之后,我决定使用vps对我没有外网ip的本地服务器进行内网穿透

首先我们明确客户端和服务端,vps充当服务端,即安装frps端,当然也可以是任何有公网ip的服务器,而本地则充当客户端,安装frpc端

frps安装与配置

安装

首选需要了解vps的系统架构,通过uname命令查看

1
2
3
uname -a # all

Linux cetacean 4.18.0-80.7.1.el8_0.x86_64 #1 SMP Sat Aug 3 15:14:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

从结果可知架构为x86_64,因此选择amd64版本的下载包,具体选择因人而异,然后通过以下链接选择对应版本右键复制下载链接

frp版本下载

/posts/frp/pic01.png

接着来到vps命令行中

1
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz # wget 版本链接

没有wget的可通过yum下载

1
yum install -y wget

之后解压安装包,解压后在同路径会出现一个同名文件夹,并将其重命名为frp,进入frp文件夹中

1
2
3
4
5
6
tar -zxvf frp_0.38.0_linux_amd64.tar.gz # 对应包名
rm -y frp_0.38.0_linux_amd64.tar.gz # 删除安装包
mv frp_0.38.0_linux_amd64 frp # 重命名
cd frp
ls # 查看目录
$ frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE  systemd

由于我们只使用frps端,所以可以把没必要的frpc部分删除掉

配置

然后就是frps的相关配置任务了,vim编辑frps.ini文件

此处给出常用配置信息,详细使用说明可以到官方文档查看frp docs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
vim frps.ini
# 插入如下内容
[common]
bind_port = 7070
dashboard_port = 7778
dashboard_user = xxxx
dashboard_pwd = xxxxxxxxxx
token = xxxxxxxxxx

subdomain_host = example.com
vhost_http_port = 8080
vhost_https_port = 8443

配置详解

optiondescription
bind_portfrp连接端口,与frpc配置应一致
dashboard_port可视化面板端口,通过服务端访问
dashboard_user面板登录账号
dashboard_pwd面板登录密码
token设置token,保证通讯安全性
subdomain_host主域名,随后将在客户端配置相应二级域名部分
vhost_http_porthttp穿透端口
vhost_https_porthttps穿透端口

配置完毕,通过screen运行frps端

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
yum install -y screen # 安装screen
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm # 若出现找不到screen包,可先安装配置yum源
screen -S frps # 创建名为frps的session任务
./frps -c frps.ini
# 出现如下结果说明运行成功,可见运行在7000端口
[root.go:200] frps uses config file: frps.ini
[service.go:192] frps tcp listen on 0.0.0.0:7000
[root.go:209] frps started successfully

# ctrl + a + d 可退出当前screen窗口
# 后续如需重新运行frps
screen -r frps
# 若想终止screen,直接查看pid并kill杀死任务
screen -ls
kill [pid]

frpc安装与配置

安装

frpc的安装与frps一样,参照上面在本地服务器下载解压即可

配置

安装完毕之后,对frpc进行配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
vim frpc.ini
# 这里给出ssh和http(s)的示例
[common]
server_addr = x.x.x.x # 服务端ip
server_port = 7070 # 对应服务端连接端口
token = xxxxxxxxxx

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = xxxx

[web]
type = http
subdomain = xxx
local_port = xxxx

配置详解

optiondescription
server_addr服务端ip
server_port对应服务端连接端口
token对应服务端token
[name]创建一个名为name的frp连接
type连接类型,支持tcp|udp|http|https|stcp|sudp|xtcp|tcpmux
local_ip本地连接ip
local_port本地连接端口
remote_portfrps转发端口,http(s)的穿透端口已在frps端配置,此处不适用
subdomainhttp(s)配置二级域名部分
注意
域名解析需在所属域名服务商那里解析为服务端ip,记录类型选择 ‘A’

接着运行frpc端,方法与frps端一样,这里不再赘述

1
2
screen -S frpc
./frpc -c frpc.ini

测试

就此frpc和frps端均已运行,接下来测试一下是否连接成功,浏览器输入配置的域名,如无法正常访问,留意几点:

1.两部机器的防火墙是否开放了对应端口,注意如果是类似阿里云的服务器商还需在其控制台开放端口

2.映射端口是否正确,具体可看运行frpc(s)的时候命令行输出了什么内容