其实老早就有计划想这么搞了, 奈何没什么动力. 毕竟咋们小公司, 不都在一个局域网吗? 直到今天: 要
调试支付回调
, 我想, 是时候让自己的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
1 2 3 |
apt-get update apt-get install nginx -y |
2.然后下载
frp
frp最新版本下载地址
1 2 3 4 5 |
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
文件, 按照自己的需求修改下面的配置
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 |
[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;
, 如下示意
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 35 |
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
, 配置内容如下
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 |
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
, 内容如下
1 2 3 4 5 6 7 8 9 10 11 12 |
[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
!