使用frp内网穿透,在家中搭建服务器

内网穿透

有了服务器之后,想在外面通过外网访问自己的服务器,那可能就需要内网穿透。当然如果家里有公网IP就不需要穿透,但现在公网IP申请越来越难。

内网穿透有很多种,大致分为两类:

  • 购买某些硬件产品,接入家中网络,通过产品的后台来对外网访问进行配置
  • 通过一些软件进行流量转发

第一种限制较多,想用的开心可能要花一些money。俗话说的好,穷能使人进步,所以我们使用第二种更自由自主的方案。可选择的软件也有一些,最后选择了简单好用的frp。

frp介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

官方文档不太详细,下面是一个网上比较详细的文档

frp服务端配置

从github上下载release包,里面同时包含了客户端和服务端,所以复制到客户端服务端各放一份就行。

服务端通过修改frps.ini文件来配置服务端参数,基本配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
bind_port = 7000
token = 12345678

dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

vhost_http_port = 80
vhost_https_port = 443

log_file = /root/frp/frps.log
log_level = info
log_max_days = 3

配置开头[common]是必须的,表示配置的开始。其他参数含义如下:

配置名 说明
bind_port frp服务端端口号
token 验证密钥
dashboard_port 仪表盘端口号
dashboard_user 仪表盘用户名
dashboard_pwd 仪表盘密码
vhost_http_port 接收http请求的端口号
vhost_https_port 接收https请求的端口号
log_file 日志文件位置
log_level 日志级别
log_max_days 日志最大保存天数

上面的配置就可以启动frp服务端了。frp还有kcp、udp等服务端配置,详细配置请查看文档。http请求在没有备案前,可能无法使用80和443,可以先用其他端口测试。

启动命令(启动不了的话可能要先授权):

1
./frps -c frps.ini

也可以做成脚本并添加到开机自启

1
2
3
pkill frps
sleep 3
nohup /root/frp/frps -c /root/frp/frps.ini > /dev/null 2>&1 &

启动后通过访问仪表盘端口(http://服务器IP:7500)就可以查看frp的工作状态了

frp客户端配置

客户端修改frpc.ini文件来配置,基本配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[common]
server_addr = 0.0.0.0
server_port = 7000
token = 12345678
log_file = /root/frp/frpc.log
log_level = info
log_max_days = 3

[ssh_test1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001

[http_jenkins]
type = http
local_ip = 192.168.1.21
local_port = 8080
custom_domains = jenkins.baidu.com

[common]配置:

配置名 说明
server_addr 服务端地址
server_port 服务端端口号
token 验证密钥
log_file 日志文件位置
log_level 日志级别
log_max_days 日志最大保存天数

[ssh_test1][http_jenkins]配置名称是自定义的,里面配置了frp的转发类型和端口域名信息

配置名 说明
type 类型,tcp、udp、http、https
local_ip 映射到本地的ip,如果映射到本机填写127.0.0.1,否则填写映射机器的ip
local_port 映射到本地的端口
remote_port 服务端端口号,表示将服务端的此端口映射到客户端,如果是http、https类型不用填写,默认会将服务端配置的http、https端口映射
custom_domains 配置的域名,当时http、https配置时可填,用来表示此配置对应的域名

启动命令(启动不了的话可能要先授权):

1
./frpc -c frpc.ini

也可以做成脚本并添加到开机自启

1
2
3
pkill frpc
sleep 3
nohup /root/frp/frpc -c /root/frp/frpc.ini > /dev/null 2>&1 &

修改frpc.ini后需要重启客户端,服务端不需要重启。启动后可以通过日志查看服务连接状态,也可以通过服务端的仪表盘查看。

frp的灵活性让它可以有很多应用,可以建网站,可以建服务(比如mysql、redis),还有转发远程控制端口,让你在外面也能远程家中的电脑(比很多连接软件速度快)。