Skip to content

Commit

Permalink
add readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
lin1810 committed May 17, 2023
1 parent 856b863 commit c667e79
Show file tree
Hide file tree
Showing 2 changed files with 568 additions and 0 deletions.
283 changes: 283 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
# 关于 Net Tunnel

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

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



[GitHub](https://github.com/lin1810/NetTunnel) [Gitee](https://gitee.com/lin1810/NetTunnel)

包括:

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



# 如何使用服务端镜像

如果您没有云服务器,可以看看[腾讯云 30~50元首单的特价服务器](https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=df09cb80975a46e4aeef9a07e6a5bf78&from=console)[阿里云 服务器0元试用 首购低至0.9元/月起](https://www.aliyun.com/minisite/goods?userCode=69jhyszs)

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

## Docker 单容器部署

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

```bash
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 文件

```yaml
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
```
2. 执行
```bash
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`端口

## 创建通道实例

### 配置项

```bash
$ 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端口会被宿主机占用,请修改其他端口代替 |

> ⚠️留意通过`-p``ports` 映射端口

#### Docker

```bash
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

```yaml
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 单容器部署
```bash
docker run -d --name nt-client \
-v ./client_config:/NT/config \
--restart unless-stopped \
lyndonshi/net-tunnel-client:latest
```

## Docker-compose

```yaml
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`下。

文件包括:

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

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

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

## 配置

```bash
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

```bash
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

```yaml
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](https://github.com/lin1810/NetTunnel/blob/main/LICENSE),当两者冲突时,以非商用原则优先。



# 问题

如果您对此有任何问题或疑问,请与我联系 [GitHub issue](https://github.com/lin1810/NetTunnel/issues)。

Loading

0 comments on commit c667e79

Please sign in to comment.