mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 02:09:06 +00:00
support mapping subnet proxy (#978)
- **support mapping subproxy network cidr** - **add command line option for proxy network mapping** - **fix Instance leak in tests.
This commit is contained in:
@@ -135,8 +135,6 @@ impl EasyTierLauncher {
|
||||
fetch_node_info: bool,
|
||||
) -> Result<(), anyhow::Error> {
|
||||
let mut instance = Instance::new(cfg);
|
||||
let peer_mgr = instance.get_peer_manager();
|
||||
|
||||
let mut tasks = JoinSet::new();
|
||||
|
||||
// Subscribe to global context events
|
||||
@@ -164,7 +162,7 @@ impl EasyTierLauncher {
|
||||
if fetch_node_info {
|
||||
let data_c = data.clone();
|
||||
let global_ctx_c = instance.get_global_ctx();
|
||||
let peer_mgr_c = peer_mgr.clone();
|
||||
let peer_mgr_c = instance.get_peer_manager().clone();
|
||||
let vpn_portal = instance.get_vpn_portal_inst();
|
||||
tasks.spawn(async move {
|
||||
loop {
|
||||
@@ -210,6 +208,9 @@ impl EasyTierLauncher {
|
||||
tasks.abort_all();
|
||||
drop(tasks);
|
||||
|
||||
instance.clear_resources().await;
|
||||
drop(instance);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -455,6 +456,36 @@ impl NetworkInstance {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_proxy_network_to_config(
|
||||
proxy_network: &str,
|
||||
cfg: &TomlConfigLoader,
|
||||
) -> Result<(), anyhow::Error> {
|
||||
let parts: Vec<&str> = proxy_network.split("->").collect();
|
||||
let real_cidr = parts[0]
|
||||
.parse()
|
||||
.with_context(|| format!("failed to parse proxy network: {}", parts[0]))?;
|
||||
|
||||
if parts.len() > 2 {
|
||||
return Err(anyhow::anyhow!(
|
||||
"invalid proxy network format: {}, support format: <real_cidr> or <real_cidr>-><mapped_cidr>, example:
|
||||
10.0.0.0/24 or 10.0.0.0/24->192.168.0.0/24",
|
||||
proxy_network
|
||||
));
|
||||
}
|
||||
|
||||
let mapped_cidr = if parts.len() == 2 {
|
||||
Some(
|
||||
parts[1]
|
||||
.parse()
|
||||
.with_context(|| format!("failed to parse mapped network: {}", parts[1]))?,
|
||||
)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
cfg.add_proxy_cidr(real_cidr, mapped_cidr);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub type NetworkingMethod = crate::proto::web::NetworkingMethod;
|
||||
pub type NetworkConfig = crate::proto::web::NetworkConfig;
|
||||
|
||||
@@ -534,10 +565,7 @@ impl NetworkConfig {
|
||||
cfg.set_listeners(listener_urls);
|
||||
|
||||
for n in self.proxy_cidrs.iter() {
|
||||
cfg.add_proxy_cidr(
|
||||
n.parse()
|
||||
.with_context(|| format!("failed to parse proxy network: {}", n))?,
|
||||
);
|
||||
add_proxy_network_to_config(n, &cfg)?;
|
||||
}
|
||||
|
||||
cfg.set_rpc_portal(
|
||||
|
||||
Reference in New Issue
Block a user