nonikon/trp
GitHub: nonikon/trp
基于libuv的轻量级反向代理工具,支持SOCKS4/5代理和TCP/UDP端口映射,可通过多级链式架构穿透NAT访问隔离网络。
Stars: 16 | Forks: 3
# TRP - Tiny Reverse Proxy
## 功能
- SOCKS5 TCP/UDP 代理和 SOCKS4/SOCKS4a TCP 代理。
- Linux iptable 重定向 (TCP)。
- TCP/UDP 端口映射。
## 构建
如果您的系统上已经安装了 libuv,请使用以下命令:
```
mkdir build
cd build
cmake .. -DLIBUV_EMBEDDED=OFF
cmake --build .
```
否则,您需要先下载 libuv 源代码并解压,例如:
```
wget https://dist.libuv.org/dist/v1.46.0/libuv-v1.46.0.tar.gz
tar xf libuv-v1.46.0.tar.gz
mkdir build
cd build
cmake .. -DLIBUV_SRC_PATH=../libuv-v1.46.0
cmake --build .
```
您也可以选择直接从 [release](https://github.com/nonikon/trp/releases) 页面下载 x86_64 windows 和 linux 二进制文件。
## 架构
```
+--------------+ +--------------+
APPLICATION ---> | proxy-client | ---> | proxy-server | ---> REMOTE
+--------------+ | | |
socks.c/tunnel.c | v | +--------+
| server - | ---> | client | ---> REMOTE
+--------------+ +--------+
server.c client.c
```
## 使用示例
首先,在拥有公网 IP 地址的主机上启动 `server`:
```
./trp-server -s 0.0.0.0:1111 -x 0.0.0.0:2222 -k KEY_OF_SERVER
```
其次,在可以访问 `server` 的主机上启动 `client`:(假设上述 `server` 的 IP 地址是 1.2.3.4)
```
./trp-client -s 1.2.3.4:1111 -k KEY_OF_SERVER -d DEVID_OF_CLIENT -K KEY_OF_CLIENT
```
最后,根据需要在本地启动 `proxy-client`(应能访问 `server`)(参见下面的示例)。
### 通过 SOCKS4/SOCKS5 协议经由 `server` 访问网络
- 在本地启动一个 socks 服务器(监听 127.0.0.1:8080):
./trp-socks -b :8080 -x 1.2.3.4:2222 -k KEY_OF_SERVER
- 然后你可以使用支持 SOCKS 协议的应用程序通过 `server` (1.2.3.4) 访问网络,例如 `curl`:
curl -x socks5://127.0.0.1:8080 https://www.google.com
- 示意图:
+--------------+ +--------+
curl ---> | proxy-client | ---> | server | ---> www.google.com:443
+--------------+ +--------+
### 通过 SOCKS4/SOCKS5 协议经由 `client` 访问网络
- 在本地启动一个 socks 服务器(监听 127.0.0.1:8080):
./trp-socks -b :8080 -x 1.2.3.4:2222 -k KEY_OF_SERVER -d DEVID_OF_CLIENT -K KEY_OF_CLIENT
- 然后你可以使用支持 SOCKS 协议的应用程序通过 `client` (DEVID_OF_CLIENT) 访问网络,例如 `curl`:
curl -x socks5://127.0.0.1:8080 https://www.google.com
- 示意图:
+--------------+ +--------+ +--------+
curl ---> | proxy-client | ---> | server | ---> | client | ---> www.google.com:443
+--------------+ +--------+ +--------+
### 通过端口映射经由 `server` 访问网络
- 在本地启动一个隧道服务器(监听 127.0.0.1:8000):
./trp-tunnel -b :8000 -t 192.168.0.1:22 -x 1.2.3.4:2222 -k KEY_OF_SERVER
- 然后你可以通过 `server` (1.2.3.4) 访问 192.168.0.1 的 SSH 服务,例如:
ssh -p 8000 user@127.0.0.1
- 示意图:
+--------------+ +--------+
ssh ---> | proxy-client | ---> | server | ---> 192.168.0.1:22
+--------------+ +--------+
### 通过端口映射经由 `client` 访问网络
- 在本地启动一个隧道服务器(监听 127.0.0.1:8000):
./trp-tunnel -b :8000 -t :22 -x 1.2.3.4:2222 -k KEY_OF_SERVER -d DEVID_OF_CLIENT -K KEY_OF_CLIENT
- 然后你可以访问 `client` (DEVID_OF_CLIENT) 的 SSH 服务,例如:
ssh -p 8000 user@127.0.0.1
- 示意图:
+--------------+ +--------+ +--------+
ssh ---> | proxy-client | ---> | server | ---> | client | ---> 127.0.0.1:22
+--------------+ +--------+ +--------+
### 通过端口映射 (UDP) 经由 `server` 访问网络
- 在本地启动一个隧道服务器(UDP 监听 127.0.0.1:5353):
./trp-tunnel -b :5353 -t 8.8.8.8:53 -U 1 -x 1.2.3.4:2222 -k KEY_OF_SERVER
- 然后你可以通过 `server` (1.2.3.4) 使用 `8.8.8.8` 进行 DNS 解析,例如:
dig -p 5353 @127.0.0.1 www.google.com
### 通过端口映射 (UDP) 经由 `client` 访问网络
- 在本地启动一个隧道服务器(UDP 监听 127.0.0.1:5353):
./trp-tunnel -b :5353 -t 8.8.8.8:53 -U 1 -x 1.2.3.4:2222 -k KEY_OF_SERVER -d DEVID_OF_CLIENT -K KEY_OF_CLIENT
- 然后你可以通过 `client` (DEVID_OF_CLIENT) 使用 `8.8.8.8` 进行 DNS 解析,例如:
dig -p 5353 @127.0.0.1 www.google.com
注意:支持通过 `-C` 命令选项使用配置文件,参见 [trp.ini](trp.ini)。
## 许可证
本项目基于 MIT 许可证授权 - 详情请参见 [LICENSE](LICENSE) 文件。
标签:Bash脚本, iptables, LangChain, libuv, SOCKS4, SOCKS5, TCP代理, UDP代理, 内网穿透, 反向代理, 客户端加密, 流量转发, 端口映射, 网络工具, 网络通信, 网络隧道, 轻量级, 远程访问