1 Star 1 Fork 0

lyndon shi / NetTunnel

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

关于 Net Tunnel

Net Tunnel 是基于 Netty 开发,开源,安全,高效,稳定的内网穿透和反向代理工具,提供没有公网IP希望暴露内网服务的解决方案。

Net Tunnel 通过公网和内网之间创建数个加密的长连接隧道,将公网请求转发到内网主机上服务端口,实现内网服务的暴露和共享。

GitHub Gitee

包括:

  • 服务器端:部署在公网环境,暴露内网服务端口
  • 客户端:部署在内网,用于转发服务

如何使用服务端镜像

如果您没有云服务器,可以看看腾讯云 30~50元首单的特价服务器阿里云 服务器0元试用 首购低至0.9元/月起

默认情况下没有配置通道实例,可以在后续增加。

Docker 单容器部署

在安装了 Docker 环境的服务器运行如下代码:

docker run -d --name nt-server \
    -v ./server_config:/NT/config \
    -p 9070:9070 \
    --restart unless-stopped \
    lyndonshi/net-tunnel-server:latest

Docker-compose

请确保服务器支持docker和docker-compose

  1. 创建 docker-compose.yml 文件
version: "3.2"
services:
  nt-server:
    image: lyndonshi/net-tunnel-server:latest
    container_name: nt-server
    volumes:
      - ${PWD}/server_config:/NT/config
    ports:
      - "9070:9070"
    restart: unless-stopped
  1. 执行
docker-compose up -d

以上两种方式部署完成后,将会创建名为nt-server的容器,并自动在 server_config 目录下生成配置和证书。

server_config 目录结构

文件 备注
application*.yml 配置文件,正常情况下无需修改,每次重启都会覆盖配置
ca.* Certificate Authority 证书,每次重启若不存在则会重新创建,需要和客户端的 ca 证书保持一致
server.* 使用 CA 签名后的Server Side 证书,每次重启若不存在则会重新创建
client.* 使用 CA 签名后的Client Side 证书,每次重启若不存在则会重新创建
client_config 自动生成client side 的配置文件

启动后默认开启9070端口,用于接收来着net-tunnel 客户端的连接。请参考 docker/docker-compose 暴露9070端口

创建通道实例

配置项

$ docker run --rm -it lyndonshi/net-tunnel-server -h
Usage: entrypoint.sh [-opt] [command]
Options (fields in '[]' are optional, '<>' are required):
    -h          This help
    -i "<name;port>[;slidingWindowSize]"
                Configure a tunnel
                required arg: "<name>;<port>"
                <name> tunnel name
                <port> tunnel bind port
                NOTE: for the default value, just leave blank
                [slidingWindowSize] default:'10'

使用-i增加通道实例,服务器需要至少1个通道实例,否则会启动失败。

通道实例参数<name;port>为必须输入选项,其中 name 为通道名称,port 为映射在服务端的端口。

例子

创建如下实例:

通道实例名 端口 备注
nginx 443
ssh 822 22端口会被宿主机占用,请修改其他端口代替

⚠️留意通过-pports 映射端口

Docker

docker run -d --name nt-server \
    -v ./server_config:/NT/config \
    -p 9070:9070 -p 443:443 -p 822:822 \
    --restart unless-stopped \
    lyndonshi/net-tunnel-server:latest \
    -i "nginx;443" -i "ssh;822"

Docker-compose

version: "3.2"
services:
  nt-server:
    image: lyndonshi/net-tunnel-server:latest
    container_name: nt-server
    volumes:
      - ${PWD}/server_config:/NT/config
    ports:
      - "9070:9070"
      - "443:443"
      - "822:822"
    restart: unless-stopped
    command: ["-i", "nginx;443", "-i", "ssh;822"]

如何使用客户端镜像

默认情况下没有配置通道实例,可以在后续增加。

Docker 单容器部署

docker run -d --name nt-client \
    -v ./client_config:/NT/config \
    --restart unless-stopped \
    lyndonshi/net-tunnel-client:latest

Docker-compose

version: "3.2"
services:
  nt-client:
    image: lyndonshi/net-tunnel-client:latest
    container_name: nt-client
    volumes:
      - ${PWD}/client_config:/NT/config
    restart: unless-stopped

client_config 目录结构

请拷贝服务端 server_config/client_config下的所有文件到客户端容器目录/NT/config下。如上容器所挂载的 client_config 目录

文件包括:

文件 备注
ca.crt Certificate Authority 证书,用于验证服务端,建立可信的通道
client.crt CA 签署过的客户端证书
client_pkcs8.key 客户端private key

客户端中的client.crt 必须通过 ca 证书签署过,否则通道将创建失败。

若服务器的 ca 证书发生变化,请重复以上拷贝步骤。

配置

docker run --rm -it lyndonshi/net-tunnel-client -h
Usage: entrypoint.sh [-opt] [command]
Options (fields in '[]' are optional, '<>' are required):
    -h          This help
    -i "<name;address:port>[;slidingWindowSize]"
                Configure a tunnel
                required arg: "<name>;<address:port>"
                <name> tunnel name
                <address:port> target service IP address and port
                NOTE: for the default value, just leave blank
                [slidingWindowSize] default:'10'
    -s "<server address:port>"
                required arg: "<server address:port>"
                NOTE: for the default value, just leave blank
                <server address:port> server side IP address and port default:'127.0.0.1:9070'

增加通道实例

通过-i增加通道实例。参数格式:<name;address:port>[;slidingWindowSize]

其中<name;address:port>为必须输入选项

name:服务端的实例一致

address:port:映射服务的地址和端口。例如映射192.168.0.2的 ssh 服务,则配置应该是192.168.0.2:22

设置服务器配置

通过-s设置服务器地址。参数格式:<server address:port>

例子

创建如下实例:

服务端地址:172.17.0.2:9070

通道实例名 IP 地址 端口
nginx 192.168.0.2 443
ssh 192.168.0.3 22

Docker

docker run -d --name nt-client \
    -v ./client_config:/NT/config \
    --restart unless-stopped \
    lyndonshi/net-tunnel-client:latest \
    -i "nginx;192.168.0.2:443" -i "ssh;192.168.0.3:22" -s "172.17.0.2:9070"

Docker-compose

version: "3.2"
services:
  nt-client:
    image: lyndonshi/net-tunnel-client:latest
    container_name: nt-client
    volumes:
      - ${PWD}/client_config:/NT/config
    restart: unless-stopped
    command:
      - "-i"
      - "nginx;192.168.0.2:443"
      - "-i"
      - "ssh;192.168.0.3:22"
      - "-s"
      - "172.17.0.2:9070"

注意事项

  • ⚠️http :报文在网络中是明文传输的,有被窃取篡改的风险,建议启用 https

  • ⚠️ssh :避免暴力破解,建议禁用 root 登录,并使用 SSH 密钥连接

授权

本项目禁止商用(包括但不限于搭建后挂广告或售卖会员、打包后上架商店销售等),在非商用的情况下遵循MIT license,当两者冲突时,以非商用原则优先。

问题

如果您对此有任何问题或疑问,请与我联系 GitHub issue

MIT License Copyright (c) 2023 lin1810 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Net Tunnel 是基于 Netty 开发,开源,安全,高效,稳定的内网穿透和反向代理工具,提供没有公网IP希望暴露内网服务的解决方案。 展开 收起
Java 等 4 种语言
MIT
取消

发行版 (2)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/lin1810/NetTunnel.git
git@gitee.com:lin1810/NetTunnel.git
lin1810
NetTunnel
NetTunnel
main

搜索帮助

344bd9b3 5694891 D2dac590 5694891