diff --git a/Cargo.toml b/Cargo.toml index f4c2830..6ebe9c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ log = "0.4" mio = { version = "0.8", features = ["os-poll", "net", "os-ext"] } nix = { version = "0.26", features = ["process", "signal"] } prctl = "1.0" -smoltcp = { version = "0.9.1", git = "https://github.com/smoltcp-rs/smoltcp", features = ["std", "phy-tuntap_interface"] } +smoltcp = { version = "0.10.0", features = ["std", "phy-tuntap_interface"] } thiserror = "1.0" url = "2.3" digest_auth = "0.3.1" diff --git a/src/tun2proxy.rs b/src/tun2proxy.rs index 876377e..58b47ce 100644 --- a/src/tun2proxy.rs +++ b/src/tun2proxy.rs @@ -9,6 +9,7 @@ use mio::{Events, Interest, Poll, Token}; use smoltcp::iface::{Config, Interface, SocketHandle, SocketSet}; use smoltcp::phy::{Device, Medium, RxToken, TunTapInterface, TxToken}; use smoltcp::socket::tcp::State; +use smoltcp::socket::udp::UdpMetadata; use smoltcp::socket::{tcp, udp}; use smoltcp::time::Instant; use smoltcp::wire::{IpCidr, IpProtocol, Ipv4Packet, Ipv6Packet, TcpPacket, UdpPacket}; @@ -292,7 +293,7 @@ impl<'a> TunToProxy<'a> { let mut virt = VirtualTunDevice::new(tun.capabilities()); let gateway4: Ipv4Addr = Ipv4Addr::from_str("0.0.0.1")?; let gateway6: Ipv6Addr = Ipv6Addr::from_str("::1")?; - let mut iface = Interface::new(config, &mut virt, smoltcp::time::Instant::now()); + let mut iface = Interface::new(config, &mut virt, Instant::now()); iface.update_ip_addrs(|ip_addrs| { ip_addrs.push(IpCidr::new(gateway4.into(), 0)).unwrap(); ip_addrs.push(IpCidr::new(gateway6.into(), 0)).unwrap() @@ -577,7 +578,10 @@ impl<'a> TunToProxy<'a> { let dst = SocketAddr::try_from(dst)?; socket.bind(dst)?; socket - .send_slice(response.as_slice(), resolved_conn.src.into()) + .send_slice( + response.as_slice(), + UdpMetadata::from(resolved_conn.src), + ) .expect("failed to send DNS response"); let handle = self.sockets.add(socket); self.expect_smoltcp_send()?; @@ -743,7 +747,7 @@ impl<'a> TunToProxy<'a> { } // The handler request for reset the server connection - if state.handler.reset_connection() { + if state.handler.reset_connection() { // Closes the connection with the proxy state.mio_stream.shutdown(Both)?; @@ -762,7 +766,7 @@ impl<'a> TunToProxy<'a> { state.wait_read = true; state.wait_write = true; state.close_state = 0; - + return Ok(()); }