Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
yinqiwen committed Dec 31, 2024
1 parent a07e29e commit a0b021c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 14 deletions.
17 changes: 4 additions & 13 deletions src/tunnel/local.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
use std::net::{SocketAddr, ToSocketAddrs};
use std::net::SocketAddr;

use crate::tunnel::http_local::{handle_http, handle_https};
use crate::tunnel::socks5_local::handle_socks5;
use crate::tunnel::tls_local::{handle_tls, valid_tls_version};
use crate::tunnel::Message;
use crate::utils::set_ip_transparent;
use crate::utils::{new_tcp_listener, set_ip_transparent};
use anyhow::{anyhow, Result};
use time::util;
use tokio::net::{TcpListener, TcpStream};
use tokio::sync::mpsc;

Expand Down Expand Up @@ -73,16 +72,8 @@ pub async fn start_local_tunnel_server(
sender: mpsc::UnboundedSender<Message>,
tproxy: bool,
) -> Result<(), std::io::Error> {
let socket2_addr = socket2::SockAddr::from(addr.clone());
let domain = socket2::Domain::IPV4;
let listen_tcp_socket = socket2::Socket::new(domain, socket2::Type::STREAM, None)?;
if tproxy {
set_ip_transparent(&listen_tcp_socket)?;
}
listen_tcp_socket.bind(&socket2_addr.into())?;

let listener: std::net::TcpListener = listen_tcp_socket.into();
let listener = TcpListener::from_std(listener)?;
let listener = new_tcp_listener(addr, tproxy).await?;
// let listener = TcpListener::bind(addr).await?;

tracing::info!("Start local TCP listen at {}", addr);
let mut tunnel_id_seed: u32 = 0;
Expand Down
2 changes: 1 addition & 1 deletion src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub use error::make_io_error;
pub use metrics::MetricsLogRecorder;
// pub use tls::read_tls_certs;
pub use net::get_original_dst;
pub use net::get_tproxy_original_dst;
pub use net::set_ip_transparent;
pub use net::{get_tproxy_original_dst, new_tcp_listener};
pub use tls::read_private_key;
pub use tls::read_tokio_tls_certs;
24 changes: 24 additions & 0 deletions src/utils/net.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,30 @@ fn sockaddr_storage_to_socketaddr(
)),
}
}

#[cfg(target_os = "linux")]
pub async fn new_tcp_listener(
addr: &SocketAddr,
transparent: bool,
) -> std::io::Result<tokio::net::TcpListener> {
let socket2_addr = socket2::SockAddr::from(addr.clone());
let domain = socket2::Domain::IPV4;
let listen_tcp_socket = socket2::Socket::new(domain, socket2::Type::STREAM, None)?;
if transparent {
set_ip_transparent(&listen_tcp_socket)?;
}
listen_tcp_socket.bind(&socket2_addr.into())?;
listen_tcp_socket.listen(128)?;
tokio::net::TcpListener::from_std(listen_tcp_socket.into())
}
#[cfg(not(target_os = "linux"))]
pub async fn new_tcp_listener(
addr: &SocketAddr,
transparent: bool,
) -> std::io::Result<tokio::net::TcpListener> {
TcpListener::bind(addr).await?
}

#[cfg(target_os = "linux")]
pub fn set_ip_transparent(socket: &socket2::Socket) -> std::io::Result<()> {
// use std::os::fd::FromRawFd;
Expand Down

0 comments on commit a0b021c

Please sign in to comment.