Skip to content

Net Tunnel 是基于 Netty 开发,开源,安全,高效,稳定的内网穿透和反向代理工具,提供没有公网IP希望暴露内网服务的解决方案。 Net Tunnel is an open source, safe, efficient, and stable intranet penetration and reverse proxy tool developed based on Netty, providing a solution for exposing intranet services without public IP.

License

Notifications You must be signed in to change notification settings

lin1810/NetTunnel

Repository files navigation

关于 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

About

Net Tunnel 是基于 Netty 开发,开源,安全,高效,稳定的内网穿透和反向代理工具,提供没有公网IP希望暴露内网服务的解决方案。 Net Tunnel is an open source, safe, efficient, and stable intranet penetration and reverse proxy tool developed based on Netty, providing a solution for exposing intranet services without public IP.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages