Skip to content

Commit 2c3b610

Browse files
committed
tproxy: Turns reserved-net into an array
1 parent 182e02e commit 2c3b610

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

tproxy/src/config.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub struct WgConfig {
1414
pub private_key: String,
1515
pub listen_port: u16,
1616
pub ip: Ipv4Net,
17-
pub reserved_net: Ipv4Net,
17+
pub reserved_net: Vec<Ipv4Net>,
1818
pub client_ip_range: Ipv4Net,
1919
pub interface: String,
2020
pub config_path: String,
@@ -23,18 +23,20 @@ pub struct WgConfig {
2323

2424
impl WgConfig {
2525
fn validate(&self) -> Result<()> {
26-
validate(self.ip, self.reserved_net, self.client_ip_range)
26+
validate(self.ip, &self.reserved_net, self.client_ip_range)
2727
}
2828
}
2929

30-
fn validate(ip: Ipv4Net, reserved_net: Ipv4Net, client_ip_range: Ipv4Net) -> Result<()> {
30+
fn validate(ip: Ipv4Net, reserved_net: &[Ipv4Net], client_ip_range: Ipv4Net) -> Result<()> {
3131
// The reserved net must be in the network
32-
if !ip.contains(&reserved_net) {
33-
bail!("Reserved net is not in the network");
32+
for net in reserved_net {
33+
if !ip.contains(net) {
34+
bail!("Reserved net is not in the network");
35+
}
3436
}
3537

36-
// The ip must be in the reserved net
37-
if !reserved_net.contains(&ip.addr()) {
38+
// The ip must be in one of the reserved net
39+
if !reserved_net.iter().any(|net| net.contains(&ip.addr())) {
3840
bail!("Wg peer IP is not in the reserved net");
3941
}
4042

@@ -294,7 +296,7 @@ mod tests {
294296
let reserved_net = Ipv4Net::from_str("10.1.2.0/30").unwrap();
295297
let result = validate(
296298
ip,
297-
reserved_net,
299+
&[reserved_net],
298300
Ipv4Net::from_str("10.1.2.128/25").unwrap(),
299301
);
300302
assert!(result.is_ok());
@@ -304,7 +306,7 @@ mod tests {
304306
let reserved_net = Ipv4Net::from_str("10.1.0.0/16").unwrap();
305307
let result = validate(
306308
ip,
307-
reserved_net,
309+
&[reserved_net],
308310
Ipv4Net::from_str("10.2.0.128/25").unwrap(),
309311
);
310312
assert!(result.is_err());
@@ -318,7 +320,7 @@ mod tests {
318320
let reserved_net = Ipv4Net::from_str("10.1.2.0/30").unwrap();
319321
let result = validate(
320322
ip,
321-
reserved_net,
323+
&[reserved_net],
322324
Ipv4Net::from_str("10.1.2.128/25").unwrap(),
323325
);
324326
assert!(result.is_err());
@@ -332,7 +334,7 @@ mod tests {
332334
let reserved_net = Ipv4Net::from_str("10.1.2.0/30").unwrap();
333335
let result = validate(
334336
ip,
335-
reserved_net,
337+
&[reserved_net],
336338
Ipv4Net::from_str("10.1.3.128/25").unwrap(),
337339
);
338340
assert!(result.is_err());

tproxy/src/main_service.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,14 @@ impl ProxyState {
191191
if self.config.wg.ip.broadcast() == ip {
192192
continue;
193193
}
194-
if self.config.wg.reserved_net.contains(&ip) {
194+
if self.config.wg.ip.addr() == ip {
195195
continue;
196196
}
197+
for net in &self.config.wg.reserved_net {
198+
if net.contains(&ip) {
199+
continue;
200+
}
201+
}
197202
if self.state.allocated_addresses.contains(&ip) {
198203
continue;
199204
}

tproxy/tapp/tproxy-entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ renew_timeout = "5m"
112112
public_key = "$PUBLIC_KEY"
113113
private_key = "$PRIVATE_KEY"
114114
ip = "$IP"
115-
reserved_net = "$RESERVED_NET"
115+
reserved_net = ["$RESERVED_NET"]
116116
listen_port = 51820
117117
client_ip_range = "$CLIENT_RANGE"
118118
config_path = "$DATA_DIR/wireguard/wg-tproxy.conf"

tproxy/tproxy.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public_key = ""
3636
private_key = ""
3737
listen_port = 51820
3838
ip = "10.0.0.1/24"
39-
reserved_net = "10.0.0.1/32"
39+
reserved_net = ["10.0.0.1/32"]
4040
client_ip_range = "10.0.0.0/25"
4141
config_path = "/etc/wireguard/wg0.conf"
4242
interface = "wg0"

0 commit comments

Comments
 (0)