incorporate wireguard daemon with network interface
This commit is contained in:
parent
f1649ce3b2
commit
bf15221a7b
3 changed files with 25 additions and 8 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
use std::net::SocketAddr;
|
use std::net::{Ipv4Addr, SocketAddr, ToSocketAddrs};
|
||||||
|
|
||||||
|
|
||||||
mod command;
|
mod command;
|
||||||
|
|
@ -41,11 +41,13 @@ pub async fn daemon_main() -> Result<()> {
|
||||||
let mut inst = DaemonInstance::new(commands_rx, response_tx);
|
let mut inst = DaemonInstance::new(commands_rx, response_tx);
|
||||||
// tokio::try_join!(inst.run(), listen(commands_tx, response_rx)).map(|_| ())
|
// 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 private_key = parse_secret_key("GNqIAOCRxjl/cicZyvkvpTklgQuUmGUIEkH7IXF/sEE=")?;
|
||||||
let public_key = parse_public_key("EKZXvHlSDeqAjfC/m9aQR0oXfQ6Idgffa9L0DH5yaCo=")?;
|
let public_key = parse_public_key("uy75leriJay0+oHLhRMpV+A5xAQ0hCJ+q7Ww81AOvT4=")?;
|
||||||
let endpoint = "146.70.173.66:51820".parse::<SocketAddr>()?;
|
let endpoint = "wg.burrow.rs:51820".to_socket_addrs()?.next().unwrap();
|
||||||
let iface = Interface::new(tun, vec![Peer {
|
let iface = Interface::new(tun, vec![Peer {
|
||||||
endpoint,
|
endpoint,
|
||||||
private_key,
|
private_key,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ use anyhow::Error;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use fehler::throws;
|
use fehler::throws;
|
||||||
use ip_network_table::IpNetworkTable;
|
use ip_network_table::IpNetworkTable;
|
||||||
|
use log::log;
|
||||||
use tokio::{
|
use tokio::{
|
||||||
join,
|
join,
|
||||||
sync::Mutex,
|
sync::Mutex,
|
||||||
|
|
@ -104,19 +105,29 @@ impl Interface {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
log::debug!("read {} bytes from interface", src.len());
|
||||||
|
log::debug!("bytes: {:?}", src);
|
||||||
|
|
||||||
let mut pcbs = pcbs.lock().await;
|
let mut pcbs = pcbs.lock().await;
|
||||||
|
|
||||||
let dst_addr = match Tunnel::dst_address(src) {
|
let dst_addr = match Tunnel::dst_address(src) {
|
||||||
Some(addr) => addr,
|
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 {
|
let Some(idx) = pcbs.find(dst_addr) else {
|
||||||
continue
|
continue
|
||||||
};
|
};
|
||||||
|
|
||||||
|
log::debug!("found peer {}", idx);
|
||||||
|
|
||||||
match pcbs.pcbs[idx].send(src).await {
|
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),
|
Err(e) => log::error!("failed to send packet {}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,11 @@ impl TunInterface {
|
||||||
#[throws]
|
#[throws]
|
||||||
#[instrument]
|
#[instrument]
|
||||||
pub fn recv(&mut self, buf: &mut [u8]) -> usize {
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue