部署环境
- 阿里云
ubuntu系统
部署Frps
搜索
frps镜像1
docker search frp
拉取
frp镜像1
docker pull snowdreamtech/frps
创建
frps目录以及frps.toml配置文件1
2
3mkdir frps
cd frps
touch frps.toml在
frps.toml配置文件中填写配置信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[common]
# 内网穿透端口配置
bind_addr = 0.0.0.0
bind_port = 7000
# WEB控制面板相关配置
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
# 日志相关配置
log_file = ./frps.log
log_level = info
log_max_days = 3
disable_log_color = false
# auth token
token = 12345678
# 子域名配置
subdomain_host = frps.com
allow_ports = 2000-3000,3001,3003,4000-50000
#转发端口
vhost_http_port = 80 ; ★ HTTP 代理口(Nginx 经 c_frps:80 转发)
vhost_https_port = 443
max_pool_count = 5
max_ports_per_client = 0
创建并运行容器
1
2
3
4
5
6
7
8
9
10docker run -id \
--name=c_frps \
--restart=always \
--network c_bridge \
-p 6010:6000 \
-p 7010:7000 \
-p 7510:7500 \
-v /root/songjian/frp/frps/frps.toml:/etc/frp/frps.toml \
-h c_frps \
snowdreamtech/frps:latest验证程序是否可用
在浏览器中输入
http://服务器ip:7510,看控制面板界面是否能正常打开界面如下:

至此,
frps安装完毕接下来,可在需要进行内网穿透的电脑上安装
frpc来实现内网穿透,具体详见之前的文章:《使用frp进行内网穿透实现外网访问局域网中的服务器》
注意事项
如果需要进入容器,可执行以下指令
1
docker exec -it c_frps /bin/sh
注意:这里需要使用
/bin/sh,不能使用bash或者/bin/bash,否则会报错如果想要实现客户端子域名访问, 首先需要将域名解析到
frps所在的服务器ip,然后在nginx配置中添加域名泛解析1
2
3
4
5
6
7
8
9
10
11
12
13# /etc/nginx/conf.d/frps-vhost.conf
server {
listen 80;
server_name *.frp.cn; # 匹配所有 *.frp.cn
location / {
proxy_pass http://c_frps:80; # Docker 内网访问 frps
proxy_set_header Host $host; # ★ 必须保留原始域名,frps 靠它路由
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这样frpc客户端那边通过subdomain属性配置就能设置子域名访问了
如果想要让服务器当做内网穿透跳板机, 也就是支持任意个人域名而非单纯子域名, 那么需要在
nginx配置文件中做如下设置:1
2
3
4
5
6
7
8server {
listen 80 default_server; # 兜底所有未单独配置的域名
server_name _;
location / {
proxy_pass http://frps容器名:80;# 端口对应frps配置中的vhost_http_port
proxy_set_header Host $host;
}
}这样
frpc客户端那边通过custom_domains属性配置就能设置自定义域名访问了, 注意的是自定义域名同样要解析到服务器ip或者域名才能正常访问如果
frpc客户端链接提示拒绝, 通常是端口不通导致的, 这里需要将客户端的设置和frps服务端设置保持一致, 因为我们使用了docker映射, 以宿主端口7010映射到容器的7000为例, frpc配置文件中的端口应该填7010而非7000示例配置如下:
1
2
3
4
5
6
7
8
9
10
11[common]
server_addr = 服务器ip或者域名
server_port = 7010 #对应bind_port的映射端口
token = 12345678
[mac_http]
type = http
local_ip = 127.0.0.1
local_port = 13000
subdomain = gitfrpc配置三件套: 地址+端口+密钥
如果
frpc客户端连接超时,有可能是服务器未开放7010端口, 需要去服务器运营商安全组开启该端口frpc客户端报错Send login request to plugin error这有可能是因为
frps配置了[plugin.user-manager]/[plugin.port-manager]等插件导致的, 去frps配置文件中将plugin插件板块相关配置全部删除即可
TCP穿透
假设你在网上找了一个免费的内网穿透跳板机, 拿到了它的ip和端口以及登录token, 但是没有对方的域名, 而且对方的服务也不支持自定义域名, 此时隧道虽然顺利打通, 但不知道怎么访问本地服务
此时我们可以换成TCP的访问模式, 只需要在本地frpc客户端配置文件中做如下配置:
1 | [common] |
然后在任意浏览器输入http://跳板机IP:21300即可访问本地1300端口对应的服务了, 但有一个前提是21300要在对方的开放端口范围内才行, 这个问题就只能靠换端口测试来验证了
本文为作者原创 转载时请注明出处 谢谢
