Skip to content

Commit 34ab390

Browse files
committed
feat: 调整tcpmux通信的backendserver参数,由多个改为一个(负载均衡策略与每次建立连接携带backendserver有点矛盾,因此弃用)
1 parent 8908628 commit 34ab390

File tree

3 files changed

+28
-53
lines changed

3 files changed

+28
-53
lines changed

src/main/java/top/meethigher/proxy/tcp/mux/Mux.java

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
import javax.crypto.SecretKey;
1111
import java.nio.charset.StandardCharsets;
12-
import java.util.ArrayList;
13-
import java.util.List;
1412

1513
import static top.meethigher.proxy.FastAes.*;
1614

@@ -47,12 +45,8 @@ public Mux(Vertx vertx, String secret) {
4745
/**
4846
* 将host与port通过英文冒号连接,返回加密base64串(无换行)
4947
*/
50-
public Buffer encode(List<NetAddress> netAddresses) {
51-
String[] array = new String[netAddresses.size()];
52-
for (int i = 0; i < array.length; i++) {
53-
array[i] = netAddresses.get(i).toString();
54-
}
55-
String addr = String.join(",", array);
48+
public Buffer encode(NetAddress netAddress) {
49+
String addr = netAddress.toString();
5650
SecretKey key = restoreKey(secret.getBytes(StandardCharsets.UTF_8));
5751
String encryptedAddr = encryptToBase64(addr.getBytes(StandardCharsets.UTF_8), key);
5852
return TunnelMessageCodec.encode((short) 0, encryptedAddr.getBytes(StandardCharsets.UTF_8));
@@ -61,28 +55,13 @@ public Buffer encode(List<NetAddress> netAddresses) {
6155
/**
6256
* 将加密内容还原
6357
*/
64-
public List<NetAddress> decode(Buffer buffer) {
58+
public NetAddress decode(Buffer buffer) {
6559
TunnelMessageCodec.DecodedMessage decode = TunnelMessageCodec.decode(buffer);
6660
String encryptedAddr = new String(decode.body, StandardCharsets.UTF_8);
6761
SecretKey key = restoreKey(secret.getBytes(StandardCharsets.UTF_8));
6862
String addr = new String(decryptFromBase64(encryptedAddr, key),
6963
StandardCharsets.UTF_8);
70-
List<NetAddress> list = new ArrayList<>();
71-
if (addr.contains(",")) {
72-
String[] split = addr.split(",");
73-
for (String s : split) {
74-
add(s, list);
75-
}
76-
} else {
77-
add(addr, list);
78-
}
79-
return list;
64+
return NetAddress.parse(addr);
8065
}
8166

82-
private void add(String addr, List<NetAddress> list) {
83-
NetAddress parse = NetAddress.parse(addr);
84-
if (parse != null) {
85-
list.add(parse);
86-
}
87-
}
8867
}

src/main/java/top/meethigher/proxy/tcp/mux/ReverseTcpProxyMuxClient.java

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public class ReverseTcpProxyMuxClient extends Mux {
3030

3131
private static final Logger log = LoggerFactory.getLogger(ReverseTcpProxyMuxClient.class);
3232
/**
33-
* 端口映射关系
34-
* key: 本地监听的TCP服务
33+
* 端口映射关系<p>
34+
* key: 本地监听的TCP服务<p>
3535
* value: 经过 {@code top.meethigher.proxy.tcp.mux.ReverseTcpProxyMuxServer }转发的内网服务
3636
*/
37-
protected final Map<MuxNetAddress, List<NetAddress>> mapper;
37+
protected final Map<MuxNetAddress, NetAddress> mapper;
3838

3939
protected final NetServerOptions netServerOptions;
4040

@@ -46,7 +46,7 @@ public class ReverseTcpProxyMuxClient extends Mux {
4646

4747
protected final List<NetServer> netServers = new ArrayList<>();
4848

49-
protected ReverseTcpProxyMuxClient(Vertx vertx, String secret, Map<MuxNetAddress, List<NetAddress>> mapper, NetServerOptions netServerOptions, NetClient netClient, NetAddress muxServer, String name) {
49+
public ReverseTcpProxyMuxClient(Vertx vertx, String secret, Map<MuxNetAddress, NetAddress> mapper, NetServerOptions netServerOptions, NetClient netClient, NetAddress muxServer, String name) {
5050
super(vertx, secret);
5151
this.mapper = mapper;
5252
this.netServerOptions = netServerOptions;
@@ -56,41 +56,43 @@ protected ReverseTcpProxyMuxClient(Vertx vertx, String secret, Map<MuxNetAddress
5656
}
5757

5858

59-
protected void handleConnect(NetSocket src, MuxNetAddress local, List<NetAddress> backendServers) {
59+
protected void handleConnect(NetSocket src, MuxNetAddress localServer, NetAddress backendServer) {
6060
src.pause();
61-
log.debug("{}: source {} -- {} connected", local.getName(), src.localAddress(), src.remoteAddress());
62-
src.closeHandler(v -> log.debug("{}: source {} -- {} closed", local.getName(), src.localAddress(), src.remoteAddress()));
61+
log.debug("{}: source {} -- {} connected", localServer.getName(), src.localAddress(), src.remoteAddress());
62+
src.exceptionHandler(e -> log.error("{}: source {} -- {} exception occurred", localServer.getName(), src.localAddress(), src.remoteAddress(), e))
63+
.closeHandler(v -> log.debug("{}: source {} -- {} closed", localServer.getName(), src.localAddress(), src.remoteAddress()));
6364
netClient.connect(muxServer.getPort(), muxServer.getHost())
6465
.onFailure(e -> {
65-
log.error("{}: failed to connect to {}", local.getName(), muxServer, e);
66+
log.error("{}: failed to connect to {}", localServer.getName(), muxServer, e);
6667
src.close();
6768
})
6869
.onSuccess(dst -> {
6970
dst.pause();
70-
log.debug("{}: target {} -- {} connected", local.getName(), dst.localAddress(), dst.remoteAddress());
71-
dst.closeHandler(v -> log.debug("{}: target {} -- {} closed", local.getName(), dst.localAddress(), dst.remoteAddress()));
71+
log.debug("{}: target {} -- {} connected", localServer.getName(), dst.localAddress(), dst.remoteAddress());
72+
dst.exceptionHandler(e -> log.error("{}: target {} -- {} exception occurred", localServer.getName(), dst.localAddress(), dst.remoteAddress(), e))
73+
.closeHandler(v -> log.debug("{}: target {} -- {} closed", localServer.getName(), dst.localAddress(), dst.remoteAddress()));
7274
Handler<Void> writeSuccessHandler = t -> {
7375
// https://github.com/meethigher/tcp-reverse-proxy/issues/12
7476
// 将日志记录详细,便于排查问题
7577
src.pipeTo(dst)
7678
.onSuccess(v -> log.debug("{}: source {} -- {} pipe to target {} -- {} succeeded",
77-
local.getName(), src.localAddress(), src.remoteAddress(), dst.localAddress(), dst.remoteAddress()))
79+
localServer.getName(), src.localAddress(), src.remoteAddress(), dst.localAddress(), dst.remoteAddress()))
7880
.onFailure(e -> log.error("{}: source {} -- {} pipe to target {} -- {} failed",
79-
local.getName(), src.localAddress(), src.remoteAddress(), dst.localAddress(), dst.remoteAddress(), e));
81+
localServer.getName(), src.localAddress(), src.remoteAddress(), dst.localAddress(), dst.remoteAddress(), e));
8082
dst.pipeTo(src)
8183
.onSuccess(v -> log.debug("{}: target {} -- {} pipe to source {} -- {} succeeded",
82-
local.getName(), dst.localAddress(), dst.remoteAddress(), src.localAddress(), src.remoteAddress()))
84+
localServer.getName(), dst.localAddress(), dst.remoteAddress(), src.localAddress(), src.remoteAddress()))
8385
.onFailure(e -> log.error("{}: target {} -- {} pipe to source {} -- {} failed",
84-
local.getName(), dst.localAddress(), dst.remoteAddress(), src.localAddress(), src.remoteAddress(), e));
86+
localServer.getName(), dst.localAddress(), dst.remoteAddress(), src.localAddress(), src.remoteAddress(), e));
8587
log.debug("{}: source {} -- {} bound to target {} -- {} with backend server {}",
86-
local.getName(),
88+
localServer.getName(),
8789
src.localAddress(), src.remoteAddress(),
8890
dst.localAddress(), dst.remoteAddress(),
89-
backendServers);
91+
backendServer);
9092
src.resume();
9193
dst.resume();
9294
};
93-
dst.write(this.encode(backendServers))
95+
dst.write(this.encode(backendServer))
9496
.onSuccess(writeSuccessHandler)
9597
.onFailure(e -> {
9698
dst.close();
@@ -151,17 +153,11 @@ public static String generateName() {
151153
public static ReverseTcpProxyMuxClient create() {
152154
Vertx vertx = Vertx.vertx();
153155
return new ReverseTcpProxyMuxClient(vertx, Mux.SECRET_DEFAULT,
154-
new HashMap<MuxNetAddress, List<NetAddress>>() {{
156+
new HashMap<MuxNetAddress, NetAddress>() {{
155157
put(new MuxNetAddress("0.0.0.0", 6666, "ssh1"),
156-
new ArrayList<NetAddress>() {{
157-
add(new NetAddress("127.0.0.1", 22));
158-
add(new NetAddress("127.0.0.1", 23));
159-
}});
158+
new NetAddress("127.0.0.1", 22));
160159
put(new MuxNetAddress("0.0.0.0", 6667, "ssh2"),
161-
new ArrayList<NetAddress>() {{
162-
add(new NetAddress("127.0.0.1", 22));
163-
add(new NetAddress("127.0.0.1", 23));
164-
}});
160+
new NetAddress("127.0.0.1", 22));
165161

166162
}}, new NetServerOptions(), vertx.createNetClient(),
167163
new NetAddress("10.0.0.30", 22),

src/test/java/top/meethigher/proxy/tcp/mux/MuxTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public void name() {
2323
list.add(netAddress1);
2424
list.add(netAddress2);
2525

26-
Buffer encode = mux.encode(list);
26+
Buffer encode = mux.encode(netAddress1);
2727

28-
List<NetAddress> decode = mux.decode(encode);
28+
NetAddress decode = mux.decode(encode);
2929
System.out.println();
3030
}
3131
}

0 commit comments

Comments
 (0)