Add Socks5 Udp Associate
This commit is contained in:
parent
23a38fced0
commit
bdf88d0e89
9 changed files with 406 additions and 67 deletions
|
@ -1,5 +1,5 @@
|
|||
use super::{to_host_port, JwtTunnelConfig, JWT_HEADER_PREFIX, JWT_KEY};
|
||||
use crate::{LocalToRemote, WsClientConfig};
|
||||
use crate::{LocalProtocol, LocalToRemote, WsClientConfig};
|
||||
use anyhow::{anyhow, Context};
|
||||
|
||||
use base64::Engine;
|
||||
|
@ -111,7 +111,7 @@ pub async fn run_tunnel<T, R, W>(
|
|||
incoming_cnx: T,
|
||||
) -> anyhow::Result<()>
|
||||
where
|
||||
T: Stream<Item = anyhow::Result<((R, W), (Host, u16))>>,
|
||||
T: Stream<Item = anyhow::Result<((R, W), (LocalProtocol, Host, u16))>>,
|
||||
R: AsyncRead + Send + 'static,
|
||||
W: AsyncWrite + Send + 'static,
|
||||
{
|
||||
|
@ -122,10 +122,11 @@ where
|
|||
Level::INFO,
|
||||
"tunnel",
|
||||
id = request_id.to_string(),
|
||||
remote = format!("{}:{}", remote_dest.0, remote_dest.1)
|
||||
remote = format!("{}:{}", remote_dest.1, remote_dest.2)
|
||||
);
|
||||
let mut tunnel_cfg = tunnel_cfg.clone();
|
||||
tunnel_cfg.remote = remote_dest;
|
||||
tunnel_cfg.local_protocol = remote_dest.0;
|
||||
tunnel_cfg.remote = (remote_dest.1, remote_dest.2);
|
||||
let client_config = client_config.clone();
|
||||
|
||||
let tunnel = async move {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use fastwebsockets::{Frame, OpCode, Payload, WebSocketError, WebSocketRead, WebSocketWrite};
|
||||
use futures_util::{pin_mut, FutureExt};
|
||||
use hyper::upgrade::Upgraded;
|
||||
use std::cmp::max;
|
||||
|
||||
use hyper_util::rt::TokioIo;
|
||||
use std::time::Duration;
|
||||
|
|
|
@ -36,7 +36,7 @@ impl JwtTunnelConfig {
|
|||
LocalProtocol::Tcp => LocalProtocol::Tcp,
|
||||
LocalProtocol::Udp { .. } => tunnel.local_protocol,
|
||||
LocalProtocol::Stdio => LocalProtocol::Tcp,
|
||||
LocalProtocol::Socks5 => LocalProtocol::Tcp,
|
||||
LocalProtocol::Socks5 { .. } => LocalProtocol::Tcp,
|
||||
LocalProtocol::ReverseTcp => LocalProtocol::ReverseTcp,
|
||||
LocalProtocol::ReverseUdp { .. } => tunnel.local_protocol,
|
||||
LocalProtocol::ReverseSocks5 => LocalProtocol::ReverseSocks5,
|
||||
|
|
|
@ -22,7 +22,7 @@ use jsonwebtoken::TokenData;
|
|||
use once_cell::sync::Lazy;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use crate::socks5::Socks5Protocol;
|
||||
use crate::socks5::Socks5Stream;
|
||||
use crate::tunnel::tls_reloader::TlsReloader;
|
||||
use crate::udp::UdpStream;
|
||||
use tokio::io::{AsyncRead, AsyncWrite};
|
||||
|
@ -105,12 +105,12 @@ async fn run_tunnel(
|
|||
}
|
||||
LocalProtocol::ReverseSocks5 => {
|
||||
#[allow(clippy::type_complexity)]
|
||||
static SERVERS: Lazy<Mutex<HashMap<(Host<String>, u16), mpsc::Receiver<(Socks5Protocol, (Host, u16))>>>> =
|
||||
static SERVERS: Lazy<Mutex<HashMap<(Host<String>, u16), mpsc::Receiver<(Socks5Stream, (Host, u16))>>>> =
|
||||
Lazy::new(|| Mutex::new(HashMap::with_capacity(0)));
|
||||
|
||||
let local_srv = (Host::parse(&jwt.claims.r)?, jwt.claims.rp);
|
||||
let bind = format!("{}:{}", local_srv.0, local_srv.1);
|
||||
let listening_server = socks5::run_server(bind.parse()?);
|
||||
let listening_server = socks5::run_server(bind.parse()?, None);
|
||||
let (tcp, local_srv) = run_listening_server(&local_srv, SERVERS.deref(), listening_server).await?;
|
||||
let (local_rx, local_tx) = tokio::io::split(tcp);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue