moved network requester into gateway
This commit is contained in:
Generated
+4
-31
@@ -5745,6 +5745,7 @@ dependencies = [
|
||||
"nym-credentials",
|
||||
"nym-credentials-interface",
|
||||
"nym-crypto",
|
||||
"nym-exit-policy",
|
||||
"nym-gateway-requests",
|
||||
"nym-gateway-stats-storage",
|
||||
"nym-gateway-storage",
|
||||
@@ -5752,10 +5753,12 @@ dependencies = [
|
||||
"nym-ip-packet-router",
|
||||
"nym-mixnet-client",
|
||||
"nym-network-defaults",
|
||||
"nym-network-requester",
|
||||
"nym-node-metrics",
|
||||
"nym-sdk",
|
||||
"nym-service-provider-requests-common",
|
||||
"nym-service-providers-common",
|
||||
"nym-socks5-proxy-helpers",
|
||||
"nym-socks5-requests",
|
||||
"nym-sphinx",
|
||||
"nym-statistics-common",
|
||||
"nym-task",
|
||||
@@ -6032,7 +6035,6 @@ dependencies = [
|
||||
"nym-id",
|
||||
"nym-ip-packet-requests",
|
||||
"nym-network-defaults",
|
||||
"nym-network-requester",
|
||||
"nym-sdk",
|
||||
"nym-service-provider-requests-common",
|
||||
"nym-service-providers-common",
|
||||
@@ -6204,34 +6206,6 @@ dependencies = [
|
||||
"utoipa-swagger-ui",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nym-network-requester"
|
||||
version = "1.1.62"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"futures",
|
||||
"humantime-serde",
|
||||
"nym-bin-common",
|
||||
"nym-client-core",
|
||||
"nym-config",
|
||||
"nym-exit-policy",
|
||||
"nym-id",
|
||||
"nym-network-defaults",
|
||||
"nym-sdk",
|
||||
"nym-service-providers-common",
|
||||
"nym-socks5-proxy-helpers",
|
||||
"nym-socks5-requests",
|
||||
"nym-sphinx",
|
||||
"nym-task",
|
||||
"reqwest 0.12.22",
|
||||
"serde",
|
||||
"thiserror 2.0.12",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nym-node"
|
||||
version = "1.17.0"
|
||||
@@ -6273,7 +6247,6 @@ dependencies = [
|
||||
"nym-ip-packet-router",
|
||||
"nym-metrics",
|
||||
"nym-mixnet-client",
|
||||
"nym-network-requester",
|
||||
"nym-node-metrics",
|
||||
"nym-node-requests",
|
||||
"nym-noise",
|
||||
|
||||
@@ -133,7 +133,6 @@ members = [
|
||||
"sdk/rust/nym-sdk",
|
||||
"service-providers/common",
|
||||
"service-providers/ip-packet-router",
|
||||
"service-providers/network-requester",
|
||||
"sqlx-pool-guard",
|
||||
"tools/echo-server",
|
||||
"tools/internal/contract-state-importer/importer-cli",
|
||||
@@ -169,7 +168,6 @@ default-members = [
|
||||
"nym-validator-rewarder",
|
||||
"nyx-chain-watcher",
|
||||
"service-providers/ip-packet-router",
|
||||
"service-providers/network-requester",
|
||||
"tools/nymvisor",
|
||||
]
|
||||
|
||||
|
||||
+10
-3
@@ -57,7 +57,6 @@ nym-gateway-stats-storage = { path = "../common/gateway-stats-storage" }
|
||||
nym-gateway-requests = { path = "../common/gateway-requests" }
|
||||
nym-mixnet-client = { path = "../common/client-libs/mixnet-client" }
|
||||
nym-network-defaults = { path = "../common/network-defaults" }
|
||||
nym-network-requester = { path = "../service-providers/network-requester" }
|
||||
nym-sdk = { path = "../sdk/rust/nym-sdk" }
|
||||
nym-sphinx = { path = "../common/nymsphinx" }
|
||||
nym-statistics-common = { path = "../common/statistics" }
|
||||
@@ -71,14 +70,22 @@ nym-wireguard = { path = "../common/wireguard" }
|
||||
nym-wireguard-private-metadata-server = { path = "../common/wireguard-private-metadata/server" }
|
||||
nym-wireguard-types = { path = "../common/wireguard-types", default-features = false }
|
||||
|
||||
nym-authenticator-requests = { path = "../common/authenticator-requests" }
|
||||
nym-client-core = { path = "../common/client-core", features = ["cli"] }
|
||||
nym-id = { path = "../common/nym-id" }
|
||||
nym-service-provider-requests-common = { path = "../common/service-provider-requests-common" }
|
||||
|
||||
|
||||
defguard_wireguard_rs = { workspace = true }
|
||||
|
||||
nym-service-providers-common = { path = "../service-providers/common" }
|
||||
|
||||
# authenticator specific
|
||||
nym-authenticator-requests = { path = "../common/authenticator-requests" }
|
||||
|
||||
# network-requester specific
|
||||
nym-socks5-proxy-helpers = { path = "../common/socks5/proxy-helpers" }
|
||||
nym-socks5-requests = { path = "../common/socks5/requests" }
|
||||
nym-exit-policy = { path = "../common/exit-policy", features = ["client"] }
|
||||
|
||||
[dev-dependencies]
|
||||
nym-gateway-storage = { path = "../common/gateway-storage", features = ["mock"] }
|
||||
nym-wireguard = { path = "../common/wireguard", features = ["mock"] }
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError;
|
||||
use crate::node::internal_service_providers::authenticator::error::AuthenticatorError;
|
||||
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
|
||||
use nym_client_core::error::ClientCoreError;
|
||||
use nym_gateway_stats_storage::error::StatsStorageError;
|
||||
use nym_gateway_storage::error::GatewayStorageError;
|
||||
use nym_ip_packet_router::error::IpPacketRouterError;
|
||||
use nym_network_requester::error::{ClientCoreError, NetworkRequesterError};
|
||||
use nym_validator_client::nyxd::error::NyxdError;
|
||||
use nym_validator_client::nyxd::{AccountId, Coin};
|
||||
use nym_validator_client::ValidatorClientError;
|
||||
use std::net::IpAddr;
|
||||
use thiserror::Error;
|
||||
|
||||
pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum GatewayError {
|
||||
#[error("the configured version of the gateway ({config_version}) is incompatible with the binary version ({binary_version})")]
|
||||
|
||||
@@ -11,4 +11,6 @@ pub mod node;
|
||||
pub use error::GatewayError;
|
||||
pub use node::GatewayTasksBuilder;
|
||||
|
||||
pub use node::internal_service_providers as service_providers;
|
||||
pub use node::internal_service_providers::authenticator as nym_authenticator;
|
||||
pub use node::internal_service_providers::network_requester as nym_network_requester;
|
||||
|
||||
@@ -5,7 +5,7 @@ use crate::node::client_handling::websocket::message_receiver::{
|
||||
MixMessageReceiver, MixMessageSender,
|
||||
};
|
||||
use futures::StreamExt;
|
||||
use nym_network_requester::{GatewayPacketRouter, PacketRouter};
|
||||
use nym_client_core::client::mix_traffic::transceiver::{GatewayPacketRouter, PacketRouter};
|
||||
use nym_sphinx::addressing::clients::Recipient;
|
||||
use nym_sphinx::DestinationAddressBytes;
|
||||
use nym_task::TaskClient;
|
||||
|
||||
@@ -6,6 +6,9 @@ use crate::node::client_handling::websocket::message_receiver::{
|
||||
MixMessageReceiver, MixMessageSender,
|
||||
};
|
||||
use crate::node::internal_service_providers::authenticator::Authenticator;
|
||||
use crate::node::internal_service_providers::network_requester::{
|
||||
error::NetworkRequesterError, NRServiceProviderBuilder,
|
||||
};
|
||||
use crate::GatewayError;
|
||||
use async_trait::async_trait;
|
||||
use futures::channel::{mpsc, oneshot};
|
||||
@@ -13,23 +16,35 @@ use nym_crypto::asymmetric::ed25519;
|
||||
use nym_ip_packet_router::error::IpPacketRouterError;
|
||||
use nym_ip_packet_router::IpPacketRouter;
|
||||
use nym_mixnet_client::forwarder::MixForwardingSender;
|
||||
use nym_network_requester::error::NetworkRequesterError;
|
||||
use nym_network_requester::NRServiceProviderBuilder;
|
||||
use nym_sdk::mixnet::Recipient;
|
||||
use nym_sdk::{GatewayTransceiver, LocalGateway, PacketRouter};
|
||||
use nym_task::TaskClient;
|
||||
use std::fmt::Display;
|
||||
use tokio::task::JoinHandle;
|
||||
use tracing::error;
|
||||
|
||||
pub use nym_client_core::client::{
|
||||
base_client::{
|
||||
non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend},
|
||||
storage::{
|
||||
gateways_storage::{
|
||||
CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails,
|
||||
},
|
||||
helpers::{set_active_gateway, store_gateway_details},
|
||||
GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent,
|
||||
},
|
||||
},
|
||||
key_manager::persistence::OnDiskKeys,
|
||||
mix_traffic::transceiver::*,
|
||||
};
|
||||
|
||||
pub mod authenticator;
|
||||
mod network_requester;
|
||||
pub mod network_requester;
|
||||
|
||||
pub trait LocalRecipient {
|
||||
fn address(&self) -> Recipient;
|
||||
}
|
||||
|
||||
impl LocalRecipient for nym_network_requester::core::OnStartData {
|
||||
impl LocalRecipient for network_requester::OnStartData {
|
||||
fn address(&self) -> Recipient {
|
||||
self.address
|
||||
}
|
||||
@@ -59,7 +74,7 @@ pub trait RunnableServiceProvider {
|
||||
#[async_trait]
|
||||
impl RunnableServiceProvider for NRServiceProviderBuilder {
|
||||
const NAME: &'static str = "network requester";
|
||||
type OnStartData = nym_network_requester::core::OnStartData;
|
||||
type OnStartData = network_requester::OnStartData;
|
||||
type Error = NetworkRequesterError;
|
||||
|
||||
async fn run_service_provider(self) -> Result<(), Self::Error> {
|
||||
|
||||
+4
-14
@@ -1,32 +1,26 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use nym_config::serde_helpers::de_maybe_stringified;
|
||||
use nym_network_defaults::mainnet;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::path::Path;
|
||||
use std::time::Duration;
|
||||
use url::Url;
|
||||
|
||||
pub use crate::config::persistence::NetworkRequesterPaths;
|
||||
pub use nym_client_core::config::Config as BaseClientConfig;
|
||||
pub use persistence::NetworkRequesterPaths;
|
||||
|
||||
mod persistence;
|
||||
|
||||
pub const DEFAULT_STANDARD_LIST_UPDATE_INTERVAL: Duration = Duration::from_secs(30 * 60);
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Config {
|
||||
#[serde(flatten)]
|
||||
pub base: BaseClientConfig,
|
||||
|
||||
#[serde(default)]
|
||||
pub network_requester: NetworkRequester,
|
||||
|
||||
pub storage_paths: NetworkRequesterPaths,
|
||||
|
||||
#[serde(default)]
|
||||
pub network_requester_debug: Debug,
|
||||
}
|
||||
|
||||
@@ -51,8 +45,7 @@ impl Config {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
|
||||
#[serde(default)]
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct NetworkRequester {
|
||||
/// specifies whether this network requester should run in 'open-proxy' mode
|
||||
/// and thus would attempt to resolve **ANY** request it receives.
|
||||
@@ -63,7 +56,6 @@ pub struct NetworkRequester {
|
||||
pub disable_poisson_rate: bool,
|
||||
|
||||
/// Specifies the url for an upstream source of the exit policy used by this node.
|
||||
#[serde(deserialize_with = "de_maybe_stringified")]
|
||||
pub upstream_exit_policy_url: Option<Url>,
|
||||
}
|
||||
|
||||
@@ -81,12 +73,10 @@ impl Default for NetworkRequester {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Serialize)]
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub struct Debug {
|
||||
/// Defines how often the standard allow list should get updated
|
||||
/// Deprecated
|
||||
#[serde(with = "humantime_serde")]
|
||||
pub standard_list_update_interval: Duration,
|
||||
}
|
||||
|
||||
+9
-7
@@ -1,11 +1,13 @@
|
||||
// Copyright 2020-2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::config::{BaseClientConfig, Config};
|
||||
use crate::error::NetworkRequesterError;
|
||||
use crate::reply::MixnetMessage;
|
||||
use crate::request_filter::RequestFilter;
|
||||
use crate::{reply, socks5};
|
||||
use crate::node::internal_service_providers::network_requester::config::{
|
||||
BaseClientConfig, Config,
|
||||
};
|
||||
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
|
||||
use crate::node::internal_service_providers::network_requester::reply::MixnetMessage;
|
||||
use crate::node::internal_service_providers::network_requester::request_filter::RequestFilter;
|
||||
use crate::node::internal_service_providers::network_requester::{reply, socks5};
|
||||
use async_trait::async_trait;
|
||||
use futures::channel::{mpsc, oneshot};
|
||||
use futures::stream::StreamExt;
|
||||
-6
@@ -58,12 +58,6 @@ pub enum NetworkRequesterError {
|
||||
source: PolicyError,
|
||||
},
|
||||
|
||||
#[error("the url provided for the upstream exit policy source is malformed: {source}")]
|
||||
MalformedExitPolicyUpstreamUrl {
|
||||
#[source]
|
||||
source: reqwest::Error,
|
||||
},
|
||||
|
||||
#[error("can't setup an exit policy without any upstream urls")]
|
||||
NoUpstreamExitPolicy,
|
||||
|
||||
@@ -1,2 +1,13 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
pub mod config;
|
||||
pub mod core;
|
||||
pub mod error;
|
||||
mod reply;
|
||||
pub mod request_filter;
|
||||
mod socks5;
|
||||
|
||||
pub use config::Config;
|
||||
pub use core::{NRServiceProvider, NRServiceProviderBuilder, OnStartData};
|
||||
pub use request_filter::RequestFilter;
|
||||
|
||||
+3
-8
@@ -1,12 +1,11 @@
|
||||
// Copyright 2023-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::error::NetworkRequesterError;
|
||||
use crate::node::internal_service_providers::network_requester::config::Config;
|
||||
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
|
||||
use nym_exit_policy::client::get_exit_policy;
|
||||
use nym_exit_policy::ExitPolicy;
|
||||
use nym_socks5_requests::RemoteAddress;
|
||||
use reqwest::IntoUrl;
|
||||
use tokio::net::lookup_host;
|
||||
use tracing::trace;
|
||||
use url::Url;
|
||||
@@ -23,11 +22,7 @@ impl From<ExitPolicy> for ExitPolicyRequestFilter {
|
||||
}
|
||||
|
||||
impl ExitPolicyRequestFilter {
|
||||
pub(crate) async fn new_upstream(url: impl IntoUrl) -> Result<Self, NetworkRequesterError> {
|
||||
let url = url
|
||||
.into_url()
|
||||
.map_err(|source| NetworkRequesterError::MalformedExitPolicyUpstreamUrl { source })?;
|
||||
|
||||
pub(crate) async fn new_upstream(url: Url) -> Result<Self, NetworkRequesterError> {
|
||||
Ok(ExitPolicyRequestFilter {
|
||||
upstream: Some(url.clone()),
|
||||
policy: get_exit_policy(url).await?,
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::error::NetworkRequesterError;
|
||||
use crate::node::internal_service_providers::network_requester::config::Config;
|
||||
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
|
||||
use nym_socks5_requests::RemoteAddress;
|
||||
use std::sync::Arc;
|
||||
use tracing::warn;
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
// Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::reply;
|
||||
use crate::reply::MixnetMessage;
|
||||
use crate::node::internal_service_providers::network_requester::reply;
|
||||
use crate::node::internal_service_providers::network_requester::reply::MixnetMessage;
|
||||
use nym_service_providers_common::interface::RequestVersion;
|
||||
use nym_socks5_proxy_helpers::connection_controller::ConnectionReceiver;
|
||||
use nym_socks5_proxy_helpers::proxy_runner::{MixProxySender, ProxyRunner};
|
||||
@@ -4,8 +4,11 @@
|
||||
use crate::config::Config;
|
||||
use crate::error::GatewayError;
|
||||
use crate::node::client_handling::websocket;
|
||||
use crate::node::internal_service_providers::authenticator::Authenticator;
|
||||
use crate::node::internal_service_providers::authenticator::{self};
|
||||
use crate::node::internal_service_providers::network_requester::{self, NRServiceProviderBuilder};
|
||||
use crate::node::internal_service_providers::{
|
||||
authenticator, ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder,
|
||||
ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder,
|
||||
};
|
||||
use crate::node::stale_data_cleaner::StaleMessagesCleaner;
|
||||
use futures::channel::oneshot;
|
||||
@@ -17,7 +20,6 @@ use nym_crypto::asymmetric::ed25519;
|
||||
use nym_ip_packet_router::IpPacketRouter;
|
||||
use nym_mixnet_client::forwarder::MixForwardingSender;
|
||||
use nym_network_defaults::NymNetworkDetails;
|
||||
use nym_network_requester::NRServiceProviderBuilder;
|
||||
use nym_node_metrics::events::MetricEventsSender;
|
||||
use nym_node_metrics::NymNodeMetrics;
|
||||
use nym_task::{ShutdownToken, TaskClient};
|
||||
@@ -33,10 +35,9 @@ use tracing::*;
|
||||
use zeroize::Zeroizing;
|
||||
|
||||
pub(crate) mod client_handling;
|
||||
pub(crate) mod internal_service_providers;
|
||||
pub mod internal_service_providers;
|
||||
mod stale_data_cleaner;
|
||||
|
||||
use crate::node::internal_service_providers::authenticator::Authenticator;
|
||||
pub use client_handling::active_clients::ActiveClientsStore;
|
||||
pub use nym_gateway_stats_storage::PersistentStatsStorage;
|
||||
pub use nym_gateway_storage::{
|
||||
@@ -48,7 +49,7 @@ pub use nym_sdk::{NymApiTopologyProvider, NymApiTopologyProviderConfig, UserAgen
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct LocalNetworkRequesterOpts {
|
||||
pub config: nym_network_requester::Config,
|
||||
pub config: network_requester::Config,
|
||||
|
||||
pub custom_mixnet_path: Option<PathBuf>,
|
||||
}
|
||||
|
||||
@@ -102,7 +102,6 @@ nym-node-metrics = { path = "nym-node-metrics" }
|
||||
|
||||
# nodes:
|
||||
nym-gateway = { path = "../gateway" }
|
||||
nym-network-requester = { path = "../service-providers/network-requester" }
|
||||
nym-ip-packet-router = { path = "../service-providers/ip-packet-router" }
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ use crate::cli::helpers::ConfigArgs;
|
||||
use crate::config::upgrade_helpers::try_load_current_config;
|
||||
use crate::node::helpers::load_ed25519_identity_public_key;
|
||||
use crate::node::ServiceProvidersData;
|
||||
use nym_network_requester::{CustomGatewayDetails, GatewayDetails, GatewayRegistration};
|
||||
use nym_gateway::service_providers::{CustomGatewayDetails, GatewayDetails, GatewayRegistration};
|
||||
use std::fs;
|
||||
|
||||
#[derive(Debug, clap::Args)]
|
||||
|
||||
@@ -8,6 +8,7 @@ use nym_gateway::node::{
|
||||
LocalAuthenticatorOpts, LocalIpPacketRouterOpts, LocalNetworkRequesterOpts,
|
||||
};
|
||||
use nym_gateway::nym_authenticator;
|
||||
use nym_gateway::nym_network_requester;
|
||||
|
||||
// a temporary solution until further refactoring is made
|
||||
fn ephemeral_gateway_config(config: &Config) -> nym_gateway::config::Config {
|
||||
|
||||
@@ -7,7 +7,7 @@ use crate::{config::*, error::KeyIOFailure};
|
||||
use nym_client_core_config_types::DebugConfig as ClientDebugConfig;
|
||||
use nym_config::serde_helpers::de_maybe_port;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_network_requester::{
|
||||
use nym_gateway::service_providers::{
|
||||
set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails,
|
||||
GatewayDetails,
|
||||
};
|
||||
|
||||
@@ -41,12 +41,12 @@ use crate::node::shared_network::{
|
||||
use nym_bin_common::bin_info;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_gateway::node::{ActiveClientsStore, GatewayTasksBuilder};
|
||||
use nym_mixnet_client::client::ActiveConnections;
|
||||
use nym_mixnet_client::forwarder::MixForwardingSender;
|
||||
use nym_network_requester::{
|
||||
use nym_gateway::service_providers::{
|
||||
set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails,
|
||||
GatewayDetails, GatewayRegistration,
|
||||
};
|
||||
use nym_mixnet_client::client::ActiveConnections;
|
||||
use nym_mixnet_client::forwarder::MixForwardingSender;
|
||||
use nym_node_metrics::events::MetricEventsSender;
|
||||
use nym_node_metrics::NymNodeMetrics;
|
||||
use nym_node_requests::api::v1::node::models::{AnnouncePorts, NodeDescription};
|
||||
|
||||
@@ -25,7 +25,6 @@ nym-exit-policy = { path = "../../common/exit-policy" }
|
||||
nym-id = { path = "../../common/nym-id" }
|
||||
nym-ip-packet-requests = { path = "../../common/ip-packet-requests" }
|
||||
nym-network-defaults = { path = "../../common/network-defaults" }
|
||||
nym-network-requester = { path = "../network-requester" }
|
||||
nym-sdk = { path = "../../sdk/rust/nym-sdk" }
|
||||
nym-service-provider-requests-common = { path = "../../common/service-provider-requests-common" }
|
||||
nym-service-providers-common = { path = "../common" }
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
# Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
[package]
|
||||
name = "nym-network-requester"
|
||||
license = "GPL-3.0"
|
||||
version = "1.1.62"
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
rust-version = "1.70"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = { workspace = true }
|
||||
async-trait = { workspace = true }
|
||||
futures = { workspace = true }
|
||||
humantime-serde = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
reqwest = { workspace = true, features = ["json"] }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
thiserror = { workspace = true }
|
||||
tokio = { workspace = true, features = ["net", "rt-multi-thread", "macros"] }
|
||||
url = { workspace = true }
|
||||
|
||||
# internal
|
||||
nym-bin-common = { path = "../../common/bin-common" }
|
||||
nym-client-core = { path = "../../common/client-core", features = ["fs-gateways-storage", "fs-surb-storage"] }
|
||||
nym-config = { path = "../../common/config" }
|
||||
nym-network-defaults = { path = "../../common/network-defaults" }
|
||||
nym-sdk = { path = "../../sdk/rust/nym-sdk" }
|
||||
nym-service-providers-common = { path = "../common" }
|
||||
nym-socks5-proxy-helpers = { path = "../../common/socks5/proxy-helpers" }
|
||||
nym-socks5-requests = { path = "../../common/socks5/requests" }
|
||||
nym-sphinx = { path = "../../common/nymsphinx" }
|
||||
nym-task = { path = "../../common/task" }
|
||||
nym-exit-policy = { path = "../../common/exit-policy", features = ["client"] }
|
||||
nym-id = { path = "../../common/nym-id" }
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
-->
|
||||
|
||||
## License
|
||||
|
||||
Copyright (C) 2022 Nym Technologies SA <contact@nymtech.net>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
## Network requester
|
||||
|
||||
The network requester is used to interpret socks5 client messages that need to
|
||||
be proxied to a running service i.e. a host and a port.
|
||||
|
||||
If you have a service that you want to expose to the mixnet, you'd need to
|
||||
first run the native client and provide the client address to your users that
|
||||
will use it in their socks5 configuration.
|
||||
|
||||
After starting the native client, start the network requester and configure it,
|
||||
setting your service's endpoint in
|
||||
`${HOME}/.nym/service-providers/network-requester/allowed.list`
|
||||
|
||||
Running in `open-proxy` mode allows any traffic to be proxied by the network
|
||||
requester.
|
||||
|
||||
### Statistics service
|
||||
The network requester can be ran as a gatherer of statistics for all
|
||||
the services it proxies. For that, run the binary with the
|
||||
`enable-statistics` flag enabled. Anonymized statistics are then sent to
|
||||
a central server, through the mixnet.
|
||||
@@ -1,74 +0,0 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use nym_sdk::mixnet::{
|
||||
IncludedSurbs, MixnetClient, MixnetMessageSender, Recipient, ReconstructedMessage,
|
||||
};
|
||||
use nym_service_providers_common::interface::{
|
||||
ProviderInterfaceVersion, Request, Response, ResponseContent,
|
||||
};
|
||||
use nym_socks5_requests::{QueryRequest, Socks5ProtocolVersion, Socks5Request, Socks5Response};
|
||||
|
||||
fn parse_response(received: Vec<ReconstructedMessage>) -> Socks5Response {
|
||||
assert_eq!(received.len(), 1);
|
||||
let response: Response<Socks5Request> = Response::try_from_bytes(&received[0].message).unwrap();
|
||||
match response.content {
|
||||
ResponseContent::Control(control) => panic!("unexpected control response: {control:?}"),
|
||||
ResponseContent::ProviderData(data) => data,
|
||||
}
|
||||
}
|
||||
|
||||
async fn wait_for_response(client: &mut MixnetClient) -> Socks5Response {
|
||||
loop {
|
||||
let next = client.wait_for_messages().await.unwrap();
|
||||
if !next.is_empty() {
|
||||
return parse_response(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
//nym_bin_common::logging::setup_logging();
|
||||
let mut client = MixnetClient::connect_new().await.unwrap();
|
||||
let provider: Recipient = "AN8eLxYWFitCkMn92zim3PrPszxJZDYyFFKP7qnnAAew.8UAxL3LwQBis6WpM3GGXaqKGaVdnLCpGJWumHT6KNdTH@77TSuVU8d1oXKbPzjec2xh4i3Wj5WwUyy9Lr36sm8gZm".parse().unwrap();
|
||||
|
||||
let open_proxy_request = Request::new_provider_data(
|
||||
ProviderInterfaceVersion::new_current(),
|
||||
Socks5Request::new_query(
|
||||
Socks5ProtocolVersion::new_current(),
|
||||
QueryRequest::OpenProxy,
|
||||
),
|
||||
);
|
||||
let description_request = Request::new_provider_data(
|
||||
ProviderInterfaceVersion::new_current(),
|
||||
Socks5Request::new_query(
|
||||
Socks5ProtocolVersion::new_current(),
|
||||
QueryRequest::Description,
|
||||
),
|
||||
);
|
||||
println!("Sending 'OpenProxy' query...");
|
||||
client
|
||||
.send_message(
|
||||
provider,
|
||||
open_proxy_request.into_bytes(),
|
||||
IncludedSurbs::new(10),
|
||||
)
|
||||
.await?;
|
||||
let response = wait_for_response(&mut client).await;
|
||||
println!("response to 'OpenProxy' query: {response:#?}");
|
||||
|
||||
println!("Sending 'Description' query...");
|
||||
client
|
||||
.send_message(
|
||||
provider,
|
||||
description_request.into_bytes(),
|
||||
IncludedSurbs::none(),
|
||||
)
|
||||
.await?;
|
||||
let response = wait_for_response(&mut client).await;
|
||||
println!("response to 'Description' query: {response:#?}");
|
||||
|
||||
client.disconnect().await;
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
pub mod config;
|
||||
pub mod core;
|
||||
pub mod error;
|
||||
mod reply;
|
||||
pub mod request_filter;
|
||||
mod socks5;
|
||||
|
||||
pub use crate::core::{NRServiceProvider, NRServiceProviderBuilder};
|
||||
pub use config::Config;
|
||||
pub use nym_client_core::{
|
||||
client::{
|
||||
base_client::{
|
||||
non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend},
|
||||
storage::{
|
||||
gateways_storage::{
|
||||
CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails,
|
||||
},
|
||||
helpers::{set_active_gateway, store_gateway_details},
|
||||
GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent,
|
||||
},
|
||||
},
|
||||
key_manager::persistence::OnDiskKeys,
|
||||
mix_traffic::transceiver::*,
|
||||
},
|
||||
init::{
|
||||
generate_new_client_keys, setup_gateway,
|
||||
types::{GatewaySelectionSpecification, GatewaySetup, InitResults, InitialisationResult},
|
||||
},
|
||||
};
|
||||
pub use request_filter::RequestFilter;
|
||||
Reference in New Issue
Block a user