frp进阶--穿透、代理全功能

威联通 QNAP  / 教程分享  / 只看大图  / 倒序浏览   © 著作权归作者本人所有

铁威马
花生壳
闻上

#楼主# 2018-4-16 14:43

跳转到指定楼层
本帖最后由 laomms 于 2018-4-18 14:40 编辑

       因为工作的原因,需要国外国内来回跑,回国了上不了外网很不方便,尤其是跟客户沟通的社交工具用不了,出国了因为地域限制听不了国内的歌曲也很不方便,连优酷等视频都看不了,所以现在通过FRP+S*S解决两边的问题。       原先是想在梅林系统的路由里搭建FRP,弄好后发现路由CPU温度飙升,很吃力,放弃,改用威联通,为什么要用威联通而不用群晖,外观是第一因素,另外,这是习惯问题,并没有说哪个系统更好用,还有,如果哪一天群晖出个四个盘位左右的i3 cpu以上的话我会果断买一个。

       国外端,我有个qnap253b充当VPS,50M的当地电信网络,有动态公网IP,相当稳定,很适合做FRPS服务器,省了租VPS的钱。DDNS我是用威联通自带的。
       国内端,我有个qnap251,2M的移动宽带,无公网IP,打过几次移动电话求公网IP,都被拒绝了,说现在已经分配不了公网IP了,无语。无公网DDNS就是摆设,花生壳之类的又收费,所以就通过穿透实现。
      安装frp我用docker实现,为什么用docker,因为方便实时看到调试状态,而不用每次都打开log查看异常状况。按照方法我在另一篇文章里已经写的很详细。
      这里发下配置文件:





      服务端:
  1. [common]
  2. bind_port = 7000
  3. kcp_bind_port = 7000
  4. bind_udp_port = 7001                          
  5. vhost_http_port = 7500
  6. vhost_https_port = 7600                 
  7. dashboard_port = 5500                       
  8. dashboard_user = admin
  9. dashboard_pwd = admin
  10. privilege_mode = true                     
  11. privilege_token = 123456      
  12. privilege_allow_ports = 2000-3000,3001,3003,4000-50000,50000-60000        
  13. #max_pool_count = 50
  14. tcp_mux=true
  15. authentication_timeout = 0
  16. heartbeat_timeout = 30
  17. #log_file = ./frps.log
  18. #log_level = info
  19. #log_max_days = 7
复制代码
      其他的基本上清楚,有几个讲下。
       bind_port = 7000  是用于和客户端内网穿透传输数据的端口
       authentication_timeout = 900       假如客户端设备的时间和服务端的时间相差大于设定值,那么拒绝客户端连接。如果设置为0,则不验证时间,默认值为900秒,可自定义。
        heartbeat_timeout = 30   心跳包配置,默认30秒,超时应该就断开连接了,用来看调试结果。
        max_pool_count = 50  每个内网穿透可以创建的连接池上限,为什么注释掉,因为打开后发现一定几率的断网。
        开启服务端后frps处于等待链接状态:
