# NeoLink
**Repository Path**: Ceroxe/NeoLink
## Basic Information
- **Project Name**: NeoLink
- **Description**: 一款简单易用的高性能Java TCP 内网穿透客户端
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2025-10-12
- **Last Updated**: 2025-12-10
## Categories & Tags
**Categories**: networklib
**Tags**: None
## README
# NeoLink
> **内网穿透客户端(NeoLink)** — 使用 Java 21 开发,支持 TCP 和 UDP 协议的内网穿透。
> 自 4.7.0 版本开始,同步支持 TCP UDP
> 推荐的场景:RDP 内网穿透,MC 服务器内网穿透,HTTP FileServer 等等

[](#许可证)





---
## 说明(概览)
NeoLink 是一个轻量级的内网穿透客户端,用于将本地 TCP/UDP 服务(例如 Minecraft 服务器)暴露给公网 NeoProxyServer。项目同时提供命令行与 JavaFX GUI 两种运行模式,并支持通过 HTTP/SOCKS 代理访问本地或远端服务。客户端包含自动重连、心跳检测、日志记录与远程更新下载功能。
> **重点**:请仔细阅读 eula.txt 中声明的限制
>EXE 版本使用 Graalvm 构建原生镜像,理论上不需要 Java 环境运行
---

## ✨ 特性
- **Java 21 驱动**:充分利用现代 Java 特性,性能更优。
- **通用 TCP/UDP 支持**:几乎所有类型的服务均可穿透。
- **双模式运行**:命令行(CLI)适合服务器部署,图形界面(GUI)适合新手。
- **自动重连**:连接断开后自动重试,保障服务高可用。
- **代理支持**:支持 HTTP/SOCKS5 代理连接 NeoProxyServer 或本地服务。
- **多语言**:自动识别系统语言(中/英),也可通过参数强制指定。
- **自动更新**:服务端可推送新版本,Windows 下自动下载并重启。
- **日志记录**:所有操作自动记录到 `logs/` 目录。
- **心跳保活**:维持长连接,防止 NAT 超时断开。
- **参数化启动**:支持通过命令行参数直接指定密钥和端口,实现一键启动。
---
## 🚀 快速开始
* Windows11 支持 EXE 启动(采用 Graalvm 构建,无需 Java 环境)
* Release 界面提供了环境捆绑版(仅支持 Windows),是电脑小白使用 NeoLink 最方便的选择,避免折腾
* 其他平台仅支持 Java 21 以上的版本启动
* 支持通过命令行参数直接指定密钥和本地端口,实现一键启动
### **获取客户端:** 从本项目的 "Releases" 页面下载最新的客户端
### 命令行模式(Terminal)
将构建后的 JAR(举例 `NeoLink-XXXX.jar`)放到工作目录并运行(强制制定中文):
```bash
java -jar NeoLink-XXXX.jar --nogui --zh-cn
# 可选参数追加到后面
# --output-file=path/to/logfile.log 将日志写入指定文件
# --key=... 访问密钥
# --local-port=... 本地要被穿透的端口
# --debug 打印调试信息(异常栈)
# --no-color 关闭 ANSI 颜色输出
# --en-us / --zh-cn 指定语言
# --nogui 禁用 JavaFX GUI 启动
# --gui 使用 JavaFX GUI 启动 (默认启用)
# --disable-tcp 禁用 TCP 连接
# --disable-udp 禁用 UDP 连接
```
### 一键启动(GUI模式)
```bash
# 使用 GUI 并直接指定密钥和端口,实现一键启动
java -jar NeoLink-XXXX.jar --zh-cn --key=你的访问密钥 --local-port=本地端口号
# 或者使用 EXE 文件
NeoLink-XXXX.exe --zh-cn --key=你的访问密钥 --local-port=本地端口号
```
### 一键启动(命令行模式)
```bash
# 使用命令行模式并直接指定密钥和端口,实现一键启动
java -jar NeoLink-XXXX.jar --nogui --zh-cn --key=你的访问密钥 --local-port=本地端口号
```
### 🖥️构建项目
```bash
git clone https://github.com/CeroxeAnivie/PlethoraAPI
mvn install
git clone https://github.com/NeoLinkProxy/NeoLink.git
cd NeoProxyServer
mvn clean package
```
### 📁配置文件(`config.cfg`)
第一次运行时程序会在当前工作目录创建 `config.cfg`(如果不存在)。默认内容如下(也可直接在仓库中保存此文件):
```
#把你要连接的 NeoServer 的域名或者公网 ip 放到这里来
#Put the domain name or public network ip of the NeoServer you want to connect to here
REMOTE_DOMAIN_NAME=localhost
#设置是否启用自动更新
#Enable or disable automatic updates
ENABLE_AUTO_UPDATE=true
#如果你不知道以下的设置意味着什么,请你不要改变它
#If you don't know what the following setting means, please don't change it
LOCAL_DOMAIN_NAME=localhost
HOST_HOOK_PORT=44801
HOST_CONNECT_PORT=44802
#设置用来连接本地服务器的代理服务器ip和端口,示例:socks->127.0.0.1:7890 如果需要登录则提供密码, 格式: ip:端口@用户名:密码 示例:socks->127.0.0.1:7890@Ceroxe;123456 如果不需要去请留空
#Set the proxy server IP address and port to connect to the on-premises server,Example: socks->127.0.0.1:7890 Provide password if login is required, Format: type->ip:port@username:password Example: socks->127.0.0.1:7890@Ceroxe;123456 If you don't need to go, leave it blank
PROXY_IP_TO_LOCAL_SERVER=
#设置用来连接 NeoProxyServer 的代理服务器ip和端口,示例:socks->127.0.0.1:7890 如果需要登录则提供密码, 格式: ip:端口@用户名:密码 示例:socks->127.0.0.1:7890@Ceroxe;123456
#Set the proxy server IP address and port to connect to the NeoProxyServer,Example: socks->127.0.0.1:7890 Provide password if login is required, Format: type->ip:port@username:password Example: socks->127.0.0.1:7890@Ceroxe;123456 If you don't need to go, leave it blank
PROXY_IP_TO_NEO_SERVER=
#设置发送心跳包的间隔,单位为毫秒
#Set the interval for sending heartbeat packets, in milliseconds
HEARTBEAT_PACKET_DELAY=1000
#是否启用自动重连当服务端暂时离线的时候
#Whether to enable automatic reconnection when the server is temporarily offline
ENABLE_AUTO_RECONNECT=true
#如果ENABLE_AUTO_RECONNECT设置为true,则将间隔多少秒后重连,单位为秒,且必须为大于0的整数
#If ENABLE_AUTO_RECONNECT is set to true, the number of seconds after which reconnection will be made in seconds and must be an integer greater than 0
RECONNECTION_INTERVAL=30
#数据包数组的长度
#The length of the packet array
BUFFER_LEN=4096
```
#### 代理字段格式说明
- 支持 2 种代理类型前缀:`socks` 或 `http`(不区分大小写)。示例:
- `socks->127.0.0.1:7890`(无认证)
- `http->10.10.10.1:8080@user;pass`(带认证)
- `PROXY_IP_TO_LOCAL_SERVER`:当访问本地服务(localDomainName/localPort)时,先走这个代理(可为空)
- `PROXY_IP_TO_NEO_SERVER`:当访问 NeoServer 时,走此代理(可为空)
---
## 📜日志
- 默认输出目录:`./logs/`(程序会在当前工作目录创建并写入文件)
- 可使用 `--output-file` 指定日志文件路径
- GUI 模式会使用内部队列将日志显示在 WebView 中
---
## 📞EULA & 联系方式
程序会在首次运行写出 `eula.txt`,内容包含使用限制与作者联系方式(QQ 群 / QQ)。请阅读并遵守 EULA 要求。
联系方式(出现在 EULA):QQ群 `304509047`,作者 QQ `1591117599`。
---
## ❓常见问题(FAQ)
Q: 为什么连接不上 NeoProxyServer?
A:
1. 检查 ***config.cfg*** 中 **REMOTE_DOMAIN_NAME** 与 **HOST_HOOK_PORT** 和 **HOST_CONNECT_PORT** 的值是否跟服务端匹配。
2. 确认服务器防火墙/云服务安全组已放通对应端口。
3. 若使用代理,检查 `PROXY_IP_TO_NEO_SERVER` 配置是否正确并可达。
4. 使用 `--debug` 获取更多异常栈信息。
Q: 如何使用 HTTPS 协议
A:
1. 想要在后端使用 HTTPS ,你必须持有 REMOTE_DOMAIN_NAME 域名的证书,也就是 NeoProxyServer 所在的服务器域名的证书,一般来说需要服务器管理员授权
2. 在后端使用 nginx 加载证书套壳在你的 http 端口上即可
Q: 本地端口无法连接(`Fail to connect to localhost`)?
A: 确认本地服务(如 Minecraft)已经在 `LOCAL_DOMAIN_NAME:localPort` 上监听,并且程序有权限访问该端口。
Q: 如何关闭自动重连?
A: 在 `config.cfg` 中将 `ENABLE_AUTO_RECONNECT=false`。
Q: GUI 启动但无法显示日志或乱码?
A: GUI 使用 WebView 渲染日志,程序已经做了中文编码/ANSI 转换的处理;如仍异常,请检查 JavaFX 版本与系统环境编码设置。
Q: 如何禁用 TCP 或 UDP 连接?
A: UI 下高级设置可以调节,或者使用启动参数 `--disable-tcp` 或 `--disable-udp` 参数可以分别禁用 TCP 或 UDP 连接。
Q: RDP 总是断开连接怎么回事?
A: 如果在网络不佳的情况下启用了 UDP ,RDP 协议会识别并且应用。但是 UDP 容易丢包,在这种情况下禁用 UDP 使用纯 TCP 的RDP即可完美解决。
---
## 🔐许可证
本项目基于 [MIT License](https://opensource.org/licenses/MIT) 开源发布。
## 🛠️故障排查 & 调试建议
- 启用 `--debug` 获取更多堆栈信息(会写入日志文件)。
- 查看 `logs/` 目录中的最近日志文件以定位问题。
- 若出现"延迟大于 200ms"的提示,请考虑更换更稳定的网络或 NeoProxyServer 节点。
- 使用 `--disable-tcp` 或 `--disable-udp` 参数可以分别禁用 TCP 或 UDP 连接,以排查特定协议的问题。
---
## ⚠️附件 《最终用户许可协议》 EULA 内容
- 始终以最新的为准,旧的内容自动失效。作者对其任意内容具有最终解释权。
[eula.txt](eula.txt)
---