diff --git a/burrow/src/daemon/mod.rs b/burrow/src/daemon/mod.rs index 6e625fd..6c39d30 100644 --- a/burrow/src/daemon/mod.rs +++ b/burrow/src/daemon/mod.rs @@ -1,4 +1,4 @@ -use std::net::SocketAddr; +use std::net::{Ipv4Addr, SocketAddr, ToSocketAddrs}; mod command; @@ -41,11 +41,13 @@ pub async fn daemon_main() -> Result<()> { let mut inst = DaemonInstance::new(commands_rx, response_tx); // tokio::try_join!(inst.run(), listen(commands_tx, response_rx)).map(|_| ()) - let tun = tun::tokio::TunInterface::new(tun::TunInterface::new()?)?; + let mut _tun = tun::TunInterface::new()?; + _tun.set_ipv4_addr(Ipv4Addr::from([192, 168, 1, 10]))?; + let tun = tun::tokio::TunInterface::new(_tun)?; - let private_key = parse_secret_key("sIxpokQPnWctJKNaQ3DRdcQbL2S5OMbUrvr4bbsvTHw=")?; - let public_key = parse_public_key("EKZXvHlSDeqAjfC/m9aQR0oXfQ6Idgffa9L0DH5yaCo=")?; - let endpoint = "146.70.173.66:51820".parse::()?; + let private_key = parse_secret_key("GNqIAOCRxjl/cicZyvkvpTklgQuUmGUIEkH7IXF/sEE=")?; + let public_key = parse_public_key("uy75leriJay0+oHLhRMpV+A5xAQ0hCJ+q7Ww81AOvT4=")?; + let endpoint = "wg.burrow.rs:51820".to_socket_addrs()?.next().unwrap(); let iface = Interface::new(tun, vec![Peer { endpoint, private_key, diff --git a/burrow/src/wireguard/iface.rs b/burrow/src/wireguard/iface.rs index ede3424..7b9e0bd 100755 --- a/burrow/src/wireguard/iface.rs +++ b/burrow/src/wireguard/iface.rs @@ -4,6 +4,7 @@ use anyhow::Error; use async_trait::async_trait; use fehler::throws; use ip_network_table::IpNetworkTable; +use log::log; use tokio::{ join, sync::Mutex, @@ -104,19 +105,29 @@ impl Interface { continue } }; + log::debug!("read {} bytes from interface", src.len()); + log::debug!("bytes: {:?}", src); let mut pcbs = pcbs.lock().await; let dst_addr = match Tunnel::dst_address(src) { Some(addr) => addr, - None => continue, + None => { + log::debug!("no destination found"); + continue + }, }; + log::debug!("dst_addr: {}", dst_addr); + let Some(idx) = pcbs.find(dst_addr) else { continue }; + + log::debug!("found peer {}", idx); + match pcbs.pcbs[idx].send(src).await { - Ok(..) => {} + Ok(..) => {log::debug!("sent packet to peer {}", dst_addr);} Err(e) => log::error!("failed to send packet {}", e), } } diff --git a/tun/src/unix/mod.rs b/tun/src/unix/mod.rs index 269f4e6..a3cfeae 100644 --- a/tun/src/unix/mod.rs +++ b/tun/src/unix/mod.rs @@ -44,7 +44,11 @@ impl TunInterface { #[throws] #[instrument] pub fn recv(&mut self, buf: &mut [u8]) -> usize { - self.socket.read(buf)? + // there might be a more efficient way to implement this + let tmp_buf = &mut [0u8; 1500]; + let len = self.socket.read(tmp_buf)?; + buf[..len-4].copy_from_slice(&tmp_buf[4..len]); + len-4 } }