Capture.PNG






        客户端
  1. [common]
  2. server_addr =ts253b.myqnapcloud.com
  3. server_port = 7000
  4. privilege_token = 123456      
  5. host_http_port = 7500
  6. host_https_port = 7600
  7. #protocol=kcp
  8. heartbeat_interval = 10
  9. heartbeat_timeout = 30
  10. #log_file = ./
  11. #log_level = info
  12. #log_max_days = 3

  13. [web]
  14. type = http
  15. custom_domains = ts253b.myqnapcloud.com
  16. privilege_mode = true
  17. use_gzip = true
  18. use_encryption = true
  19. local_ip = 192.168.1.111
  20. local_port = 8080
  21. #pool_count = 100

  22. [webs]
  23. type = https
  24. custom_domains = ts253b.myqnapcloud.com
  25. privilege_mode = true
  26. use_gzip = true
  27. use_encryption = true
  28. local_ip = 192.168.1.111
  29. local_port = 8443
  30. #pool_count = 100

  31. [tcp]
  32. type = tcp
  33. privilege_mode = true
  34. local_ip = 192.168.1.111
  35. local_port = 8080                                    
  36. remote_port = 55555

  37. [ssh]
  38. type = tcp
  39. local_ip = 192.168.1.111
  40. local_port = 22
  41. remote_port = 6222

  42. [tcp32400]
  43. type = tcp
  44. privilege_mode = true
  45. local_ip = 192.168.1.111
  46. local_port = 32400                                    
  47. remote_port = 53389

  48. [secret_ssh]
  49. type = stcp
  50. sk = 123456
  51. local_ip = 192.168.1.1
  52. local_port = 22

  53. [p2p_ssh]
  54. type = xtcp
  55. sk = 123456
  56. local_ip = 192.168.1.111
  57. local_port = 22

  58. [http_proxy]
  59. type = tcp
  60. remote_port = 6000
  61. plugin = http_proxy
  62. plugin_http_user = admin
  63. plugin_http_passwd = admin
  64. use_encryption = true
  65. use_compression = true

  66. [socks5]
  67. type = tcp
  68. remote_port = 6001
  69. plugin = socks5
  70. plugin_user = admin        
  71. plugin_passwd = admin
  72. use_encryption = true
  73. use_compression = true

  74. [l2pt_port1]
  75. type = udp
  76. local_port = 500
  77. remote_port = 5500

  78. [l2pt_port2]
  79. type = udp
  80. local_port = 4500
  81. remote_port = 54500

  82. [openvpn_port]
  83. type = udp
  84. local_port = 1194
  85. remote_port = 51194

  86. [pptp_port2]
  87. type = tcp
  88. local_port = 1723
  89. remote_port = 51723

  90. [ss_port]
  91. type = tcp
  92. local_port = 8388
  93. remote_port = 58388

  94. [router]  
  95. type = tcp
  96. local_ip = 192.168.1.1
  97. local_port = 80
  98. remote_port = 5555
  99. #subdomain = router

  100. [routers]  
  101. type = tcp
  102. local_ip = 192.168.1.1
  103. local_port = 8443
  104. remote_port = 6666
  105. #subdomain = router

  106. [test_static_file]
  107. type = tcp
  108. remote_port = 55000
  109. plugin = static_file
  110. plugin_local_path = /
  111. plugin_strip_prefix = static
  112. plugin_http_user = admin
  113. plugin_http_passwd = admin

  114. ##[dns]
  115. #type = udp
  116. #local_ip = 8.8.8.8
  117. #local_port = 53
  118. #remote_port = 6000
复制代码



稍微解释下:

  1. server_addr =ts253b.myqnapcloud.com
  2. server_port = 7000
  3. privilege_token = 123456
  4. host_http_port = 7500
  5. host_https_port = 7600
  6. #protocol=kcp
  7. heartbeat_interval = 10
  8. heartbeat_timeout = 30
复制代码
       7000是用于和服务端传输数据的端口,ts253b.myqnapcloud.com是国外的那台qnap的自带DDNS,7500是用http访问内外的端口,https是7600,我也加入了心跳包检测,用于调试。


  1. [web]
  2. type = http
  3. custom_domains = ts253b.myqnapcloud.com
  4. privilege_mode = true
  5. use_gzip = true
  6. use_encryption = true
  7. local_ip = 192.168.1.111
  8. local_port = 8080
  9. #pool_count = 100
复制代码
       ts253b.myqnapcloud.com是国外的那台qnap的自带DDNS,以后将用http以7500端口来访问国内的qnap,国内的qnap的局域网地址和端口是:192.168.1.111:8080.
3.jpg



  1. [ssh]
  2. type = tcp
  3. local_ip = 192.168.1.111
  4. local_port = 22
  5. remote_port = 6222
复制代码
     SSH登陆端口,以后将用6222作为登陆内外qnap的SSH端口。
2.jpg


  1. [router]
  2. type = tcp
  3. local_ip = 192.168.1.1
  4. local_port = 80
  5. remote_port = 5555
  6. subdomain = router
复制代码
       用5555端口实现路由穿透访问。
4.jpg




  1. [test_static_file]
  2. type = tcp
  3. remote_port = 55000
  4. plugin = static_file
  5. plugin_local_path = /
  6. plugin_strip_prefix = static
  7. plugin_http_user = admin
  8. plugin_http_passwd = admin
复制代码
     用55000实现简单的文件访问,比如我要访问docker的跟目录,需要配置qnap的登陆账号。
5.jpg

  1. [http_proxy]
  2. type = tcp
  3. remote_port = 6000
  4. plugin = http_proxy
  5. plugin_http_user = admin
  6. plugin_http_passwd = admin
  7. use_encryption = true
  8. use_compression = true

  9. [socks5]
  10. type = tcp
  11. remote_port = 6001
  12. plugin = socks5
  13. plugin_user = admin        
  14. plugin_passwd = admin
  15. use_encryption = true
  16. use_compression = true
复制代码
      http proxy 或 socks5 插件, 浏览器设置 http 或 socks5 代理地址和端口为 ts253b.myqnapcloud.com:6000,通过客户端网络访问互联网,此时国外的IP已经变成了国内的移动IP。这里用了加密与压缩,否则数据流会被拦截,客户端会出现work connection closed, EOF提示。
       配置文件里还打通了另外几个常用的VPN端口,比如openvpn:
  1. [openvpn_port]
  2. type = udp
  3. local_port = 1194
  4. remote_port = 51194
复制代码
     这里用51194作为openvpn端口,国内的qnap只要开启openvpn即可,下载配置文件后导入到其他机子客户端,改下域名即可。
11.jpg


  1. [ss_port]
  2. type = tcp
  3. local_port = 8388
  4. remote_port = 58388
复制代码
     开启S*S,如何安装及开启S*S具体看另一篇文章。这里用58388来穿透配置好的8388端口。

9.jpg

      因为现在是国外翻到国内,所以我选择仅代理中国大陆IP,另外定义了只有酷我音乐等几个需要验证地域的app通过S*S,其他的app绕过,这样一点都不影响速度。

      配置好客户端文件后开启客户端:
1.jpg

      再来看看服务端调试记录:
0.jpg
      通过浏览器查看 frp 的状态以及代理统计信息展示:
6.jpg
7.jpg
8.jpg





「真诚赞赏,手留余香」
楼主热帖
TVS-682
- CPU: i5-6600
- RAM: 16GB DDR4 2133
- GPU: MSI 1050 4GT LP
- PSU: Corsair SF450
分享淘帖
回复

使用道具

0

精华

93

帖子

1434

积分

发烧玩家

Rank: 2

云币
5
贡献
74
活跃
1017
精华
0
laomms 发表于 2018-4-16 15:35
本帖最后由 laomms 于 2018-4-21 11:12 编辑

到国外的速度,已经非常不错。youtube  1080p毫无压力。 Capture.PNG



到国内的视频也非常流畅,毫无卡顿,才2M的移动。
Capture3.PNG

Capture4.PNG


顺便晒下往qnap里拷贝文件的速度: Capture2.PNG



回复 支持 反对

使用道具 举报

0

精华

93

帖子

1434

积分

发烧玩家

Rank: 2

云币
5
贡献
74
活跃
1017
精华
0
laomms 发表于 2018-4-18 14:36
本帖最后由 laomms 于 2018-4-19 10:06 编辑

      现在访问国内那台的qnap的域名是ts253b.myqnapcloud.com:55555,这么长,难记又难拼,还带着55555这样的尾巴,接下解决这个问题。      一、用caddy的反向代理
      为了方便使用,我去阿里云注册了一个mynas.top域名。并解析到国外的nas地址。
      qnap俱乐部应用中心直接就有caddy下载,下载安装,目录在/share/CACHEDEV*_DATA/.qpkg/Caddy下,ssh进入该目录,输入命令行:      
  1. caddy
复制代码
     打开http://你的nasip:2015应该看到404网页提示,因为默认没有搭建网站,所以没有index文件。但是代表安装成功了。      这里只用到caddy的http反向代理功能,所以代码非常简单。      
  1. Caddyfile
复制代码
     往Caddyfile文件里添加内容:
  1. http://www.mynas.top {
  2.   
  3.   proxy / ts253b.myqnapcloud.com:55555
  4. }
复制代码
     这是端口80未被使用的情况。如果端口已经被路由占用,只能换个80端口。比如:
  1. http://www.mynas.top:8888 {

  2. proxy / ts253b.myqnapcloud.com:55555
  3. }
复制代码
     在输入命令行:
  1. caddy
复制代码
     就代理成功了,可以按ctrl+c退出。
      如果端口80未被占用,那就直接可以用www.mynas.top访问国内的nas,如果被路由占用了,要么用www.mynas.top:8888访问,要么用第二种方法。


      二、利用路由的端口转发功能      进路由ssh查询下端口80被谁占用:
  1. netstat -anl | grep "80"
复制代码
     被路由占用
  1. <blockquote>tcp        0      0 192.168.1.1:80          0.0.0.0:*               LISTEN
复制代码
     可以看下被什么进程占用:
  1. lsof -i :80
复制代码
     lsof 如果没有安装,可以先用opkg install lsof来安装,可以看到是被httpd占用:
  1. httpd   15219 admin    6u  IPv4 2052407      0t0  TCP RT-AC88U-8128.lan:www (LISTEN)
  2. httpd   15219 admin    7u  IPv4 2052408      0t0  TCP localhost.localdomain:www (LISTEN)
复制代码

      我们可以修改80端口为非80端口,然后利用第一种方法:     
  1. killall httpd
  2. httpd -p 82
复制代码

      或者,还有更简单的方法,就是通过端口映射的方法将80映射到其他端口,以梅林为例:
      系统管理-系统设置-Web interface中,改互联网设置通信端口为5000。
Capture4.PNG
      外部网络-端口转发,将80端口转发到55555端口:
Capture5.PNG
      现在直接可以用www.mynas.top或者ts253b.myqnapcloud.com或者路由的ddns访问国内的nas了。


      三、利用路由的ddns.to插件
Capture7.PNG
      配置好插件后,打开ddns.to,用自定义域名建立一个55555端口的映射:
Capture8.PNG





回复 支持 反对

使用道具 举报

0

精华

58

帖子

358

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
329
精华
0
棉少 发表于 2018-4-25 10:56
好详细,还要消化一下,谢谢分享
回复 支持 反对

使用道具 举报

0

精华

9

帖子

34

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
25
精华
0
wyxzyf 发表于 2018-5-1 16:05
楼主,请教一下,我在国外朋友家里放一个梅林,装ss-server,装frp客户端。在国内的路由器有公网ip,也用梅林,装ss客户端和frp服务端。能指导一下如何实现吗??谢谢!!!!

点评

国内如果有公网IP,就不需要这么麻烦了,根本不需要frp,你直接在国内的机子安装SS客户端就可以了。  详情 回复 发表于 2018-5-1 19:45
回复 支持 反对

使用道具 举报

0

精华

9

帖子

34

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
25
精华
0
wyxzyf 发表于 2018-5-1 16:06
另外一个,你的文章写的有些混乱,到底是哪个设备装哪个软件啊??你没说清楚,看不懂,谢谢

点评

因为我的国内网络没有公网IP,所以必须得装frp。 国外机子: frp服务端,SS服务端 国内机子: frp客户端,SS服务端  详情 回复 发表于 2018-5-1 19:52
回复 支持 反对

使用道具 举报

0

精华

9

帖子

34

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
25
精华
0
wyxzyf 发表于 2018-5-1 17:34
你上面的5555端口和8388需要在路由器上设置吗?
回复 支持 反对

使用道具 举报

0

精华

93

帖子

1434

积分

发烧玩家

Rank: 2

云币
5
贡献
74
活跃
1017
精华
0
laomms 发表于 2018-5-1 19:43
5555主要是公网端映射到内网,我这边公网端口是全开放的,所以不需要映射。
8388是内网的ss端口,按理说需要做端口映射,但是我这里都没有做,照样成功。
回复 支持 反对

使用道具 举报

0

精华

93

帖子

1434

积分

发烧玩家

Rank: 2

云币
5
贡献
74
活跃
1017
精华
0
laomms 发表于 2018-5-1 19:45
本帖最后由 laomms 于 2018-5-1 19:50 编辑
wyxzyf 发表于 2018-5-1 16:05
楼主,请教一下,我在国外朋友家里放一个梅林,装ss-server,装frp客户端。在国内的路由器有公网ip,也用梅 ...

国内如果有公网IP,就不需要这么麻烦了,根本不需要frp,你直接在国内的机子安装SS客户端就可以fan到国外了。你国外的朋友如果想fan回来,国内的再安装一个SS服务端即可。

回复 支持 反对

使用道具 举报

0

精华

93

帖子

1434

积分

发烧玩家

Rank: 2

云币
5
贡献
74
活跃
1017
精华
0
laomms 发表于 2018-5-1 19:52
本帖最后由 laomms 于 2018-5-1 19:54 编辑
wyxzyf 发表于 2018-5-1 16:06
另外一个,你的文章写的有些混乱,到底是哪个设备装哪个软件啊??你没说清楚,看不懂,谢谢

因为我的国内网络没有公网IP,所以必须得装frp。实现双向fanqiang。

国外机子:   frp服务端,SS服务端
国内机子: frp客户端,SS服务端
至于SS客户端,什么机子要用就在那台机子安装,比如PC,安卓设备,梅林路由等等。
回复 支持 反对

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

laomms

发烧玩家

  • 主题

    18

  • 帖子

    93

  • 关注者

    11

那是云自营淘宝
兮克广告
快速回复 返回列表 搜索 官方QQ群
懒人地图 百度地图 谷歌地图手机版|小黑屋|智能生活 , 上那是云 |闽ICP备12025514号-3