搭建内网穿透服务(frp)

搭建内网穿透服务(frp)

一、为什么

  1. 在平时工作当中,我们经常会遇到需要将自己本地的服务暴露在公网上,方便与他人进行接口对接、或者进行演示等等,虽然有一些免费的内网穿透服务,但是大都很不稳定或者带宽太低,导致使用起来很不方便,如果使用收费的产品的话,会发现价格相当贵,但是在映射条数和带宽方面还是有很大的限制,就拿我们公司购买的某壳企业级专业版的内网穿透来说,只有2个映射数,带宽一个1M,一个2M,一年的费用大概是600多,最重要的是还不稳定,隔几天需要重启,导致客户隔几天就会反馈,系统链接失效,很郁闷,给客服反馈,说是公司网络的问题,但是检查后发现本地网络很稳定,后来又给出解决方案是在本地客户端配置超时时间,但是这时我已经萌生了自己搭建一个自己的内网穿透服务的年头了;
  2. 公司建设初期,只是在本地购买了两台服务器,没有购买云服务,所以公司的所有基础服务,比如gitlab、mantis、nexus、mysql等等都在本地服务器,但是疫情当前,随时有可能就居家隔离了,这样公司同事基本就没有办法进行协同工作了,21年11月底西安封城,幸好在封城前,我提前已经搭建好了内穿穿透服务,封城前对公司所有需要用的服务都进行了穿透,所以基本没有对公司的工作造成影响。
  3. 作为一个软件工程师,秉承着开源、节省成本的想法,就想着既然收费的这么贵,何不自己找一个开源的项目自己搭建一个呢。

  基于这样的想法,利用业余时间通过咨询朋友,网上查阅资料搭建成功了自己的内网穿透服务

二、需要什么

  1. 一个域名(价格>=9元),本文以 www.yourdomain.com 为例
  2. 一个有共有ip的服务器(云服务器),本文以123.123.123.123为例

当时在选择服务器的时候因为阿里云的新用户已经购买过一个,所以没有新用户的优惠价格比较贵,所以当时经过筛选,选择了腾讯云的轻量级云服务器(2c4g8M3y)2核4G内存8Mb带宽3年,200多块钱,确实很便宜,但是使用了两个多月发现腾讯云经常提示被黑客攻击,挖矿啥的,让购买安全服务,一直拖着不买,也根据给出的方案进行了系统修复等,但是后来还是直接挂了,然后还不能恢复,退钱还得走客服,搞的很郁闷,之前阿里云也买过几个服务器,从来没有遇到这样的情况,后台果断换百度云(专门找便宜的),百度云有一个基本相同配置的服务器,两年100多,目前已经使用了3个月,没有任何问题。

三、项目地址

frp项目地址
安装包下载地址
frp文档地址

四、云服务器安全组策略

需要在云服务器安全组策略上开通7000/7001/7002三个端口,用于客户端连接,
如果客户端中配置tcp类型的穿透,则每个穿透出来的端口也都需要开通安全组策略

五、域名解析

需要在域名解析服务中配置一条txt记录,需要将主机记录:*.frp.yourdomain.com 全部解析到公网ip 123.123.123.123上

六、nginx配置

nginx作用是将通配符域名 *.frp.yourdomain.com的请求全部转发到frp的服务端的7001端口上,具体nginx相关配置片段如下:

server {
  # 内网穿透(frp);
  server_name ~^(?<subdomain>.+).frp.yourdomain.com;
  listen 80;
  location / {
    proxy_pass http://localhost:7001;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    add_header 'Access-Control-Allow-Origin' *;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'access_token,token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    proxy_connect_timeout 60000;
    proxy_read_timeout 60000;
    proxy_send_timeout 60000;
  }
}

七、frp服务端安装

  1. 解压压缩包
tar zxvf frp_0.51.2_linux_amd64.tar.gz
  1. 配置文件配置
    参加第三章节 frp文档地址
[common]
bind_port = 7000

# 启用TLS协议加密连接
tls_enable = true


#http https
vhost_http_port = 7001
#vhost_https_port = 443
vhost_http_timeout = 6000



#log
log_file = /root/software/frp/log/frps.log
log_level = info



heartbeat_timeout = 300
user_conn_timeout = 60


#subdomain
subdomain_host = frp.yourdomain.com


#dashboard
dashboard_port = 7002

dashboard_user = root
dashboard_pwd = dashboardpassword


max_pool_count = 20000


#token 类似于令牌
token = yourtoken
  1. 配置frp服务器为系统服务
    在/etc/systemd/system/目录下创建.frps.service 内容如下:
[Unit]
Description=frps
After=network.target

[Service]
LimitNOFILE=20480000
TimeoutStartSec=30
ExecStart=/root/software/frp/frps -c /root/software/frp/frps.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target
  1. 相关命令
# 开机自启动
systemctl enable frps
# 启动
systemctl start frps
# 重启
systemctl restart frps
# 停止
systemctl stop frps
# 查看状态
systemctl status frps

八、frp客户端安装

在任务连接互联网上的机器都可以,支持各种操作系统,本文以linux为例

  1. 解压压缩包
tar zxvf frp_0.51.2_linux_amd64.tar.gz
  1. 配置文件配置
    参加第三章节 frp文档地址
[common]
server_addr = 123.123.123.123
server_port = 7000

#token
token = yourtoken

# console or real logFile path like ./frpc.log
log_file = /usr/local/soft/frp0512/log/frpc.log

# trace, debug, info, warn, error
log_level = trace

log_max_days = 10

tls_enable = true


heartbeat_interval = 180
heartbeat_timeout = 300 

# tcp穿透方式 访问链接:  123.123.123.123:12299
[ssh_tcp]
type = tcp
local_ip = 192.168.1.99
local_port = 22
remote_port = 12299

# http穿透方式 访问连接: http://minio.frp.yourdomain.com
[minio_http]
type = http
local_ip = 192.168.1.99
local_port = 10001
subdomain = minio
  1. 配置frp服务器为系统服务
    在/etc/systemd/system/目录下创建frpc.service 内容如下:
[Unit]
Description=frpc
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=/usr/local/soft/frp/frpc -c /usr/local/soft/frp/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target
  1. 相关命令
# 开机自启动
systemctl enable frpc
# 启动
systemctl start frpc
# 重启
systemctl restart frpc
# 停止
systemctl stop frpc
# 查看状态
systemctl status frpc

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值