• C#实现----FastTunnel搭建的内网穿透


    FastTunnel - 打造人人都能搭建的内网穿透工具

    License Nuget

    FastTunnel是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。
    与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架,任何人都可以基于该框架二次开发,你可以直接通过nuget安装依赖进行开发,当然它也是开箱即用的工具。

    实现原理

    《FastTunnel-内网穿透原理揭秘》

    荣获GVP开源项目

    FastTunnel荣获开源中国2020最有价值开源项目

    开源仓库地址

    github: https://github.com/SpringHgui/FastTunnel
    gitee: https://gitee.com/Hgui/FastTunnel
    官网:https://suidao.io

    什么是内网穿透?

    一般来说,如果你在内网部署一个网站或应用,也只有处于内网之中的其他网络设备才能访问;但如果你想让公网上任何人都可以访问你内网的应用,则必须要采取一些手段,内网穿透在这种背景下应用而生。

    FastTunnel能够做什么?

    • 家中建站
    • 微信开发
    • 远程桌面
    • erp互通
    • svn代码仓库
    • 端口转发
    • iot物联网
    • 联机游戏
      等等场景,不局限以上

    搭建属于自己的内网穿透平台

    1.在仓库的 releases 页面下载对应的程序
    2.根据自己的需求修改客户端以及服务端配置文件appsettings.json
    3.服务端运行FastTunnel.Server
    4.客户端运行FastTunnel.Cient (客户端可运行在内网任何一台设备上)

    配置示例

    用自定义域名访问内网web服务

    例如你拥有一台云服务器,公网ip地址为 110.110.110.110 ,同时你有一个域名 suidao.io,你希望访问 test.suidao.io可以访问你自己电脑上部署的一个网站。
    你需要新增一个域名地址的DNS解析,类型为A,名称为 * , ipv4地址为 110.110.110.110 ,这样 *.abc.com的域名均会指向110.110.110.110的服务器,由于FastTunnel默认监听的http端口为1270,所以要访问http://test.abc.com:1270。
    服务端配置文件:config/appsettings.json

    "ServerSettings": {
        // 必选 默认值
        "BindAddr": "0.0.0.0",
        // 必选 默认值
        "BindPort": 1271,
        // 自定义域名web穿透必须
        "WebDomain": "suidao.io",
        // 服务监听的端口号, 访问自定义域名站点时url为 http://{SubDomain}.{Domain}:{ProxyPort_HTTP}/
        // web穿透必须
        "WebProxyPort": 1270,
        // 可选,ngixn反向代理后可省略域名后的端口号进行访问
        "WebHasNginxProxy": false,
        // 可选,访问白名单,不在白名单的ip拒绝
        "WebAllowAccessIps": [],
        // 可选,是否开启SSH,禁用后不处理SSH类型端口转发.默认false。
        "SSHEnabled": true
      }
    

    客户端配置文件:

    
    "ClientSettings": {
        "Common": {
          // 服务端公网ip, 对应服务端配置文件的 BindAddr,支持域名
          "ServerAddr": "test.cc",
          // 服务端通信端口,对应服务端配置文件的 BindPort
          "ServerPort": 1271
        },
        "Webs": [
          {
            // 本地站点所在内网的ip
            "LocalIp": "127.0.0.1",
            // 站点监听的端口号
            "LocalPort": 8080,
            // 子域名, 访问本站点时的url为 http://{SubDomain}.{Domain}:{ProxyPort_HTTP}/
            "SubDomain": "test", // test.test.cc
          }
        ]
      }
    

    如何去掉域名后的端口号

    在服务器端部署nginx,通过nginx反向代理将80端口流量转发至1270端口,nginx的配置示例如下:

    
    http {
        # 添加resolver 
        resolver 8.8.8.8;
    
        # 设置 *.abc.com 转发至1270端口
        server {
          server_name  *.abc.com;
          location / {
             proxy_pass http://$host:1270;
             proxy_set_header   Host             $host;
             proxy_set_header   X-Real-IP        $remote_addr;
             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
          }
    
          # 可选
          error_log /var/log/nginx/error_ft.log error;
        }
    }
    

    配置端口转发

    假设内网有一个mysql服务端口为3306,在内网的ip地址为192.168.1.100,你希望访问suidao.io:33306端口的请求转发至内网的mysql上,则需要如下配置:
    1.服务端配置文件不变
    2.客户端配置如下

    "ClientSettings": {
        "Common": {
          // 服务端公网ip, 对应服务端配置文件的 BindAddr,支持域名
          "ServerAddr": "test.cc",
    
          // 服务端通信端口,对应服务端配置文件的 BindPort
          "ServerPort": 1271
        },
        "Webs": [
        ],
    
        /**
         * ssh穿透,ssh访问内网主机
         * 访问方式 #ssh -oPort=12701 {root}@{ServerAddr}
         * ServerAddr 填入服务端ip,root对应内网用户名
         */
        "SSH": [
          {
            "LocalIp": "192.168.1.100",
            "LocalPort": 3306,
            "RemotePort": 33306
          }
        ]
      }
    

    远程内网电脑

    windows:只需要将上一步中的3306端口换成3389,
    linux:只需要将上一步中的3306端口换成22

    结语

    相信聪明的你已经看懂了如何配置,以及每个参数代表的意义,如果还有不懂的地方,可以提issue给作者。有兴趣的朋友可以去clone下来耍耍,给作者提提需求、bug,如果能提交代码一起参与开发改进就更完美了。

    有兴趣的可加qq群

    出处:https://www.cnblogs.com/springhgui/archive/2021/07/13/15005329.html

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    [转]ASP.Net+XML打造留言薄
    [导入]如何构造一个C#语言的爬虫蜘蛛程序
    [导入]CSS基本布局16例
    [导入]ASP.NET26个常用性能优化方法
    javascript控制cookies及在跳出本页给出提示,是否放弃操作!!
    RunOnBeforeUnload()
    [导入]网易娱乐频道也在用风讯CMS
    etcd集群配置
    openstack上传镜像
    Ambari 节点坏掉不要的节点 无法删除解决方法
  • 原文地址:https://www.cnblogs.com/mq0036/p/15029706.html
Copyright © 2020-2023  润新知