# vproxy **Repository Path**: mirrors/vproxy ## Basic Information - **Project Name**: vproxy - **Description**: vproxy 是一个零依赖的 tcp 负载均衡器,仅需要 java8 就可以运行 - **Primary Language**: Java - **License**: MIT - **Default Branch**: dev - **Homepage**: https://www.oschina.net/p/vproxy - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2019-02-12 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vproxy [![Build Status](https://github.com/wkgcass/vproxy/actions/workflows/ci.yaml/badge.svg?branch=dev)](https://github.com/wkgcass/vproxy/actions/workflows/ci.yaml) ## 简介 VProxy是一个零依赖的负载均衡器和SDN虚拟交换机。本项目仅需要Java 22即可运行。 1) clone,2) 编译,3) 运行! ## 特性 1. TCP和TLS负载均衡 2. HTTP/1.x和HTTP/2负载均衡,支持根据Host分发请求 3. 支持其他协议的负载均衡,例如grpc, dubbo 4. Socks5服务 5. DNS服务,支持A|AAAA记录 6. 与Kubernetes整合 7. 封装好的针对特定场景的应用,例如`WebSocksProxyAgent`和`WebSocksProxyServer` 8. 支持完整TCP/IP协议栈的SDN虚拟交换机 ## 构建
使用已构建的版本
查看 [release page](https://github.com/wkgcass/vproxy/releases). #### For linux 使用release页面中最新的`vproxy-linux`二进制文件。 或者 使用`jlink`打包的运行时文件:点[这里](https://github.com/wkgcass/vproxy/releases/download/1.0.0-BETA-12/vproxy-runtime-linux.tar.gz)下载。 #### For macos 使用release页面中最新的`vproxy-macos`二进制文件。 #### For windows Java运行时可以从[这里](https://adoptium.net/releases.html?variant=openjdk22&jvmVariant=hotspot)下载。 #### For musl 使用`jlink`打包的运行时文件:点[这里](https://github.com/wkgcass/vproxy/releases/download/1.0.0-BETA-12/vproxy-runtime-musl.tar.gz)下载。
打包前置需求 运行如下命令初始化submodules以及运行一些其他的初始化工作: ```shell make init ```
打jar包
``` ./gradlew clean shadowjar java -jar build/libs/vproxy.jar -Deploy=HelloWorld ```
jlink
``` make jlink ./build/image/bin/vproxy -Deploy=HelloWorld ```
docker
``` # make docker docker run -it --rm vproxyio/vproxy -Deploy=HelloWorld ```
graal native-image
``` make image ./vproxy -Deploy=HelloWorld ```
native fds impl
仅支持macos(bsd)/linux。 ``` make vfdposix java -Dvfd=posix -Djava.library.path=./base/src/main/c -jar build/libs/vproxy.jar -Deploy=HelloWorld ``` 此外,Windows有一个特别版本用于支持Tap设备:`-Dvfd=windows`,但是普通fd和事件循环依旧是jdk selector channel. ``` make vfdwindows java -Dvfd=windows -Djava.library.path=./base/src/main/c -jar build/libs/vproxy.jar -Deploy=HelloWorld ``` Windows TAP依赖OpenVPN TAP Driver。MacOS TAP依赖tuntaposx。 MacOS TUN、Linux TAP和TUN均无特殊依赖。
xdp
推荐使用5.10(或者至少5.4)内核来启用switch模块的xdp支持。 如果使用比较低的版本,则无法在不同xdp网口之间共享umem。 要编译xdp,你需要这些软件包:`apt-get install -y linux-headers-$(uname -r) build-essential libelf-dev clang llvm`,然后执行: ``` make vpxdp ``` 在非Linux平台下,可在容器中编译: ``` make vpxdp-linux ```
测试功能
执行测试用例: ``` ./gradlew runTest ``` 在docker中执行测试用例: ``` make dockertest ``` 测试vswitch, docker network plugin, vpctl, k8s controller: ```shell # 需要事先安装virtualbox cd ./misc/auto-setup/ ./auto-setup.sh ./auto-verify.sh ```
ui
vproxy提供了一些ui工具 ```shell ./gradlew ui:jar java -cp ./ui/build/libs/vproxy-ui.jar $mainClassName ``` 目前可用的ui工具: 1. `io.vproxy.ui.calculator.CalculatorMain`: IPv4网段计算器
## 目标 * 零依赖: 所有依赖均来自vproxy子项目。 * 简单:代码简单易懂。 * 运行时可修改:更新配置不需要重启。 * 高效:性能是首要目标之一。 * TCP负载均衡:支持TCP以及一些基于TCP的协议,也允许你使用自己的协议。 * Kubernetes:将vproxy资源整合到k8s中。 * SDN:根据流表和路由规则修改、转发网络包。 ## 如何使用
作为库使用
**gradle** ```groovy implementation group: 'io.vproxy', name: 'vproxy-adaptor-netty', version: '1.0.0-BETA-12' // 可用的artifact有:dep, base, adaptor-netty, adaptor-vertx ``` **maven** ```xml io.vproxy adaptor-netty 1.0.0-BETA-12 ``` **module-info.java** ```java requires io.vproxy.dep; requires io.vproxy.base; requires io.vproxy.adaptor.netty; requires io.vproxy.adaptor.vertx; ``` **netty** ```java var acceptelg = new VProxyEventLoopGroup(); var elg = new VProxyEventLoopGroup(4); var bootstrap = new ServerBootstrap(); bootstrap .channel(VProxyInetServerSocketChannel.class) .childHandler(new ChannelInitializer<>() { @Override protected void initChannel(Channel ch) { ChannelPipeline p = ch.pipeline(); p.addLast(new HttpServerCodec()); p.addLast(new HttpHelloWorldServerHandler()); } }); bootstrap.group(acceptelg, elg); bootstrap.bind(hostname, port).sync(); ```
在K8S中使用vproxy
添加crd并启动vproxy和controller ``` kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/crd.yaml kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/k8s-vproxy.yaml ``` 启动示例应用 ``` kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/cr-example.yaml ``` 详细信息可见[这里](https://github.com/vproxy-tools/vpctl/blob/master/README.md)
vpctl
我们提供一个命令行客户端应用,来帮助你操作vproxy实例。你可以参考[vpctl的仓库](https://github.com/vproxy-tools/vpctl)以获取更多信息。 该工具经过完整的测试,并且非常简单易用。该工具的仓库里提供了一些例子供参考。
简易模式
你可以用一行命令启动一个简单的负载均衡: ``` java -Deploy=Simple -jar vproxy.jar \ bind {port} \ backend {host1:port1,host2:port2} \ [ssl {path of cert1,cert2} {path of key}] \ [protocol {...}] \ ``` 可以输入`help`检查参数列表。
标准模式
使用`help`查看启动参数。 在启动vproxy后,你可以输入`System:`来运行系统指令,你可以创建`http-controller`和`resp-controller`。后续则可以使用`curl`或者`redis-cli`来操作该vproxy实例。当然你也可以直接通过标准输入(stdin)来操作vproxy实例。 查看[command.md](https://github.com/wkgcass/vproxy/blob/master/doc/command.md)和[api文档](https://github.com/wkgcass/vproxy/blob/master/doc/api.yaml)以获取更多信息。
## 文档 * [how-to-use.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/how-to-use.md): 如何使用配置文件和controller。 * [api.yaml](https://github.com/wkgcass/vproxy/blob/dev/doc/api.yaml): http-controller的api文档(swagger格式)。 * [lb-example.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/lb-example.md): 关于TCP负载均衡的一个使用例子。 * [architecture.md](https://github.com/wkgcass/vproxy/blob/master/doc/architecture.md): 架构相关。 * [extended-app.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/extended-app.md): 扩展应用的使用方式。 * [websocks.md](https://github.com/wkgcass/vproxy/blob/master/doc/websocks.md): The WebSocks Protocol. * [vproxy-kcp-tunnel.md](https://github.com/wkgcass/vproxy/blob/master/doc/vproxy-kcp-tunnel.md): The KCP Tunnel Protocol. * [using-application-layer-protocols.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/using-application-layer-protocols.md): 关于如何使用(自定义的)应用层协议。 * [vpws-direct-relay.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/vpws-direct-relay.md): 如何使用`vpws-agent`的`direct-relay`功能。 ## 产品 * [VProxy软交换(vpss)](https://github.com/vproxy-tools/vpss): 一个家用的软路由(交换机)。 ## 贡献 目前只有`我`自己在维护这个项目。希望能有更多人加入 :) 感谢曾经提交过PR的贡献者,见[CONTRIB](https://github.com/wkgcass/vproxy/blob/master/CONTRIB.md)。 ## 赞助商 [本项目 CDN 加速及安全防护由 Tencent EdgeOne 赞助](https://edgeone.ai/zh?from=github) [![edgeone](https://raw.githubusercontent.com/wkgcass/vproxy/refs/heads/dev/doc/edgeone.png)](https://edgeone.ai/zh?from=github)