Skip to content

Commit e8397d6

Browse files
committed
Add generic wg private network routing
1 parent 70fa41c commit e8397d6

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

common/wireguard/src/lib.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ pub async fn start_wireguard(
9999
) -> Result<std::sync::Arc<WgApiWrapper>, Box<dyn std::error::Error + Send + Sync + 'static>> {
100100
use base64::{prelude::BASE64_STANDARD, Engine};
101101
use defguard_wireguard_rs::{InterfaceConfiguration, WireguardInterfaceApi};
102+
use ip_network::IpNetwork;
102103
use peer_controller::PeerController;
103104

104105
let mut peers = vec![];
@@ -120,7 +121,18 @@ pub async fn start_wireguard(
120121
peers,
121122
};
122123
wg_api.configure_interface(&interface_config)?;
123-
// wgapi.configure_peer_routing(&peers)?;
124+
125+
// Use a dummy peer to create routing rule for the entire network space
126+
let mut catch_all_peer = Peer::new(Key::new([0; 32]));
127+
let network = IpNetwork::new_truncate(
128+
wireguard_data.inner.config().private_ip,
129+
wireguard_data.inner.config().private_network_prefix,
130+
)?;
131+
catch_all_peer.set_allowed_ips(vec![IpAddrMask::new(
132+
network.network_address(),
133+
network.netmask(),
134+
)]);
135+
wg_api.configure_peer_routing(&[catch_all_peer])?;
124136

125137
let wg_api = std::sync::Arc::new(WgApiWrapper::new(wg_api));
126138
let mut controller = PeerController::new(wg_api.clone(), wireguard_data.peer_rx);

common/wireguard/src/peer_controller.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ impl PeerController {
3636
msg = self.peer_rx.recv() => {
3737
match msg {
3838
Some(PeerControlMessage::AddPeer(peer)) => {
39-
if self.wg_api.inner.configure_peer(&peer).is_err() {
40-
log::error!("Could not configure peer {:?}", peer);
39+
if let Err(e) = self.wg_api.inner.configure_peer(&peer) {
40+
log::error!("Could not configure peer: {:?}", e);
4141
}
4242
}
4343
Some(PeerControlMessage::RemovePeer(peer_pubkey)) => {
44-
if self.wg_api.inner.remove_peer(&peer_pubkey).is_err() {
45-
log::error!("Could not remove peer with key {:?}", peer_pubkey);
44+
if let Err(e) = self.wg_api.inner.remove_peer(&peer_pubkey) {
45+
log::error!("Could not remove peer: {:?}", e);
4646
}
4747
}
4848
None => {

0 commit comments

Comments
 (0)