[运维] 内网穿透最佳实战-基于frp

序言: 几年前写了一篇全面的,但是涉及管制被删,最近发现身边不少朋友也在用这个(英雄所见略同),而且发现新版本的frp可以用来实现负载均衡了(而且是可以跨机房的),感觉很赞,所以打算重新写一篇关于它的文章,这篇文章只介绍frp这个工具的使用方法,不涉违法。
  1. 什么是内网穿透:如你在家里的电脑的ip地址是192.168.1.100, 有这个ip你是无法在公司通过这个局域网ip访问到家里的电脑的,内网穿透的任务就是让你可以在公司访问到家里的电脑
  2. 可以去github上去下载frp和阅读完整文档https://github.com/fatedier/frp, 本文比官方文档接地气一些,实践经验。
  3. frp 的工作原理
    在这里插入图片描述
    3.1. 在公网服务器上的服务器运行 frp的服务端frps, 这台公网服务器的ip得是可以直接访问的(假设这个ip是111.114.114.114)。
    3.2. 在内网电脑上运行frp的客户端frpc, 把内网的某ip( 假设这个ip是192.168.1.100)的某端口映(假设 22)射到公网服务器的某些端口上(假设10022)。
    3.3. 那么在非局域网访问111.114.114.114:10022和你在局域网访问192.168.1.100:80是等效的。
  4. 这一过程的服务端配置文件 frps.ini
<span class="token punctuation">[</span>common<span class="token punctuation">]</span> bind_port <span class="token operator">=</span> <span class="token number">10000</span> bind_udp_port <span class="token operator">=</span> <span class="token number">10001</span> kcp_bind_port <span class="token operator">=</span> <span class="token number">10002</span> vhost_http_port <span class="token operator">=</span> <span class="token number">10080</span> token <span class="token operator">=</span> sfmam23tmmmfeti4 log_file <span class="token operator">=</span> <span class="token punctuation">.</span><span class="token operator">/</span>frps<span class="token punctuation">.</span>log log_max_days <span class="token operator">=</span> <span class="token number">7</span> log_level <span class="token operator">=</span> info dashboard_addr <span class="token operator">=</span> <span class="token number">0.0</span><span class="token number">.0</span><span class="token number">.0</span> dashboard_port <span class="token operator">=</span> <span class="token number">10003</span> dashboard_user <span class="token operator">=</span> admin dashboard_pwd <span class="token operator">=</span> admin allow_ports <span class="token operator">=</span> <span class="token number">10000</span><span class="token operator">-</span><span class="token number">50000</span> max_pool_count <span class="token operator">=</span> <span class="token number">15</span> max_ports_per_client <span class="token operator">=</span> <span class="token number">0</span>
<span class="token punctuation">[</span>common<span class="token punctuation">]</span>  bind_port <span class="token operator">=</span> <span class="token number">10000</span>  bind_udp_port <span class="token operator">=</span> <span class="token number">10001</span>  kcp_bind_port <span class="token operator">=</span> <span class="token number">10002</span>  vhost_http_port <span class="token operator">=</span> <span class="token number">10080</span>  token <span class="token operator">=</span> sfmam23tmmmfeti4  log_file <span class="token operator">=</span> <span class="token punctuation">.</span><span class="token operator">/</span>frps<span class="token punctuation">.</span>log  log_max_days <span class="token operator">=</span> <span class="token number">7</span>  log_level <span class="token operator">=</span> info  dashboard_addr <span class="token operator">=</span> <span class="token number">0.0</span><span class="token number">.0</span><span class="token number">.0</span> dashboard_port <span class="token operator">=</span> <span class="token number">10003</span> dashboard_user <span class="token operator">=</span> admin dashboard_pwd <span class="token operator">=</span> admin  allow_ports <span class="token operator">=</span> <span class="token number">10000</span><span class="token operator">-</span><span class="token number">50000</span>  max_pool_count <span class="token operator">=</span> <span class="token number">15</span>  max_ports_per_client <span class="token operator">=</span> <span class="token number">0</span> 
[common] bind_port = 10000 bind_udp_port = 10001 kcp_bind_port = 10002 vhost_http_port = 10080 token = sfmam23tmmmfeti4 log_file = ./frps.log log_max_days = 7 log_level = info dashboard_addr = 0.0.0.0 dashboard_port = 10003 dashboard_user = admin dashboard_pwd = admin allow_ports = 10000-50000 max_pool_count = 15 max_ports_per_client = 0
  1. 启动服务端的方案,我们一般需其后台运行
    5.1. Mac/Linux/Unix (./frps -c frps.ini &) 或者 nohup ./frps -c frps.ini &
    5.2. Mac/Linux/Unix 关闭ps -ef |grep frps |awk '{print $2}'|xargs kill -9 (找到进行id,kill掉即可)
    5.3. Windows 后台运行需要写个脚本 start_frpc.bat
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit .\frps.exe -c frps.ini
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit .\frps.exe -c frps.ini 
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit .\frps.exe -c frps.ini
  1. 客户端配置frpc.ini
<span class="token punctuation">[</span>common<span class="token punctuation">]</span> server_addr <span class="token operator">=</span> <span class="token number">111.114</span><span class="token number">.114</span><span class="token number">.114</span> server_port <span class="token operator">=</span> <span class="token number">10001</span> token <span class="token operator">=</span> sfmam23tmmmfeti4 log_file<span class="token operator">=</span> log<span class="token punctuation">.</span>txt <span class="token punctuation">[</span>my_pc_80<span class="token punctuation">]</span> <span class="token builtin">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span> local_port <span class="token operator">=</span> <span class="token number">80</span> remote_port <span class="token operator">=</span> <span class="token number">10080</span> <span class="token punctuation">[</span>my_pc_vhost_frontend<span class="token punctuation">]</span> <span class="token builtin">type</span><span class="token operator">=</span>tcp local_ip <span class="token operator">=</span> local<span class="token punctuation">.</span>frontend<span class="token punctuation">.</span>funshop<span class="token punctuation">.</span>io local_port<span class="token operator">=</span><span class="token number">80</span> remote_port<span class="token operator">=</span><span class="token number">10081</span> <span class="token punctuation">[</span>my_pc_ssh<span class="token punctuation">]</span> <span class="token builtin">type</span><span class="token operator">=</span>tcp local_ip <span class="token operator">=</span> <span class="token number">192.168</span><span class="token number">.1</span><span class="token number">.100</span> local_port<span class="token operator">=</span><span class="token number">22</span> remote_port<span class="token operator">=</span><span class="token number">10022</span>
<span class="token punctuation">[</span>common<span class="token punctuation">]</span>  server_addr <span class="token operator">=</span> <span class="token number">111.114</span><span class="token number">.114</span><span class="token number">.114</span>  server_port <span class="token operator">=</span> <span class="token number">10001</span>  token <span class="token operator">=</span> sfmam23tmmmfeti4  log_file<span class="token operator">=</span> log<span class="token punctuation">.</span>txt   <span class="token punctuation">[</span>my_pc_80<span class="token punctuation">]</span> <span class="token builtin">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span> local_port <span class="token operator">=</span> <span class="token number">80</span> remote_port <span class="token operator">=</span> <span class="token number">10080</span>  <span class="token punctuation">[</span>my_pc_vhost_frontend<span class="token punctuation">]</span> <span class="token builtin">type</span><span class="token operator">=</span>tcp local_ip <span class="token operator">=</span> local<span class="token punctuation">.</span>frontend<span class="token punctuation">.</span>funshop<span class="token punctuation">.</span>io local_port<span class="token operator">=</span><span class="token number">80</span> remote_port<span class="token operator">=</span><span class="token number">10081</span>  <span class="token punctuation">[</span>my_pc_ssh<span class="token punctuation">]</span> <span class="token builtin">type</span><span class="token operator">=</span>tcp local_ip <span class="token operator">=</span> <span class="token number">192.168</span><span class="token number">.1</span><span class="token number">.100</span> local_port<span class="token operator">=</span><span class="token number">22</span> remote_port<span class="token operator">=</span><span class="token number">10022</span> 
[common] server_addr = 111.114.114.114 server_port = 10001 token = sfmam23tmmmfeti4 log_file= log.txt [my_pc_80] type = tcp local_ip = 127.0.0.1 local_port = 80 remote_port = 10080 [my_pc_vhost_frontend] type=tcp local_ip = local.frontend.funshop.io local_port=80 remote_port=10081 [my_pc_ssh] type=tcp local_ip = 192.168.1.100 local_port=22 remote_port=10022
  1. 启动客户端,和启动服务端类似
    6.1. Mac/Linux/Unix (./frpc -c frpc.ini &) 或者 nohup ./frpc -c frpc.ini &
    6.2. Mac/Linux/Unix 关闭ps -ef |grep frpc |awk '{print $2}'|xargs kill -9 (找到进行id,kill掉即可)
    6.3. 对于windows系统可以写一个.bat脚本如下实现后台运行
<span class="token operator">%</span><span class="token number">1</span> mshta vbscript<span class="token punctuation">:</span>CreateObject<span class="token punctuation">(</span><span class="token string">"WScript.Shell"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>Run<span class="token punctuation">(</span><span class="token string">"%~s0 ::"</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span>FALSE<span class="token punctuation">)</span><span class="token punctuation">(</span>window<span class="token punctuation">.</span>close<span class="token punctuation">)</span><span class="token operator">&</span><span class="token operator">&</span>exit <span class="token punctuation">.</span>\frpc<span class="token punctuation">.</span>exe <span class="token operator">-</span>c frpc<span class="token punctuation">.</span>ini
<span class="token operator">%</span><span class="token number">1</span> mshta vbscript<span class="token punctuation">:</span>CreateObject<span class="token punctuation">(</span><span class="token string">"WScript.Shell"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>Run<span class="token punctuation">(</span><span class="token string">"%~s0 ::"</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span>FALSE<span class="token punctuation">)</span><span class="token punctuation">(</span>window<span class="token punctuation">.</span>close<span class="token punctuation">)</span><span class="token operator">&</span><span class="token operator">&</span>exit <span class="token punctuation">.</span>\frpc<span class="token punctuation">.</span>exe <span class="token operator">-</span>c frpc<span class="token punctuation">.</span>ini 
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit .\frpc.exe -c frpc.ini
  1. 浏览器访问111.114.114.114:10003可以查看连接情况。

原文链接:https://blog.csdn.net/sinat_34820292/article/details/88056890

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享