Skip to content

Commit 61285e4

Browse files
authored
Merge pull request #31 from NodePassProject/main
Enhance Logging, Handshake Protocols, and UDP Session Management
2 parents 26315a6 + fa95d96 commit 61285e4

File tree

11 files changed

+165
-109
lines changed

11 files changed

+165
-109
lines changed

cmd/nodepass/core.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func coreDispatch(parsedURL *url.URL) {
2424
case "client":
2525
core = internal.NewClient(parsedURL, logger)
2626
default:
27-
logger.Fatal("Unknown core: %v", scheme)
27+
logger.Error("Unknown core: %v", scheme)
2828
getExitInfo()
2929
}
3030

cmd/nodepass/main.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func getParsedURL(args []string) *url.URL {
3030

3131
parsedURL, err := url.Parse(args[1])
3232
if err != nil {
33-
logger.Fatal("URL parse: %v", err)
33+
logger.Error("URL parse: %v", err)
3434
getExitInfo()
3535
}
3636

@@ -49,9 +49,6 @@ func initLogLevel(level string) {
4949
case "error":
5050
logger.SetLogLevel(logs.Error)
5151
logger.Error("Init log level: ERROR")
52-
case "fatal":
53-
logger.SetLogLevel(logs.Fatal)
54-
logger.Fatal("Init log level: FATAL")
5552
default:
5653
logger.SetLogLevel(logs.Info)
5754
logger.Info("Init log level: INFO")
@@ -79,7 +76,7 @@ func getExitInfo() {
7976
│ <core> │ server | client | master │ Operating mode │
8077
│ <tunnel> │ host:port (IP | domain) │ Tunnel address │
8178
│ <target> │ host:port | API prefix │ Target addr | prefix │
82-
│ <log> │ debug | info | warn | ... │ Default level info │
79+
│ <log> │ debug | warn | error │ Default level info │
8380
│ * <tls> │ 0 off | 1 on | 2 verify │ Default TLS code-0 │
8481
│ * <crt> │ <path/to/crt.pem> │ Custom certificate │
8582
│ * <key> │ <path/to/key.pem> │ Custom private key │

docs/en/configuration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ NodePass provides five log verbosity levels that control the amount of informati
1010
- `info`: General operational information (default) - shows startup, shutdown, and key events
1111
- `warn`: Warning conditions - only shows potential issues that don't affect core functionality
1212
- `error`: Error conditions - shows only problems that affect functionality
13-
- `fatal`: Critical conditions - shows only severe errors that cause termination
13+
- `event`: Event recording - shows important operational events and traffic statistics
1414

1515
You can set the log level in the command URL:
1616

docs/en/usage.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Where:
2525
- `<core>`: Specifies the operating mode (`server`, `client`, or `master`)
2626
- `<tunnel_addr>`: The tunnel endpoint address for control channel communications
2727
- `<target_addr>`: The destination address for business data with bidirectional flow support (or API prefix in master mode)
28-
- `<level>`: Log verbosity level (`debug`, `info`, `warn`, `error`, or `fatal`)
28+
- `<level>`: Log verbosity level (`debug`, `info`, `warn`, `error`, or `event`)
2929
- `<mode>`: TLS security level for data channels (`0`, `1`, or `2`) - server/master modes only
3030
- `<cert_file>`: Path to certificate file (when `tls=2`) - server/master modes only
3131
- `<key_file>`: Path to private key file (when `tls=2`) - server/master modes only
@@ -46,7 +46,7 @@ nodepass server://<tunnel_addr>/<target_addr>?log=<level>&tls=<mode>&crt=<cert_f
4646

4747
- `tunnel_addr`: Address for the TCP tunnel endpoint (control channel) that clients will connect to (e.g., 10.1.0.1:10101)
4848
- `target_addr`: The destination address for business data with bidirectional flow support (e.g., 10.1.0.1:8080)
49-
- `log`: Log level (debug, info, warn, error, fatal)
49+
- `log`: Log level (debug, info, warn, error, event)
5050
- `tls`: TLS encryption mode for the target data channel (0, 1, 2)
5151
- `0`: No TLS encryption (plain TCP/UDP)
5252
- `1`: Self-signed certificate (automatically generated)
@@ -94,7 +94,7 @@ nodepass client://<tunnel_addr>/<target_addr>?log=<level>
9494

9595
- `tunnel_addr`: Address of the NodePass server's tunnel endpoint to connect to (e.g., 10.1.0.1:10101)
9696
- `target_addr`: The destination address for business data with bidirectional flow support (e.g., 127.0.0.1:8080)
97-
- `log`: Log level (debug, info, warn, error, fatal)
97+
- `log`: Log level (debug, info, warn, error, event)
9898

9999
#### How Client Mode Works
100100

@@ -140,7 +140,7 @@ nodepass master://<api_addr>[<prefix>]?log=<level>&tls=<mode>&crt=<cert_file>&ke
140140

141141
- `api_addr`: Address where the API service will listen (e.g., 0.0.0.0:9090)
142142
- `prefix`: Optional API prefix path (e.g., /management). Default is `/api`
143-
- `log`: Log level (debug, info, warn, error, fatal)
143+
- `log`: Log level (debug, info, warn, error, event)
144144
- `tls`: TLS encryption mode for the API service (0, 1, 2)
145145
- `0`: No TLS encryption (HTTP)
146146
- `1`: Self-signed certificate (HTTPS with auto-generated cert)

docs/zh/configuration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ NodePass提供五种日志详细级别,控制显示的信息量:
1010
- `info`:一般操作信息(默认) - 显示启动、关闭和关键事件
1111
- `warn`:警告条件 - 仅显示不影响核心功能的潜在问题
1212
- `error`:错误条件 - 仅显示影响功能的问题
13-
- `fatal`:致命条件 - 仅显示导致终止的严重错误
13+
- `event`:事件记录 - 显示重要的操作事件和流量统计
1414

1515
您可以在命令URL中设置日志级别:
1616

docs/zh/usage.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ nodepass <core>://<tunnel_addr>/<target_addr>?log=<level>&tls=<mode>&crt=<cert_f
1414
- `<core>`:指定操作模式(`server``client``master`
1515
- `<tunnel_addr>`:控制通道通信的隧道端点地址
1616
- `<target_addr>`:业务数据的目标地址,支持双向模式(或在master模式下的API前缀)
17-
- `<level>`:日志详细级别(`debug``info``warn``error``fatal`
17+
- `<level>`:日志详细级别(`debug``info``warn``error``event`
1818
- `<mode>`:数据通道的TLS安全级别(`0``1``2`)- 仅适用于server/master模式
1919
- `<cert_file>`:证书文件路径(当`tls=2`时)- 仅适用于server/master模式
2020
- `<key_file>`:私钥文件路径(当`tls=2`时)- 仅适用于server/master模式
@@ -35,7 +35,7 @@ nodepass server://<tunnel_addr>/<target_addr>?log=<level>&tls=<mode>&crt=<cert_f
3535

3636
- `tunnel_addr`:TCP隧道端点地址(控制通道),客户端将连接到此处(例如, 10.1.0.1:10101)
3737
- `target_addr`:业务数据的目标地址,支持双向数据流模式(例如, 10.1.0.1:8080)
38-
- `log`:日志级别(debug, info, warn, error, fatal)
38+
- `log`:日志级别(debug, info, warn, error, event)
3939
- `tls`:目标数据通道的TLS加密模式 (0, 1, 2)
4040
- `0`:无TLS加密(明文TCP/UDP)
4141
- `1`:自签名证书(自动生成)
@@ -83,7 +83,7 @@ nodepass client://<tunnel_addr>/<target_addr>?log=<level>
8383

8484
- `tunnel_addr`:要连接的NodePass服务端隧道端点地址(例如, 10.1.0.1:10101)
8585
- `target_addr`:业务数据的目标地址,支持双向数据流模式(例如, 127.0.0.1:8080)
86-
- `log`:日志级别(debug, info, warn, error, fatal)
86+
- `log`:日志级别(debug, info, warn, error, event)
8787

8888
#### 客户端模式工作原理
8989

@@ -132,7 +132,7 @@ nodepass master://<api_addr>[<prefix>]?log=<level>&tls=<mode>&crt=<cert_file>&ke
132132

133133
- `api_addr`:API服务监听的地址(例如,0.0.0.0:9090)
134134
- `prefix`:可选的API前缀路径(例如,/management)。默认为`/api`
135-
- `log`:日志级别(debug, info, warn, error, fatal)
135+
- `log`:日志级别(debug, info, warn, error, event)
136136
- `tls`:API服务的TLS加密模式(0, 1, 2)
137137
- `0`:无TLS加密(HTTP)
138138
- `1`:自签名证书(带自动生成证书的HTTPS)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ go 1.24.3
55
require (
66
github.com/NodePassProject/cert v1.0.0
77
github.com/NodePassProject/conn v1.0.0
8-
github.com/NodePassProject/logs v1.0.0
8+
github.com/NodePassProject/logs v1.0.1
99
github.com/NodePassProject/pool v1.0.5
1010
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ github.com/NodePassProject/cert v1.0.0 h1:cBNNvR+ja22AgNlUmeGWLcCM1vmnLTqpbCQ4Hd
22
github.com/NodePassProject/cert v1.0.0/go.mod h1:4EJDS3GozJ74dtICJ/xcq42WKKvF0tiTM9/M7Q9NF9c=
33
github.com/NodePassProject/conn v1.0.0 h1:rN0wf/N3gB8BJJ2ZwD6ij/ZKgd6CDRY/MeEZ40BJ98U=
44
github.com/NodePassProject/conn v1.0.0/go.mod h1:mWe3Rylunp6Sx4v6pkSGgYZe2R+I/O+7nZ2od0yJ3aQ=
5-
github.com/NodePassProject/logs v1.0.0 h1:twRwCQinXjWu7c4sbiLVYWTMsaTOOFLubjMQx3ScXX0=
6-
github.com/NodePassProject/logs v1.0.0/go.mod h1:ocFTMNXBTnQFJFAhF+qobAzu7+y+wYPik7D+a1jPfis=
5+
github.com/NodePassProject/logs v1.0.1 h1:WDHY1DcTO+7NydBzuRpxhEw6pWYayBdDjjZzU1uDKac=
6+
github.com/NodePassProject/logs v1.0.1/go.mod h1:ocFTMNXBTnQFJFAhF+qobAzu7+y+wYPik7D+a1jPfis=
77
github.com/NodePassProject/pool v1.0.5 h1:7mztspS8MUOu2btSVev954bU2ujR8tqotsMh1upHBtc=
88
github.com/NodePassProject/pool v1.0.5/go.mod h1:kdRAEDK45j/+iHH4kRTpXt/wI28NIguJ13n/5NDXxkw=

internal/client.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func (c *Client) tunnelHandshake() error {
148148
if err != nil {
149149
return err
150150
}
151+
151152
tunnelSignal := string(xor(bytes.TrimSuffix(rawTunnelURL, []byte{'\n'})))
152153
c.logger.Debug("Tunnel signal <- : %v <- %v", tunnelSignal, c.tunnelTCPConn.RemoteAddr())
153154

@@ -156,13 +157,21 @@ func (c *Client) tunnelHandshake() error {
156157
if err != nil {
157158
return err
158159
}
159-
160-
// 设置数据流向
161160
c.dataFlow = tunnelURL.Host
162-
163-
// 设置TLS代码
164161
c.tlsCode = tunnelURL.Fragment
165162

166-
c.logger.Debug("Tunnel handshaked: %v <-> %v", c.tunnelTCPConn.LocalAddr(), c.tunnelTCPConn.RemoteAddr())
163+
// 反馈给服务端
164+
start := time.Now()
165+
if _, err := c.tunnelTCPConn.Write([]byte{'\n'}); err != nil {
166+
return err
167+
}
168+
169+
// 等待服务端确认握手完成
170+
_, err = c.tunnelTCPConn.Read(make([]byte, 1))
171+
if err != nil {
172+
return err
173+
}
174+
c.logger.Event("Tunnel handshaked: %v <-> %v in %vms",
175+
c.tunnelTCPConn.LocalAddr(), c.tunnelTCPConn.RemoteAddr(), time.Since(start).Milliseconds())
167176
return nil
168177
}

0 commit comments

Comments
 (0)