Skip to content

Latest commit

 

History

History
276 lines (190 loc) · 7.92 KB

README.md

File metadata and controls

276 lines (190 loc) · 7.92 KB

关于 Net Tunnel

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

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

GitHub Gitee

包括:

  • 服务器端:部署在公网环境,暴露内网服务端口
  • 客户端:部署在内网,用于转发服务
  • 基于 ip 区域的访问策略(ip2region) 参考:https://gitee.com/lionsoul/ip2region

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