incorporate wireguard daemon with network interface

This commit is contained in:
Jett Chen 2023-11-09 08:08:09 +08:00
parent 6339b6bc4b
commit cdc3acdb5e
3 changed files with 25 additions and 8 deletions

View file

@ -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::<SocketAddr>()?;
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,

View file

@ -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),
}
}