分享一個基於 netty 的 java 開源項目
1、簡介
中微子代理(neutrino-proxy)是一個基於 netty 的、開源的 java 內網穿透項目。遵循 MIT 許可,因此您可以對它進行複製、修改、傳播並用於任何個人或商業行為。
2、項目結構
- neutrino-proxy
- neutrino-core 與代理無關的基礎封裝
- neutrino-proxy-core 與代理相關的公共常量、編解碼器
- neutrino-proxy-client 代理客戶端項目
- neutrino-proxy-server 代理服務端項目
- neutrino-proxy-admin 代理監控項目(暫時空缺)
3、運行
3.1、使用 keytool 工具生成 ssl 證書,若不需要 ssl 加密可跳過
keytool -genkey -alias test1 -keyalg RSA -keysize 1024 -validity 3650 -keypass 123456 -storepass 123456 -keystore "./test.jks"
3.2、修改服務端配置(application.yml)
application:
name: neutrino-proxy-server
proxy:
protocol:
max-frame-length: 2097152
length-field-offset: 0
length-field-length: 4
initial-bytes-to-strip: 0
length-adjustment: 0
read-idle-time: 60
write-idle-time: 40
all-idle-time-seconds: 0
server:
# 服務端埠,用於保持與客戶端的連接,非SSL
port: 9000
# 服務端埠,用於保持與客戶端的連接,SSL,需要jks證書文件,若不需要ssl支援,可不配置
ssl-port: 9002
# 證書密碼
key-store-password: 123456
key-manager-password: 123456
# 證書存放路徑,若不想打進jar包,可不帶classpath:前綴
jks-path: classpath:/test.jks
# license配置, 客戶端連接時需要用這個進行校驗
license:
# license數為3表示用該license連接的客戶端最多可代理3個埠,-1為不限
79419a1a8691413aa5e845b9e3e90051: 3
9352b1c25f564c81a5677131d7769876: 2
3.3、啟動服務端
fun.asgc.neutrino.proxy.server.ProxyServer
3.4、修改客戶端配置
application:
name: neutrino-proxy-client
proxy:
protocol:
max-frame-length: 2097152
length-field-offset: 0
length-field-length: 4
initial-bytes-to-strip: 0
length-adjustment: 0
read-idle-time: 60
write-idle-time: 30
all-idle-time-seconds: 0
client:
# ssl證書密碼
key-store-password: 123456
# ssl證書存放位置
jks-path: classpath:/test.jks
# 服務端ip,若部署到伺服器,則配置伺服器的ip
server-ip: localhost
# 服務端埠,若使用ssl,則需要配置為服務端的"ssl-port"
server-port: 9000
# 是否啟用ssl,啟用則必須配置ssl相關參數
ssl-enable: false
3.5、準備代理資訊配置文件 config.json
{
"environment": "我的Mac",
"clientKey": "79419a1a8691413aa5e845b9e3e90051", # 對應服務端配置license中的key
"proxy": [
{
"serverPort": 9100, # 外網伺服器對外暴露的埠
"clientInfo": "127.0.0.1:3306" # 需要代理的本地埠(mysql)
},
{
"serverPort": 9101, # 外網伺服器對外暴露的埠
"clientInfo": "rm-xxxx.mysql.rds.aliyuncs.com:3306" # 代理外網埠本身無意義,僅供測試
},
{
"serverPort": 9102, # 外網伺服器對外暴露的埠
"clientInfo": "127.0.0.1:8080" # 需要代理的本地埠(http)
}
]
}
3.6、啟動客戶端
fun.asgc.neutrino.proxy.client.ProxyClient 默認情況下,客戶端會載入當前目錄下的 config.json 文件作為代理配置,可通過命令行參數指定,如:java -jar neutrino-proxy-client.jar/xxx/proxy.json
4、未來迭代方向
- 優化程式碼、增強穩定性
- 服務端增加管理頁面,提供報表、授權、限流等功能
- 從項目中分離、孵化出另一個開源項目 (neutrino-framework)
5、聯繫我們
微信: yuyunshize
