frp内网穿透 一、背景说明 老板在11月底的时候,曾经问过我,外网访问公司内网的服务,用的是什么技术,然后问我frp用过没有,接着发了这篇文章我【https://sspai.com/post/52523】。我说ngrok、autossh都有,为了小强有没有用过,他说不够autossh稳定,我就反映过去了,不过老板强大的求知欲,貌似不太死心,所以后来差不多1周时间,我都在捣鼓这玩意。 相比ngrok、autossh,我觉得最大的好处是,frp能结合路由器配置,web界面简单明了,但客户端配置起来就麻烦多了。ngrok、autossh基本不需要动客户端,直接用即可。
其中,7000端口是frp服务端口。
另外,ngrok可以自定义域名,而frp得写死。譬如客户端运行时,能改成:ljy.ngrok.cn, xxx.ngrok.cn。frp就不行了,需要事先确认好。
二、研究历程 总结下来,一波三折~~ 所以叫历程,不假,由于时间隔得有点长,加上记忆力不太好,可能下面内容有误导成分,请多多见谅。所以,写博客一定要趁热打铁! 1、天翼服务器不通github 首先,老板发的这篇文章,安装是有点问题的,因为一开始测试,是部署在天翼云的服务器上。天翼云服务器是不通github的,那我只能下载安装包到本地再上传,然后启动也是各种报错,最终虽然装好了,但访问有问题:那台天翼服务器80、443端口没有在天翼云备案,nginx配置完后用不了。 后来老板找了篇傻瓜式部署的文档【https://github.com/MvsCode/frps-onekey】,叫我开台按量付费的阿里云大陆服务器部署测试(后面大家会知道为什么我会强调大陆和香港) 部署完如下图所示:
部署从来不是难点,难得是配置满足需求。
2、ssl证书申请、域名备案及https协议支持
上面部署完之后,就能代理http和tcp的服务了。其中http服务测试我们选择了公司内网虚拟机的网站服务,tcp则是代理windows远程桌面,mysql数据库,都没有问题。
然而https协议的服务要怎么配置支持?
一开始我想到利用nginx去做,像ngrok一样,去Freessl 网站(https://freessl.cn/)申请https证书,然后代理到frp服务,前提要修改frp的监听端口,因为默认frp也是使用80、443端口,会跟nginx冲突。
首先遇到一个ssl证书申请不下来的问题,DNS解析一直不过(阿里云大陆服务器,国外网站购买的域名)。最后老板只能买个阿里国际版的域名,证书就申请下来了。
ssl证书是申请下来了,部署之后,出现网站访问不了的问题。阿里云大陆的服务器,没有备案过,即使能解析到阿里国际版购买的域名。
最后只能选择购买阿里云香港服务器部署,解析到阿里国际版的域名,此时,ssl证书和域名备案问题都解决了。
配置到nginx,代理到frp后,tcp协议配置的远程桌面用不了,而且https、http访问很慢。因为查不到具体原因,老板建议重装,也很快,几条命令部署frp。先贴下https配置的代码(虽然最后没有用这个方案)
1 server { 2 listen 80; 3 server_name *.frp.xxx.cn; 4 return 301 https://$host$request_uri; 5 } 6 7 server { 8 listen 443 ssl; 9 server_name *.frp.xxx.cn; 10 11 ssl_certificate /etc/nginx/cert/cert.pem; 12 ssl_certificate_key /etc/nginx/cert/key.pem; 13 ssl_session_timeout 5m; 14 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 15 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 16 ssl_prefer_server_ciphers on; 17 18 location / { 19 #转发到frp的http服务端口 20 proxy_pass http://127.0.0.1:10080; 21 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 22 proxy_set_header Host $http_host; 23 proxy_set_header X-NginX-Proxy true; 24 proxy_http_version 1.1; 25 proxy_set_header Upgrade $http_upgrade; 26 proxy_set_header Connection "upgrade"; 27 proxy_max_temp_file_size 0; 28 proxy_redirect off; 29 proxy_read_timeout 240s; 30 31 } 32 33 # redirect server error pages to the static page /50x.html 34 # 35 error_page 500 502 503 504 /50x.html; 36 location = /50x.html { 37 root /usr/share/nginx/html; 38 }View Code
反反复复还是找不到原因后,老板提议,试试使用frp客户端的方式去配置https协议的服务,需要配置一个frpc.ini 的客户端文件
1 [common] 2 server_addr = 【frp服务器ip】 3 server_port = 【frp服务器的服务端口】 4 token = xxx 5 6 #log_file = ./frpc.log 7 #log_level = info 8 #log_max_days = 3 9 10 ## 代理tcp远程服务 11 [xxx-local] 12 type = tcp 13 local_ip = 【测试win虚拟机的ip】 14 local_port = 【测试win虚拟机的远程桌面端口】 15 remote_port = 【frp服务器未使用的一个端口】 16 custom_domains = xxx名字.域名xxx.top 17 18 19 ##显示名字,代理我办公电脑的tomcat服务,https访问 20 [ljy-tomcat] 21 type = https 22 local_ip = 【我办公电脑的ip】 23 local_port = 8080 24 remote_port = 【frp服务器未使用的一个端口】 25 custom_domains = ljy.域名xxx.top 26 27 # HTTPS 证书相关的配置 28 plugin = https2http 29 plugin_local_addr = 【我办公电脑的ip】:8080 30 31 plugin_crt_path = ./ce/cert.pem 32 plugin_key_path = ./ce/key.pem 33 plugin_host_header_rewrite = 【我办公电脑的ip】 34 plugin_header_X-From-Where = frp
下面是代理http服务配置:
[xxx名字]
type = http
local_ip = 192.168.0.xx
local_port = 80
remote_port = 【frp未使用的一个端口】
custom_domains = xxx名字.域名xxx.top
其中,证书放到同级目录下即可
前台启动是这样的: frpc.exe -c frpc.ini
最后说下,这种frp客户端方式容易出现假死情况,留意上面红框,会定着不动,需要按回车。至于放到后台运行有没有这种情况,暂时没测过
因为已经不使用nginx代理的方式,所以结合路由器配置(文章最前面那个图),http穿透服务端口和https穿透服务端口保持frp默认的80、443即可。
结合路由器配置https服务,其实协议类型选择http,客户端指定https协议即可
标签:xxx,端口,穿透,ssl,frp,proxy,https,内网 From: https://www.cnblogs.com/windysai/p/17065107.html