frp内网穿透
![](https://img2023.cnblogs.com/blog/520218/202301/520218-20230123115354590-1977724512.png)
(其中7000端口是frp服务端口,记得防火墙要开起来!)
部署从来不是难点,难得是配置满足需求。
2、ssl证书申请、域名备案及https协议支持
上面部署完之后,就能代理http和tcp的服务了。其中http服务测试我们选择了公司内网虚拟机的网站服务,监听80端口,tcp则是代理windows远程桌面端口及mysql数据库3306端口,都没有问题。
然而https协议的服务要怎么配置支持?
一开始我想到利用nginx去做,像ngrok一样,去Freessl 网站(https://freessl.cn/)申请https证书,然后代理到frp服务,前提要修改frp的监听端口,因为默认frp也是使用80、443端口,会跟nginx冲突。
首先遇到一个ssl证书申请不下来的问题,DNS解析一直不过(注意,此时环境是阿里云大陆服务器,国外网站购买的域名)。最后老板只能买个阿里国际版的域名,DNS解析验证就没有问题了,ssl证书也能申请下来。
ssl证书是申请下来了,部署之后,出现网站访问不了的问题。阿里云大陆的服务器,没有备案过,即使能解析到阿里国际版购买的域名。
最后只能选择购买阿里云香港服务器部署,解析到阿里国际版的域名,此时,ssl证书和域名备案问题都解决了。
配置到nginx,代理到frp后,之前配置tcp协议及http协议的服务,访问速度很慢,因为查不到具体原因,老板建议重置云盘,话说重置完,重装后,速度竟然恢复正常。先贴下https配置的代码(虽然最后没有用这个方案,至少是本人的辛勤劳动)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
反反复复找不到原因后,决定尝试直接使用frp客户端,而不依赖nginx的方式,去配置https协议的服务。只需要编辑一个frpc.ini 的客户端文件。这个配置能取代在路由器上配置frp内网穿透(文章最开始那个图)
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协议也没问题,客户端指定https协议就行。