你开发微信公众号时是怎么调试的呢?idea 远程调试?打印 log 调试?你公司电脑你是怎么远程的呢?teamviewer?你知道吗,你可以通过 frp 连接内网电脑,暴露内网服务,简直不要太爽。
frp 是我所见过 的 内网穿透解决方案里 我最喜欢的一个,功能足够强大,可以 穿透 ssh 和 web,并支持 kcp 协议。在 github 拥有将近 30K star,足见其实力吧。下面回归主题,使用 frp 穿透 ssh 和 web 服务。
frpc.ini 配置
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
protocol = kcp
如上,是 frp 客户端的基础配置,如果要配置 ssh 或者 web 服务,你继续追加即可。
frp 实现 ssh 穿透
frpc.ini 配置如下:
纯文本内容为:
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
protocol = kcp
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
这里的 ssh 可以换作别的名称,不影响使用,但是不能重复哦,重复注册不成功。
frps.ini 配置如下:
[common]
kcp_bind_port = 7000
vhost_http_port = 8080
subdomain_host = kpromise.top
这里,subdomain_host 指你的主域名,7000 是 frp 主程序的监听地址,需要跟上文中 server_port 对应。8080 是 http 的监听端口。
frp 穿透内网 web 服务
frpc.ini 配置如下:
纯文本内容为:
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
protocol = kcp
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[customerdev]
type = http
local_port = 8182
subdomain = customerdev
frps.ini 配置如上,这里不再赘述。之后你可以 frps -c frps.ini 以及 frpc -c frpc.ini 来启动客户端和服务端,启动后,你就可以通过 customerdev.kpromise.top:8080 来 访问内网服务了。如果你不想要 域名后面的 8080,那就只能通过 nginx 转发了,即 你请求 customerdev.kpromise.top 时,nginx 将流量转发到 本地的 8080 端口,配置如下:
纯文本内容为:
server {
listen 80;
server_name customerdev.kpromise.top;
server_tokens off;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name customerdev.kpromise.top;
charset uft-8;
location / {
proxy_pass http://localhost:8080;
gzip off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate /etc/letsencrypt/live/kpromise.top/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/kpromise.top/privkey.pem; # managed by Certbot
}
这样子,你还直接给 加了 https 呢,何乐而不为!记住一点 [customerdev] 这里 customerdev 是服务名称,你随便写,但是不能重复。而 common 部分你就不要改了,反正我没改!可以多个 client 连接 同一个 server,除了 common 外,其余 服务名称不得重复。另外,还支持 流量压缩与加密,以及客户端服务端鉴权。鉴权呢,服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。压缩与加密需要在 client 端指定,且只能在服务配置下,比如:
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
压缩后可有效加快传输速度。
原文链接:https://www.163.com/dy/article/F4P3R5VV0532BCFG.html