# tcp-port-mapping
**Repository Path**: chengciming/tcp-port-mapping
## Basic Information
- **Project Name**: tcp-port-mapping
- **Description**: 使用workerman开发的TCP端口映射项目
- **Primary Language**: PHP
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-04-25
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
TcpPortMapping
这是一个使用workerman框架开发的,针对内网环境TCP端口映射到外网环境指定端口。
亲,有在应用的同学请给个星星,有星星表示有人应用,好持续更新维护代码。
## 环境假设
1. 外网服务器:可运行PHP,映射后通过这台机访问。
2. 内网服务器:可运行PHP,连接外网服务器做转发,或者与目标服务器同一台。
3. 目标服务器:需要被映射到外网的服务器。
## 运行环境
1. PHP >= 7.0
2. **[Composer](https://getcomposer.org/)**
## 快速下载
### 下载:
```shell
[composer@localhost test]# composer create-project chengciming/tcp-port-mapping
```
### 启动:
```shell
[composer@localhost test]# cd tcp-port-mapping
[composer@localhost tcp-port-mapping]# php client start
[composer@localhost tcp-port-mapping]# php server start
```
## 配置
### 公共配置:Config/Config.php
```php
false,
/**
* 开启的协议类型
*
* 注意:每个类型对应***Conf.php文件配置,无配置等同未开启
*
*/
'protocol_support' => array(
'http',
'https',
'ssh',
),
/**
* 服务端配置 - 管道监听端口
*/
'channel_server'=>array(
'ipaddress'=>'0.0.0.0',
'port'=>10000
),
/**
* 基础配置
*/
'worker'=>array(
'client' => array(
'daemonize' => true, //是否后台运行
'worker_num' => 4, //工作进程数量
'name' => 'Proxy', //服务名称
'log_file' => ROOT_PATH . '/Storage/logs/proxy.client.log', //日记文件
'pid_file' => ROOT_PATH . '/Storage/pid/proxy.client.pid', //服务PID文件
'stdout_file' => '', //屏幕打印输出到文件,不设置或者为空则打印到频幕
),
'server' => array(
'daemonize' => true, //是否后台运行
'worker_num' => 4, //工作进程数量
'name' => 'Proxy', //服务名称
'log_file' => ROOT_PATH . '/Storage/logs/proxy.server.log', //日记文件
'pid_file' => ROOT_PATH . '/Storage/pid/proxy.server.pid', //服务PID文件
'stdout_file' => '', //屏幕打印输出到文件,不设置或者为空则打印到频幕
)
),
);
```
### 协议配置:Config/***Conf.php [Http、Https、Ssh等]
```php
'test1',
/**
* 代理服务器 - 客户端用的
*/
'channel_server'=>array(
'ipaddress'=>'127.0.0.1', // 客户端连接管道的目标IP,对应Config.php的channel_server.ipaddress
'port'=>10000 // 客户端连接管道的目标端口,对应Config.php的channel_server.port
),
/**
* 被代理服务器 - 客户端用的
*/
'proxy_client'=>array(
'ipaddress'=>'127.0.0.1', // 需要被映射出去的目标地址
'port'=>80 // 需要被映射出去的目标端口
),
/**
* 允许授权的授权码与端口 - 服务器用的
*/
'allow_auth' => array(
// 唯一码 => array(port => 端口)
'test1' => array(
'ipaddress' => '0.0.0.0',
'port' => 1231, // 外网端口
),
)
);
```
## 新增加协议
### 示例:telnet
#### 配置:
```
新增加telnet协议配置文件(可复制HttpConf.php):Config/TelnetConf.php
开启telnet协议:Config/Config.php --> protocol_support加telnet
```
#### 内核文件(可复制Http.php):
```
新增加telnet协议客户端处理文件:Application/Kernel/Protocol/Client/Telnet.php
新增加telnet协议服务端处理文件:Application/Kernel/Protocol/Server/Telnet.php
```
## 启动命令
### 安装依赖:
```shell
[root@localhost tcp-port-mapping]# composer install
```
### 客户端:
```shell
[root@localhost tcp-port-mapping]# php client start // 开启客户端服务
[root@localhost tcp-port-mapping]# php client stop // 关闭客户端服务
[root@localhost tcp-port-mapping]# php client restart // 重启客户端服务
[root@localhost tcp-port-mapping]# php client reload // 重载客户端服务
```
### 服务端:
```shell
[root@localhost tcp-port-mapping]# php server start // 开启服务端服务
[root@localhost tcp-port-mapping]# php server stop // 关闭服务端服务
[root@localhost tcp-port-mapping]# php server restart // 重启服务端服务
[root@localhost tcp-port-mapping]# php server reload // 重载服务端服务
```
## 运行过程
