其实老早就有计划想这么搞了, 奈何没什么动力. 毕竟咋们小公司, 不都在一个局域网吗? 直到今天: 要
调试支付回调
, 我想, 是时候让自己的mac"暴露"在公网了!
事前准备
你需要一台拥有
公网IP
的服务器, 我用的是阿里云的最低配ecs(应该),ecs.t6-c2m1.large
, 带宽我选的按量计费
, 直接拉满80M
, 因为本身使用率不高, 固定带宽既没性价比, 而且万一要传个文件之类的呢, 哭死你, 按量计费首当其冲, 最后算下来24块/月
一个域名(如果https
的话需要, 或者你自己搞ip证书, 感觉挺麻烦)
建立目标
由于经常会同时调试多个项目, 显然只穿透某一个端口会有点略显鸡肋, 所以计划将
6850-6900
这个范围内的端口都穿透出去
目标端口:6850-6900
然后就是
https
的问题, 要走https的话就不能直接使用ip:端口的方式了, 或者说可以用, 但是巨麻烦, 我这里使用的是nginx反向代理来实现
目标协议: 支持https
开始搭建服务端环境
我用到的服务端是
debian
系统,x86_64
架构, 和ubuntu
指令差不多, 默认用户root
, 非root
用户下, 某些指令请配合sudo
使用, 比如apt-get
1.首先先安装
nginx
apt-get update
apt-get install nginx -y
2.然后下载
frp
frp最新版本下载地址
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
tar zxvf frp_0.38.0_linux_amd64.tar.gz
cd frp_0.38.0_linux_amd64
ls
frps
既是我们需要使用到的(我一般都会在服务端上删除frpc
相关的文件, 因为这是客户端使用的, 客户端上同理)
其中frps_full.ini
中为详细的配置说明(官方良心啊), 当然, 我也会直接告诉你足够使用的配置
编辑frpc.ini
文件, 按照自己的需求修改下面的配置
[common]
bind_addr = 0.0.0.0
bind_port = 7000
bind_udp_port = 7001
kcp_bind_port = 7000
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# 监控面板账号
dashboard_user = xiaoc
# 监控面板密码
dashboard_pwd = password
enable_prometheus = true
log_file = ./frps.log
log_level = info
log_max_days = 3
disable_log_color = false
detailed_errors_to_client = true
authentication_method = token
authenticate_heartbeats = false
authenticate_new_work_conns = false
# frp连接密码
token = passwordabc
保存, 然后执行
nohup ./frps -c frps.ini &
直接运行并置于后台
至此,
frp
服务端相关的配置就完成了, 接下来是nginx
由于个人习惯问题, 我喜欢将nginx的配置文件放置于/etc/nginx/conf.d
目录下, 所以这里都按照我自己的习惯来, 先直接mkdir -p /etc/nginx/conf.d/
创建目录, 然后修改nginx
的基础配置文件/etc/nginx/nginx.conf
, 在http
节点的任意地方加入include /etc/nginx/conf.d/*.conf;
和client_max_body_size 100m;
, 如下示意
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
client_max_body_size 100m; # 允许最大100M文件进行POST, 看自己怎么定
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
然后cd到
/etc/nginx/conf.d/
目录下, 新建配置文件mac.xiaoc.conf
, 配置内容如下
server {
listen 80;
listen 443 ssl;
#SSL证书请自己申请, 我这里用的是根域名证书, 既一张证书可以让这个域名下的所有下一级子域名共同使用(*.mac.xiaoc.cn)
ssl_certificate /root/ssl/mac.xiaoc.cn/fullchain.pem;
ssl_certificate_key /root/ssl/mac.xiaoc.cn/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#使用泛解析的方式解析域名, 并记录下端口, 为下面的代理提供数据
server_name ~^(?<port>.+)\.mac\.xiaoc\.cn$;
location /{
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
proxy_pass http://127.0.0.1:$port;
}
}
好了,
泛解析
的nginx
配置也搞定, 整个服务端的配置就到此结束
, 记得使用nginx -t
检验脚本, 并nginx -s reload
重启以使配置生效
客户端配置
客户端配置起来就很简单, 首先还是下载对应客户端版本的
frp
, 下载方式就不再赘述了, 由于我是mac m1
, 官方提供的linux_arm64
我也用不了, 所以自己编译了下, 详情见这篇日志
下载完过后,frpc
既是我们需要用到的客户端, 配置frpc.ini
, 内容如下
[common]
server_addr = 服务器ip
server_port = 7000
token = 设置的token
#frp支持用减号拼接的方式直接设置多个端口, 但是名称必须使用range:开头进行标识, 否则会报错
[range:mac-debug]
type = tcp
local_ip = 127.0.0.1
local_port =6850-6900
remote_port =6850-6900
最后只需要设置一个开机启动或者每次手动运行一次
nohup ./frpc -c frpc.ini &
即可. 运行过后前往http://ip:7500
, 点击左侧的Proxies - TCP
查看, 如果出现了很多的mac-debug_
, 并且右边显示绿色的online
, 则为整个流程都配置成功了!最后的最后, 为你的域名加上泛解析
*.mac
, 记录类型为A
, 记录值为你服务器的ip
, 等解析生效过后即可通过https://6850.mac.xxxx.cn
正常访问到你mac本地的6850端口!
PS
阿里云, 腾讯云等大部分云服务器都有防火墙(比如阿里云的安全组), 请保证安全组内
7000(TCP), 7001(UDP), 7500(TCP)
和设置的6850-6900
端口在白名单内, 我是简单暴力, 因为也不是什么重要的服务器, 直接所有端口全部open
!