基于netty的TCP/Http请求转发代理程序
在特定的网络环境或安全审计要求下,我们可能会面临网络被限定为单向访问的情况,本工具可以实现在单向网络中设置代理从而实现双向访问的目的。可简单用作内网穿透工具。也可以配置成LVS负载均衡服务
- netty-高性能NIO通信框架
- tcp/ip通信基础知识
-
将项目克隆到本地
-
修改配置文件
项目包含两个独立配置文件,分别为
netty-nat
|--netty-client
|----properties.yml
|--netty-server
|----properties.yml-
client对应properties配置:
#内部连接池大小,内部连接只需转发外部与被代理服务间业务数据,可重用通道 internal: channel: init: num: 10 #服务端ip和端口 server: host: 127.0.0.1 port: 8083 #隧道信息,一条完整的外部>>服务端>>客户端>>被代理服务间的通路称为隧道 tunnel: #tunnel示例,代理本地的mysql数据库服务和nacos服务 #服务端监听端口 - serverPort: 9000 #客户端连接的被代理服务端口 clientPort: 3306 #客户端连接的被代理服务端口 clientHost: 127.0.0.1 - serverPort: 9001 clientPort: 8848 clientHost: 127.0.0.1 #接入请求的接入密码 password: '123456'
-
server对应properties配置:
#内部通信使用的端口,需要与客户端的internal.server.port值保持一致 internal: server: port: 8083 #接入请求的接入密码 password: '123456'
-
-
打包
项目中使用maven管理第三方依赖,打包使用maven-jar-plugin,自定义打包行为定义在项目根目录的assembly.xml中,打包时执行:
mvn clean package -Dmaven.test.skip=true
-
部署
项目打包后获得 项目名称-版本号.zip
解压后获得- 项目主运行jar 项目名称-版本号.jar
- 项目第三方包依赖目录 libs
- 项目配置文件目录 config
将解压后文件及目录保持当前层级关系上传至服务器
- 启动
- 直接运行jar
调整resources目录下的log4j2.xml和properties.yml为当前服务器相关配置,执行打包编译流程,获得target目录下的tar文件并解压 运行java -jar nat-server-1.0-SNAPSHOT.jar &
启动服务端
观察到 InternalServer started on port xxxx......即表示服务启动成功
运行java -jar nat-client-1.0-SNAPSHOT.jar &
启动客户端 - docker启动 调整resources目录下的log4j2.xml和properties.yml为当前服务器相关配置,执行打包编译流程 命令行执行docker-compose up -d,在docker中确认容器的运行情况
- 直接运行jar