朋也的博客 » 首页 » 文章
作者:朋也
日期:2018-10-18
类别:golang学习笔记
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
一直想总结一下使用frp的经验,今天来写一下
我的yiiu.co域名的网站都是用frp做的内网穿透实现的,服务器就在我身边,发布的网站服务外网都访问,下面就来说说我的配置方法
这个不多说,选择好自己的平台就可以了,注意版本号一定要一致,下载地址
打开可以看到 linux 平台有很多版本,386, amd64, arm, arm64 等等,这里说一下,如果你服务器是32位,就下载 386,如果你服务器是64位的,而且你又不能分清cpu是arm架构的还是amd架构的,那也选386
总之一句话,对系统架构分不清的就只下载386的就对了
解压下载好的压缩包,可以看到几个文件
.
├── LICENSE
├── frpc
├── frpc.ini
├── frpc_full.ini
├── frps
├── frps.ini
└── frps_full.ini
各文件说明
做内网穿透需要事先准备的
一次请求的经过,最简单的流程
用户请求(浏览器) -> 外网服务器ip -> 外网服务器上部署的frps -> 内网服务器上部署的frpc -> 内网服务器上部署的服务
请求成功后,响应过程与请求过程相反
这个过程中还可以加上 nginx 来做不同域名共用80端口的转发工作,那样就会变成
用户请求(浏览器) -> 外网服务器ip -> 外网服务器nginx -> 外网服务器上部署的frps -> 内网服务器上部署的frpc -> 内网服务器nginx -> 内网服务器上部署的服务
好了明白这些了,就可以来做配置了
想办法把 frps
frps.ini
拷贝到外网服务器上
我这假设放在 /opt/frp/
下,假设外网服务器ip是 10.10.10.10
, 假设网站域名是 example.com
修改 frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 123123
token = 123123
vhost_http_port = 8000
subdomain_host = example.com
然后启动 frps
# 给frps附上可执行权限
sudo chmod +x frps
# 在后台运行并将日志写入到当前目录下的 log.file 里
./frps -c frps.ini > log.file 2>&1 &
想办法把 frpc
frpc.ini
拷贝到内网服务器上
我这假设放在 /opt/frp/
下, 假设要配置的网站域名是 example.com
bbs.example.com
blog.example.com
三个域名
修改 frpc.ini
[common]
server_addr = 10.10.10.10
server_port = 7000
token = 123123
[example]
type = http
local_ip = localhost
local_port = 8080
use_encryption = false
use_compression = true
subdomain = example.com
[bbs]
type = http
local_ip = localhost
local_port = 8081
use_encryption = false
use_compression = true
subdomain = bbs
[blog]
type = http
local_ip = localhost
local_port = 8082
use_encryption = false
use_compression = true
subdomain = blog
相关配置说明
frps.ini
里配置的 token 一致,否则会导致连不上frps启动 frpc
# 给frps附上可执行权限
sudo chmod +x frpc
# 在后台运行并将日志写入到当前目录下的 log.file 里
./frpc -c frpc.ini > log.file 2>&1 &
注意:内网服务器上要启动三个web服务,分别端口对应 8080, 8081, 8082
如果我们不在内网服务器旁边,web服务要是出问题了,会比较麻烦,这时可以通过frp映射一个ssh,这样就可以随时随地的操作内网了
只需要配置frpc.ini 即可
[common]
...
[ssh]
type = tcp
local_ip = localhost
local_port = 22
remote_port = 7001
[example]
...
同样的方法还可以映射游戏,同样的使用 type = tcp
把端口改成游戏的端口就可以了,比如Minecraft的端口是25565,是不是相当的方便,快跟小伙伴组队吧
重启 frpc , 然后就可以使用命令 ssh -p 7001 root@10.10.10.10
来连接内网的终端了
http://10.10.10.10:7500
然后输入 frps.ini
里配置的 dashboard_user
dashboard_pwd
来查看frp的运行情况如果使用nginx反代frp的话,有时候会碰到这样的错误 [W] [http.go:95] do http proxy request error: no such domain: 127.0.0.1
这个问题我在issues里找到了解决办法,在nginx代理的时候,加上一个配置 proxy_set_header Host $host;
写在 proxy_pass
这一层就可以了
参见:https://github.com/fatedier/frp/issues/1521