diff --git a/Cargo.lock b/Cargo.lock index aabfb9d2..1c7e1d69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1754,6 +1754,24 @@ dependencies = [ "url", ] +[[package]] +name = "example-ha-cluster" +version = "0.1.0" +dependencies = [ + "brocade", + "cidr", + "env_logger", + "harmony", + "harmony_macros", + "harmony_secret", + "harmony_tui", + "harmony_types", + "log", + "serde", + "tokio", + "url", +] + [[package]] name = "example-kube-rs" version = "0.1.0" @@ -1942,9 +1960,28 @@ dependencies = [ "cidr", "env_logger", "harmony", + "harmony_cli", "harmony_macros", "harmony_secret", - "harmony_tui", + "harmony_types", + "log", + "serde", + "tokio", + "url", +] + +[[package]] +name = "example-opnsense-node-exporter" +version = "0.1.0" +dependencies = [ + "async-trait", + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_secret", + "harmony_secret_derive", "harmony_types", "log", "serde", @@ -1982,25 +2019,6 @@ dependencies = [ "url", ] -[[package]] -name = "example-opnsense-node-exporter" -version = "0.1.0" -dependencies = [ - "async-trait", - "cidr", - "env_logger", - "harmony", - "harmony_cli", - "harmony_macros", - "harmony_secret", - "harmony_secret_derive", - "harmony_types", - "log", - "serde", - "tokio", - "url", -] - [[package]] name = "example-pxe" version = "0.1.0" @@ -3464,6 +3482,25 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "json-prompt" +version = "0.1.0" +dependencies = [ + "brocade", + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_secret", + "harmony_secret_derive", + "harmony_types", + "log", + "serde", + "tokio", + "url", +] + [[package]] name = "jsonpath-rust" version = "0.7.5" @@ -6062,6 +6099,25 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "sttest" +version = "0.1.0" +dependencies = [ + "brocade", + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_secret", + "harmony_secret_derive", + "harmony_types", + "log", + "serde", + "tokio", + "url", +] + [[package]] name = "subtle" version = "2.6.1" @@ -7357,7 +7413,7 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yaserde" version = "0.12.0" -source = "git+https://github.com/jggc/yaserde.git#adfdb1c5f4d054f114e5bd0ea7bda9c07a369def" +source = "git+https://github.com/jggc/yaserde.git#2eacb304113beee7270a10b81046d40ed3a99550" dependencies = [ "log", "xml-rs", @@ -7366,7 +7422,7 @@ dependencies = [ [[package]] name = "yaserde_derive" version = "0.12.0" -source = "git+https://github.com/jggc/yaserde.git#adfdb1c5f4d054f114e5bd0ea7bda9c07a369def" +source = "git+https://github.com/jggc/yaserde.git#2eacb304113beee7270a10b81046d40ed3a99550" dependencies = [ "heck", "log", diff --git a/examples/sttest/Cargo.toml b/examples/sttest/Cargo.toml new file mode 100644 index 00000000..b8f90f8c --- /dev/null +++ b/examples/sttest/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "sttest" +edition = "2024" +version.workspace = true +readme.workspace = true +license.workspace = true +publish = false + +[dependencies] +harmony = { path = "../../harmony" } +harmony_cli = { path = "../../harmony_cli" } +harmony_types = { path = "../../harmony_types" } +cidr = { workspace = true } +tokio = { workspace = true } +harmony_macros = { path = "../../harmony_macros" } +harmony_secret = { path = "../../harmony_secret" } +harmony_secret_derive = { path = "../../harmony_secret_derive" } +log = { workspace = true } +env_logger = { workspace = true } +url = { workspace = true } +serde = { workspace = true } +brocade = { path = "../../brocade" } diff --git a/examples/sttest/data b/examples/sttest/data new file mode 120000 index 00000000..b8fb52e7 --- /dev/null +++ b/examples/sttest/data @@ -0,0 +1 @@ +../../data/ \ No newline at end of file diff --git a/examples/sttest/env.sh b/examples/sttest/env.sh new file mode 100644 index 00000000..4a3c24ee --- /dev/null +++ b/examples/sttest/env.sh @@ -0,0 +1,4 @@ +export HARMONY_SECRET_NAMESPACE=sttest0 +export HARMONY_SECRET_STORE=file +export HARMONY_DATABASE_URL=sqlite://harmony_sttest0.sqlite +export RUST_LOG=info diff --git a/examples/sttest/src/main.rs b/examples/sttest/src/main.rs new file mode 100644 index 00000000..ba049cfa --- /dev/null +++ b/examples/sttest/src/main.rs @@ -0,0 +1,41 @@ +mod topology; + +use crate::topology::{get_inventory, get_topology}; +use harmony::{ + config::secret::SshKeyPair, + data::{FileContent, FilePath}, + modules::{ + inventory::HarmonyDiscoveryStrategy, + okd::{installation::OKDInstallationPipeline, ipxe::OKDIpxeScore}, + }, + score::Score, + topology::HAClusterTopology, +}; +use harmony_secret::SecretManager; + +#[tokio::main] +async fn main() { + // env_logger::init(); + + let inventory = get_inventory(); + let topology = get_topology().await; + + let ssh_key = SecretManager::get_or_prompt::().await.unwrap(); + + let mut scores: Vec>> = vec![Box::new(OKDIpxeScore { + kickstart_filename: "inventory.kickstart".to_string(), + harmony_inventory_agent: "harmony_inventory_agent".to_string(), + cluster_pubkey: FileContent { + path: FilePath::Relative("cluster_ssh_key.pub".to_string()), + content: ssh_key.public, + }, + })]; + + // let mut scores: Vec>> = vec![]; + scores + .append(&mut OKDInstallationPipeline::get_all_scores(HarmonyDiscoveryStrategy::MDNS).await); + + harmony_cli::run(inventory, topology, scores, None) + .await + .unwrap(); +} diff --git a/examples/sttest/src/topology.rs b/examples/sttest/src/topology.rs new file mode 100644 index 00000000..ca797eb0 --- /dev/null +++ b/examples/sttest/src/topology.rs @@ -0,0 +1,99 @@ +use cidr::Ipv4Cidr; +use harmony::{ + hardware::{Location, SwitchGroup}, + infra::{brocade::UnmanagedSwitch, opnsense::OPNSenseManagementInterface}, + inventory::Inventory, + topology::{HAClusterTopology, LogicalHost, UnmanagedRouter}, +}; +use harmony_macros::{ip, ipv4}; +use harmony_secret::{Secret, SecretManager}; +use serde::{Deserialize, Serialize}; +use std::{ + net::IpAddr, + sync::{Arc, OnceLock}, +}; + +#[derive(Secret, Serialize, Deserialize, Debug, PartialEq)] +struct OPNSenseFirewallConfig { + username: String, + password: String, +} + +pub async fn get_topology() -> HAClusterTopology { + let firewall = harmony::topology::LogicalHost { + ip: ip!("192.168.40.1"), + name: String::from("fw0"), + }; + + let switch_client = UnmanagedSwitch::init() + .await + .expect("Failed to connect to switch"); + + let switch_client = Arc::new(switch_client); + + let config = SecretManager::get_or_prompt::().await; + let config = config.unwrap(); + + let opnsense = Arc::new( + harmony::infra::opnsense::OPNSenseFirewall::new( + firewall, + None, + &config.username, + &config.password, + ) + .await, + ); + let lan_subnet = ipv4!("192.168.40.0"); + let gateway_ipv4 = ipv4!("192.168.40.1"); + let gateway_ip = IpAddr::V4(gateway_ipv4); + harmony::topology::HAClusterTopology { + kubeconfig: None, + domain_name: "sttest0.harmony.mcd".to_string(), + router: Arc::new(UnmanagedRouter::new( + gateway_ip, + Ipv4Cidr::new(lan_subnet, 24).unwrap(), + )), + load_balancer: opnsense.clone(), + firewall: opnsense.clone(), + tftp_server: opnsense.clone(), + http_server: opnsense.clone(), + dhcp_server: opnsense.clone(), + dns_server: opnsense.clone(), + control_plane: vec![ + LogicalHost { + ip: ip!("192.168.40.20"), + name: "cp0".to_string(), + }, + LogicalHost { + ip: ip!("192.168.40.21"), + name: "cp1".to_string(), + }, + LogicalHost { + ip: ip!("192.168.40.22"), + name: "cp2".to_string(), + }, + ], + bootstrap_host: LogicalHost { + ip: ip!("192.168.40.10"), + name: "bootstrap".to_string(), + }, + workers: vec![LogicalHost { + ip: ip!("192.168.40.30"), + name: "wk0".to_string(), + }], + node_exporter: opnsense.clone(), + switch_client: switch_client.clone(), + network_manager: OnceLock::new(), + } +} + +pub fn get_inventory() -> Inventory { + Inventory { + location: Location::new("Sylvain's basement".to_string(), "Charlesbourg".to_string()), + switch: SwitchGroup::from([]), + firewall_mgmt: Box::new(OPNSenseManagementInterface::new()), + storage_host: vec![], + worker_host: vec![], + control_plane_host: vec![], + } +} diff --git a/harmony/src/modules/okd/bootstrap_04_workers.rs b/harmony/src/modules/okd/bootstrap_04_workers.rs index 53e32c5e..4dbfdecb 100644 --- a/harmony/src/modules/okd/bootstrap_04_workers.rs +++ b/harmony/src/modules/okd/bootstrap_04_workers.rs @@ -22,7 +22,7 @@ pub struct OKDSetup04WorkersScore { impl Score for OKDSetup04WorkersScore { fn create_interpret(&self) -> Box> { Box::new(OKDNodeInterpret::new( - HostRole::ControlPlane, + HostRole::Worker, self.discovery_strategy.clone(), )) } diff --git a/opnsense-config-xml/Cargo.toml b/opnsense-config-xml/Cargo.toml index ef0d4265..26efa50e 100644 --- a/opnsense-config-xml/Cargo.toml +++ b/opnsense-config-xml/Cargo.toml @@ -9,6 +9,7 @@ license.workspace = true serde = { version = "1.0.123", features = [ "derive" ] } log = { workspace = true } env_logger = { workspace = true } +#yaserde = { path = "../../yaserde/yaserde" } yaserde = { git = "https://github.com/jggc/yaserde.git" } yaserde_derive = { git = "https://github.com/jggc/yaserde.git" } xml-rs = "0.8" diff --git a/opnsense-config-xml/src/data/caddy.rs b/opnsense-config-xml/src/data/caddy.rs index 80088b9d..4c150fc2 100644 --- a/opnsense-config-xml/src/data/caddy.rs +++ b/opnsense-config-xml/src/data/caddy.rs @@ -8,6 +8,8 @@ pub struct Pischem { #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct Caddy { + #[yaserde(attribute = true)] + pub version: Option, pub general: CaddyGeneral, pub reverseproxy: MaybeString, } diff --git a/opnsense-config-xml/src/data/dnsmasq.rs b/opnsense-config-xml/src/data/dnsmasq.rs index fe76b663..d66ba2df 100644 --- a/opnsense-config-xml/src/data/dnsmasq.rs +++ b/opnsense-config-xml/src/data/dnsmasq.rs @@ -8,6 +8,8 @@ pub struct DnsMasq { pub version: String, #[yaserde(attribute = true)] pub persisted_at: Option, + #[yaserde(attribute = true)] + pub description: Option, pub enable: u8, pub regdhcp: u8, @@ -23,7 +25,7 @@ pub struct DnsMasq { pub dnssec: u8, pub regdhcpdomain: MaybeString, pub interface: Option, - pub port: Option, + pub port: Option, pub dns_forward_max: MaybeString, pub cache_size: MaybeString, pub local_ttl: MaybeString, @@ -73,6 +75,8 @@ pub struct Dhcp { pub reply_delay: MaybeString, pub enable_ra: u8, pub nosync: u8, + pub log_dhcp: Option, + pub log_quiet: Option, } // Represents a single element. diff --git a/opnsense-config-xml/src/data/haproxy.rs b/opnsense-config-xml/src/data/haproxy.rs index 1114038b..1f96022a 100644 --- a/opnsense-config-xml/src/data/haproxy.rs +++ b/opnsense-config-xml/src/data/haproxy.rs @@ -598,7 +598,7 @@ pub struct HAProxyServer { pub ssl_client_certificate: MaybeString, #[yaserde(rename = "maxConnections")] pub max_connections: MaybeString, - pub weight: Option, + pub weight: Option, #[yaserde(rename = "checkInterval")] pub check_interval: MaybeString, #[yaserde(rename = "checkDownInterval")] diff --git a/opnsense-config-xml/src/data/opnsense.rs b/opnsense-config-xml/src/data/opnsense.rs index ae277dc5..c1e2acc4 100644 --- a/opnsense-config-xml/src/data/opnsense.rs +++ b/opnsense-config-xml/src/data/opnsense.rs @@ -30,6 +30,7 @@ pub struct OPNsense { pub staticroutes: StaticRoutes, pub ca: MaybeString, pub gateways: Option, + pub hostwatch: Option, pub cert: Vec, pub dhcpdv6: DhcpDv6, pub virtualip: VirtualIp, @@ -162,11 +163,15 @@ pub struct Username { #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct Sysctl { + #[yaserde(attribute = true)] + pub version: Option, pub item: Vec, } #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct SysctlItem { + #[yaserde(attribute = true)] + pub uuid: Option, pub descr: Option, pub tunable: Option, pub value: Option, @@ -174,6 +179,8 @@ pub struct SysctlItem { #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct System { + #[yaserde(attribute = true)] + pub uuid: Option, pub use_mfs_tmp: Option, pub use_mfs_var: Option, pub serialspeed: u32, @@ -268,6 +275,8 @@ pub struct Bogons { #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct Group { + #[yaserde(attribute = true)] + pub uuid: Option, pub name: String, pub description: Option, pub scope: String, @@ -280,6 +289,8 @@ pub struct Group { #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct User { + #[yaserde(attribute = true)] + pub uuid: Option, pub name: String, pub descr: MaybeString, pub scope: String, @@ -463,6 +474,8 @@ pub struct OPNsenseXmlSection { pub openvpn: ConfigOpenVPN, #[yaserde(rename = "Gateways")] pub gateways: RawXml, + #[yaserde(rename = "Hostwatch")] + pub hostwatch: Option, #[yaserde(rename = "HAProxy")] pub haproxy: Option, } @@ -1143,9 +1156,9 @@ pub struct UnboundGeneral { pub dns64: MaybeString, pub dns64prefix: MaybeString, pub noarecords: MaybeString, - pub regdhcp: Option, + pub regdhcp: Option, pub regdhcpdomain: MaybeString, - pub regdhcpstatic: Option, + pub regdhcpstatic: Option, pub noreglladdr6: MaybeString, pub noregrecords: MaybeString, pub txtsupport: MaybeString, @@ -1153,27 +1166,27 @@ pub struct UnboundGeneral { pub local_zone_type: String, pub outgoing_interface: MaybeString, pub enable_wpad: MaybeString, - pub safesearch: MaybeString, + pub safesearch: Option, } #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct Advanced { - pub hideidentity: Option, - pub hideversion: Option, - pub prefetch: Option, - pub prefetchkey: Option, - pub dnssecstripped: Option, + pub hideidentity: Option, + pub hideversion: Option, + pub prefetch: Option, + pub prefetchkey: Option, + pub dnssecstripped: Option, pub aggressivensec: Option, - pub serveexpired: Option, + pub serveexpired: Option, pub serveexpiredreplyttl: MaybeString, pub serveexpiredttl: MaybeString, - pub serveexpiredttlreset: Option, + pub serveexpiredttlreset: Option, pub serveexpiredclienttimeout: MaybeString, - pub qnameminstrict: Option, - pub extendedstatistics: Option, - pub logqueries: Option, - pub logreplies: Option, - pub logtagqueryreply: Option, + pub qnameminstrict: Option, + pub extendedstatistics: Option, + pub logqueries: Option, + pub logreplies: Option, + pub logtagqueryreply: Option, pub logservfail: MaybeString, pub loglocalactions: MaybeString, pub logverbosity: i32, @@ -1216,12 +1229,12 @@ pub struct Dnsbl { pub blocklists: Option, pub wildcards: Option, pub address: Option, - pub nxdomain: Option, + pub nxdomain: Option, } #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] pub struct Forwarding { - pub enabled: Option, + pub enabled: Option, } #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] @@ -1243,7 +1256,7 @@ pub struct Host { pub ttl: Option, pub server: String, pub description: Option, - pub txtdata: MaybeString, + pub txtdata: Option, } impl Host { @@ -1259,7 +1272,7 @@ impl Host { ttl: Some(MaybeString::default()), mx: MaybeString::default(), description: None, - txtdata: MaybeString::default(), + txtdata: Some(MaybeString::default()), } } } @@ -1421,7 +1434,7 @@ pub struct StaticRoutes { #[yaserde(attribute = true)] pub version: String, #[yaserde(rename = "route")] - pub route: Option, + pub route: Option, } #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] diff --git a/opnsense-config/src/config/config.rs b/opnsense-config/src/config/config.rs index 7c292c8e..cbb39ac4 100644 --- a/opnsense-config/src/config/config.rs +++ b/opnsense-config/src/config/config.rs @@ -234,14 +234,15 @@ mod tests { #[tokio::test] async fn test_load_config_from_local_file() { for path in [ - // "src/tests/data/config-opnsense-25.1.xml", - // "src/tests/data/config-vm-test.xml", + "src/tests/data/config-opnsense-25.1.xml", + "src/tests/data/config-vm-test.xml", "src/tests/data/config-structure.xml", "src/tests/data/config-full-1.xml", // "src/tests/data/config-full-ncd0.xml", // "src/tests/data/config-full-25.7.xml", // "src/tests/data/config-full-25.7-dummy-dnsmasq-options.xml", "src/tests/data/config-25.7-dnsmasq-static-host.xml", + "src/tests/data/config-full-25.7.11_2.xml", ] { let mut test_file_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); test_file_path.push(path); diff --git a/opnsense-config/src/modules/dns.rs b/opnsense-config/src/modules/dns.rs index 517b5ea6..42c8b54b 100644 --- a/opnsense-config/src/modules/dns.rs +++ b/opnsense-config/src/modules/dns.rs @@ -1,4 +1,4 @@ -use opnsense_config_xml::{Host, OPNsense}; +use opnsense_config_xml::{Host, MaybeString, OPNsense}; pub struct UnboundDnsConfig<'a> { opnsense: &'a mut OPNsense, @@ -31,7 +31,8 @@ impl<'a> UnboundDnsConfig<'a> { None => todo!("Handle case where unboundplus is not used"), }; - unbound.general.regdhcp = Some(register as i8); - unbound.general.regdhcpstatic = Some(register as i8); + unbound.general.regdhcp = Some(MaybeString::from_bool_as_int("regdhcp", register)); + unbound.general.regdhcpstatic = + Some(MaybeString::from_bool_as_int("regdhcpstatic", register)); } } diff --git a/opnsense-config/src/tests/data/config-full-25.7.11_2.xml b/opnsense-config/src/tests/data/config-full-25.7.11_2.xml new file mode 100644 index 00000000..690844f3 --- /dev/null +++ b/opnsense-config/src/tests/data/config-full-25.7.11_2.xml @@ -0,0 +1,2376 @@ + + + opnsense + + + 115200 + video + normal + fw0 + sttest0.harmony.mcd + + admins + System Administrators + system + 1999 + 0 + page-all + + + + root + System Administrator + system + $2y$10$YRVoF4SgskIsrXOvOQjGieB9XqHPRra9R7d80B3BZdbY/j21TwBfS + + 0 + 0 + + + + + + + + + + + + + Etc/UTC + 0.opnsense.pool.ntp.org 1.opnsense.pool.ntp.org 2.opnsense.pool.ntp.org 3.opnsense.pool.ntp.org + + https + 69355bf776c20 + 8443 + + + + + 1 + yes + 1 + 1 + 1 + 1 + 1 + 1 + hadp + hadp + hadp + + monthly + + 1 + 1 + + admins + 1 + + + + + + enabled + 1 + + 1 + + + -1 + -1 + + + + os-caddy,os-haproxy,os-tftp + + + 0 + + 1 + + en_US + + none + none + none + none + none + none + none + none + + + + em0 + + 1 + + dhcp + + + 32 + 1 + + 60 + 10 + + + + + SavedCfg + + + + + advanced + + + + + bge0 + 1 + 192.168.40.1 + 24 + + + + + + + + + 1 + lo0 + Loopback + 1 + 127.0.0.1 + none + 1 + 8 + ::1 + 128 + + + bge1 + 1 + + + + + + + public + + + + + automatic + + + + + pass + lan + inet + Default allow LAN to any rule + + lan + + + + + + + pass + lan + inet6 + Default allow LAN IPv6 to any rule + + lan + + + + + + + pass + lan + inet + keep state + Allow from 192.168.2.0/24 + in + 1 + tcp + +
192.168.2.0/24
+ + + 1 + + + root@192.168.40.112 + + /firewall_rules_edit.php made changes + + + root@192.168.40.112 + + /firewall_rules_edit.php made changes + +
+
+ + + + + 0.opnsense.pool.ntp.org + + + root@192.168.40.112 + /system_general.php made changes + + + + + + + + + + + + + + + v9 + + + + 0 + + 1800 + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + wan + 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12 + + + W0D23 + 4 + + + + + + + 0 + 0 + 0 + + + + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + 16 + 32 + 4 + 1000 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + + + + + + + 0 + + + + + + + 0 + 0 + + + ipsec + 0 + 1 + + + + + + + + + + + + + 0 + 127.0.0.1 + 8000 + + + + + 0 + 0 + + 4000 + 1 + raw + + + 0 + + 2 + + + + + + + + 0 + 0 + + 4000 + 1 + + + 0 + + 2 + + + + + + + + + + 0 + 120 + 120 + 127.0.0.1 + 25 + + + 0 + auto + 1 + + + + + 0 + root + + 2812 + + + 5 + 1 + + + 0 + root@localhost.local + 0 + + + + + + + 1 + $HOST + + system + + + + 300 + 30 +
+ + + + 0c5ad352-6965-4fc3-81a6-6b7d68db1e1c,bed84737-9833-4356-b3f2-e6be29222bf9,d494e04e-72a2-44f9-bdee-84b0b762390a,e15baa92-7793-4e7c-900c-526f3bf443bf + + + + + 1 + RootFs + + filesystem + + + / + 300 + 30 +
+ + + + 491c5187-e8f8-4ac0-b17e-4981ce765e5c + + + + + 0 + carp_status_change + + custom + + + /usr/local/opnsense/scripts/monit/carp_status.php + 300 + 30 +
+ + + + 33846c3c-4b3d-426c-88fc-8010ae579fbb + + + + + 0 + gateway_alert + + custom + + + /usr/local/opnsense/scripts/monit/gateway_alert.php + 300 + 30 +
+ + + + ef40e63c-036c-4874-b322-a53667179644 + + + + + Ping + NetworkPing + failed ping + alert + + + + NetworkLink + NetworkInterface + failed link + alert + + + + NetworkSaturation + NetworkInterface + saturation is greater than 75% + alert + + + + MemoryUsage + SystemResource + memory usage is greater than 75% + alert + + + + CPUUsage + SystemResource + cpu usage is greater than 75% + alert + + + + LoadAvg1 + SystemResource + loadavg (1min) is greater than 12 + alert + + + + LoadAvg5 + SystemResource + loadavg (5min) is greater than 9 + alert + + + + LoadAvg15 + SystemResource + loadavg (15min) is greater than 6 + alert + + + + SpaceUsage + SpaceUsage + space usage is greater than 75% + alert + + + + ChangedStatus + ProgramStatus + changed status + alert + + + + NonZeroStatus + ProgramStatus + status != 0 + alert + + + + + + + + + 1 + 1 + 31 + + + + + + + + + + + + 0 + 53 + 0 + + 0 + 0 + + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + transparent + + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + 0.0.0.0/8,10.0.0.0/8,100.64.0.0/10,169.254.0.0/16,172.16.0.0/12,192.0.2.0/24,192.168.0.0/16,198.18.0.0/15,198.51.100.0/24,203.0.113.0/24,233.252.0.0/24,::1/128,2001:db8::/32,fc00::/8,fd00::/8,fe80::/10 + + + + + + + + + + + + + + 0 + + + + + allow + + + + 0 + + + + + + + + + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + 1 + 192.168.40.1 + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + 0 + Pi_Jumpbox + + lan + inet + 192.168.40.112 + 0 + 0 + 1 + 0 + 0 + 0 + + 0 + 255 + 1 + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + 1 + 0 + 60s + + 0 + 0 + 1 + + 0 + + + 1024 + + + 1024 + + + 0 + + 1 + ipv4 + ignore + 2048 + 16384 + 2 + 0 + 0 + + 0 + 300 + 3600 + 0 + prefer-client-ciphers + TLSv1.2 + + ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256 + TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 + + + + + + + + + + + 30s + 30s + + 30s + 3 + x-1 + last,libc + + + + 127.0.0.1 + local0 + info + + + + 0 + 8822 + 0 + + 0 + + + + + 0 + *:8404 + /metrics + + + 0 + 4 + 60 + + 0 + 10 + + + + + c77e5c9d9c020af5.a2cb2ff3 + 1 + frontend_192.168.40.1:80 + + 192.168.40.1:80 + + tcp + 74e016a6-7b3a-4612-9905-3cbfc0caea87 + 0 + + + + 0 + + + + + + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 0 + + + + + 0 + + + + + + + + + 0 + 0 + + 0 + 0 + + + + + + + + b1679ba2eb842e5.b30d0330 + 1 + frontend_192.168.40.1:443 + + 192.168.40.1:443 + + tcp + d49fdd12-5bf3-4f61-92f4-85aa61031a05 + 0 + + + + 0 + + + + + + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 0 + + + + + 0 + + + + + + + + + 0 + 0 + + 0 + 0 + + + + + + + + 12a94182c74eaacc.cb520a04 + 1 + frontend_192.168.40.1:22623 + + 192.168.40.1:22623 + + tcp + e2c97e7d-f255-4c94-ae16-222d9100132b + 0 + + + + 0 + + + + + + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 0 + + + + + 0 + + + + + + + + + 0 + 0 + + 0 + 0 + + + + + + + + 13d6ac21ee3ccc60.96cd4b70 + 1 + frontend_192.168.40.1:6443 + + 192.168.40.1:6443 + + tcp + 4dcf78bf-2543-4c2c-bc0c-8a0d594d3248 + 0 + + + + 0 + + + + + + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 0 + + + + + 0 + + + + + + + + + 0 + 0 + + 0 + 0 + + + + + + + + + + f08894401df05ad8.3d5c30db + 1 + backend_192.168.40.1:80 + + tcp + roundrobin + 2 + + 3c7b4f9e-7c71-4599-928c-a245d3967be7,3cb381bd-cd9b-44d1-96b2-35c53849ff93,51b5b214-59cd-4bf4-9787-213079b95744,f6a3ea11-3d67-4096-ac22-112cf7d69e6e,3572b374-5516-4ef1-8c65-9f905f396165 + + + + + + 1 + 11ec6494-d394-406a-9768-08148134e3eb + 0 + + + + + + 0 + 0 + + + + + 0 + + + 30m + 50k + + + 10s + 10s + 10s + 10s + 1m + 1m + 0 + + + + + + + + + 0 + + 0 + + + + + 53b09184e47806ad.6062e3bd + 1 + backend_192.168.40.1:443 + + tcp + roundrobin + 2 + + 4098fdb2-ba6d-4edd-ab05-e997c9cef626,af439509-7e75-40bd-9c72-8f6a2710498c,e8467e26-1c2d-4fd8-a67e-e17b1f619967,fea2cfee-2dd9-4046-b172-ae2b941063d5,4a8587cc-d3a4-4fa6-97e9-c079d0d22240 + + + + + + 1 + a5d88192-aef3-42f0-aec4-cb6eaebca84f + 0 + + + + + + 0 + 0 + + + + + 0 + + + 30m + 50k + + + 10s + 10s + 10s + 10s + 1m + 1m + 0 + + + + + + + + + 0 + + 0 + + + + + fb3d213167709bf2.f6d030ee + 1 + backend_192.168.40.1:22623 + + tcp + roundrobin + 2 + + b1a99d0e-75c9-42a8-a0ea-91ee1bfbc508,7a606821-2d1f-41f1-8edb-3a8bebbe0aa4,4e091504-977f-4e83-bf90-678d68ad4816,741e99a1-fe92-4b6d-b6c2-3bd039934a7f,dd5f78b0-e083-4080-972b-73b53924d059 + + + + + + 1 + 17bc9250-d232-4e99-b77c-9cbcc0fb633e + 0 + + + + + + 0 + 0 + + + + + 0 + + + 30m + 50k + + + 10s + 10s + 10s + 10s + 1m + 1m + 0 + + + + + + + + + 0 + + 0 + + + + + f3bf483e1e76c8b8.78ae61ca + 1 + backend_192.168.40.1:6443 + + tcp + roundrobin + 2 + + a817a002-3892-47a3-82ac-f28a3c357ffe,25906935-b3e3-482f-b0ba-a082d5316d6b,ee918485-01b0-462b-ad1b-1b35f4e871a6,cced84b6-f99f-49e7-af31-c71f7478405d,e1ab9bb3-4c4a-4a20-96e2-0710fa3d4fc2 + + + + + + 1 + 25bfdc19-6d79-41c6-951e-74bac3d249e8 + 0 + + + + + + 0 + 0 + + + + + 0 + + + 30m + 50k + + + 10s + 10s + 10s + 10s + 1m + 1m + 0 + + + + + + + + + 0 + + 0 + + + + + + + e659e683eb4f8cbf.bc6647fd + 1 + 192.168.40.20_80 + +
192.168.40.20
+ 80 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 98e07b8c2cf4e121.f80ffb86 + 1 + 192.168.40.21_80 + +
192.168.40.21
+ 80 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 6d610bd3274928f0.772b633a + 1 + 192.168.40.22_80 + +
192.168.40.22
+ 80 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 4e766be7687ff1b2.9f602 + 1 + 192.168.40.30_80 + +
192.168.40.30
+ 80 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 96f86eff29c19586.899c8c7d + 1 + 192.168.40.10_80 + +
192.168.40.10
+ 80 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + b1ef1eac98733197.75fa14c7 + 1 + 192.168.40.20_443 + +
192.168.40.20
+ 443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 7b8e5951eea6c199.a6da8696 + 1 + 192.168.40.21_443 + +
192.168.40.21
+ 443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + a8a3af8568459ef8.ce390541 + 1 + 192.168.40.22_443 + +
192.168.40.22
+ 443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 993b27c0684e9142.41d99327 + 1 + 192.168.40.30_443 + +
192.168.40.30
+ 443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 7ed96373b629946d.a2234a79 + 1 + 192.168.40.10_443 + +
192.168.40.10
+ 443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + ebfb123745ab99fa.56b7e81 + 1 + 192.168.40.20_22623 + +
192.168.40.20
+ 22623 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 5b336dfe21d70db0.de1c1873 + 1 + 192.168.40.21_22623 + +
192.168.40.21
+ 22623 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + aa954ffc2004a428.3f979125 + 1 + 192.168.40.22_22623 + +
192.168.40.22
+ 22623 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 2c5ad4987d529880.8404a1cb + 1 + 192.168.40.30_22623 + +
192.168.40.30
+ 22623 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + f61263456cb23546.1b8fc725 + 1 + 192.168.40.10_22623 + +
192.168.40.10
+ 22623 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 2c76a5e648a22d31.acb00182 + 1 + 192.168.40.20_6443 + +
192.168.40.20
+ 6443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 1dec35d79dc64d6d.35d924e9 + 1 + 192.168.40.21_6443 + +
192.168.40.21
+ 6443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 8fec2b81ef16ac1.c768ff85 + 1 + 192.168.40.22_6443 + +
192.168.40.22
+ 6443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 9c142802a8b9a550.b0ae2086 + 1 + 192.168.40.30_6443 + +
192.168.40.30
+ 6443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+ + 2773c715be07db11.6ce4873a + 1 + 192.168.40.10_6443 + +
192.168.40.10
+ 6443 + + active + + static + + + + + + 0 + + 0 + + + + + + + + + +
+
+ + + TCP_serverport + + tcp + 2s + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + TCP_serverport + + tcp + 2s + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + TCP_serverport + + tcp + 2s + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + HTTP_GET_/readyz + + http + 2s + ssl + + 0 + + GET + /readyz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 0 + + 0 + + 0 + + + +
+ + + + 192.168.2.62/32 + Pi_Jumpbox + Route to 192.168.2.0 ... + 0 + + + + + 69355bf776c20 + Web GUI TLS certificate + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhFakNDQlBxZ0F3SUJBZ0lVQlJrcksrdWdLSXFITkdjNEFCVVM0NmxNZDZZd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZWXhHakFZQmdOVkJBTU1FVTlRVG5ObGJuTmxMbWx1ZEdWeWJtRnNNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWlRBZUZ3MHkKTlRFeU1EY3hNRFV3TXpKYUZ3MHlOekF4TURneE1EVXdNekphTUlHR01Sb3dHQVlEVlFRRERCRlBVRTV6Wlc1egpaUzVwYm5SbGNtNWhiREVMTUFrR0ExVUVCaE1DVGt3eEZUQVRCZ05WQkFnTURGcDFhV1F0U0c5c2JHRnVaREVWCk1CTUdBMVVFQnd3TVRXbGtaR1ZzYUdGeWJtbHpNUzB3S3dZRFZRUUtEQ1JQVUU1elpXNXpaU0J6Wld4bUxYTnAKWjI1bFpDQjNaV0lnWTJWeWRHbG1hV05oZEdVd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJSwpBb0lDQVFDclF3Q29XZitzMUl3UjdqZ0twcTlRVUhlbEtxbDNzWkZjSk5iU2lKMWdlL2ZLM2ZheVEvMkJOZzVhCkhFOWp1Vk1SOTJiSzZrS3NnajJQb1M2d21aVE5zMVJtYkljd29qUVRCdlh3ZElheG5jbTZkRzc5TkFwZ3pPYmMKNDNBaTNnVG1KdTUybndzSEVqUWtHUzlhWnhSTzNuTVB5UUFNWDFjRW1WM2FjTGdmbGtadHdLSjQ3OEVHSVpFSwpIbzhHbE5YNUs1eDNmZFEreGpzQ2I3Wk9hMU5vYU9ZTm0xMmt6V21qelRISmd6eFdKbTlhUU05Mi9rUm1JU0VLClZjU1N1UDMvTzAyd2J0cDJZMDE1TTNyOU1kc2lLUTRVOHhuVlNoMG1ZajBYNXJ1TmJpZVVydVRMRHRQU0NwaksKQmZCTjRtNFl6R2NFTTEyZ2pITHN5TCt4WEN5bmI1MDJmNTVnb2ZDNHFuWlFLOWdOUFRzR1dMU3FXYVdGY3hSLwpoNjJmdVE4VnZYMmJsSGRRenNveXhXSXRzci9xbTJtYUY3NGdOTWRacFpMamFkQ3JOWVY1SDlPVVZ6b0hWTmd2CmxjTWFaaEcxQkUwV3R5THNhcjFwU2IzdVhPcmFRdXlHM0ZaS1dNQnl4VmRRUGR6WmgrMk1sMDU4Tnp1V3dyZ2wKN085V3ZWa3YwREwzZStXRzE0TlAwOFJEa0JyRjk2SUpJM2hoRkRwMk1TR3BVWitYZW1TN1pVQ2o5b2NWdGVocworcXlIeWxZMkQyU2FYZG1SUmNwK3l5RkFNYmhDeHBoMnI4WFMvTXgrZXRaSDU4ZFU3emlZdEQvNUJsSzBkRGRzCmZ4eGcwSG5QL2lGOEpuSU1sK3BWWXVpdk1wRnh0RFJtRUNZSnZMWi9RTHNxU3AvSUhRSURBUUFCbzRJQmREQ0MKQVhBd0NRWURWUjBUQkFJd0FEQVJCZ2xnaGtnQmh2aENBUUVFQkFNQ0JrQXdOQVlKWUlaSUFZYjRRZ0VOQkNjVwpKVTlRVG5ObGJuTmxJRWRsYm1WeVlYUmxaQ0JUWlhKMlpYSWdRMlZ5ZEdsbWFXTmhkR1V3SFFZRFZSME9CQllFCkZNWXI5NGdMS2doZDVYT2RXWGV3R3BMd0ZlZEZNSUd3QmdOVkhTTUVnYWd3Z2FXaGdZeWtnWWt3Z1lZeEdqQVkKQmdOVkJBTU1FVTlRVG5ObGJuTmxMbWx1ZEdWeWJtRnNNUXN3Q1FZRFZRUUdFd0pPVERFVk1CTUdBMVVFQ0F3TQpXblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyQmdOVkJBb01KRTlRClRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVUJSa3JLK3VnS0lxSE5HYzQKQUJVUzQ2bE1kNll3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQ01Bc0dBMVVkRHdRRQpBd0lGb0RBY0JnTlZIUkVFRlRBVGdoRlBVRTV6Wlc1elpTNXBiblJsY201aGJEQU5CZ2txaGtpRzl3MEJBUXNGCkFBT0NBZ0VBVVlJQ1FXUHdkR25FNHdUVG9MUVg4Mm1GbzdreWlneGpIMGlrenJDclZFZlUxcE1CakNldUl0WFEKZnpmS0NXSFplVVhWeE1uNkwyWkxpaE9lalZRVVM3c0psWW9PZGdiYUJmRm9Zd1dTTTMrSHZGQWtWelI3ZW1uUQpMbDh6U0lnN3B3UFgrOTBLcVNRRnhPOUdKcWE0MWEvc1hCZlAvVkxxZHh4SFhsb3dsK1JpRmJZMDRhdFo3a0xtCjI4R1AwSTFMVEYyRnRzNXhsN2EzNzRLdm9wSFNici9LQmV0b1ZJb3pSVXN6WGE1ODI3alBOZVBGQTlsS2lPNUkKSkNLS1pZVVpsM2F4NkF5a2FsOHJ5SFlIVWUwaGZaaFZyWDZLNDFEQjBoL210SWxOSm9sLzBqdnI2aDgySFhaNAo4dVJQNHNWZGxwOXVQTVVKcVNWRW84aGo0ajc1b0dSU3JHSEpKMk0zUXhKVE1ITTQ5UkpCT1EzRmtQOVBaakprCkRFRjc1UUttZGZxWGo4OXZnNUhQUTBzU0owbGpTVVVQVGR6Vlc2cUFtYll0T3ZwTWV0MVcxMjAyNFd2RitlNkEKMG4rMUU0Ri9oNEdyVWg3NmFmSG1LcTRrNXVBU1daOUNFbTF1Wm9mZjZSdVk2N3ZPVXdpVkgzUlpTWEN2aDluUQppZVhtWXMya09KMzNnUUpHTE1qNEhNeWw1ZTFudW9wekhkR0xmNVJ1bFdvbS8yL21YckpXQXNVL3AxY2dGMW5sClJ6em1hZ0NSeUE2RzBFRWMyZW9FODFYMjQ0azJwa3NRcUIrL3VibmxNa0VGaE1JQWtOeDU2N3dON2hDUTFvQ0IKbW51cWpBRkc3NE5jUFYyT0w1KzhlQmJaa3FONTNBMDVzQngrTG41ZnlEZEd4VzN1eVZrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + + + LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRUUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1Nzd2dna25BZ0VBQW9JQ0FRQ3JRd0NvV2YrczFJd1IKN2pnS3BxOVFVSGVsS3FsM3NaRmNKTmJTaUoxZ2UvZkszZmF5US8yQk5nNWFIRTlqdVZNUjkyYks2a0tzZ2oyUApvUzZ3bVpUTnMxUm1iSWN3b2pRVEJ2WHdkSWF4bmNtNmRHNzlOQXBnek9iYzQzQWkzZ1RtSnU1Mm53c0hFalFrCkdTOWFaeFJPM25NUHlRQU1YMWNFbVYzYWNMZ2Zsa1p0d0tKNDc4RUdJWkVLSG84R2xOWDVLNXgzZmRRK3hqc0MKYjdaT2ExTm9hT1lObTEya3pXbWp6VEhKZ3p4V0ptOWFRTTkyL2tSbUlTRUtWY1NTdVAzL08wMndidHAyWTAxNQpNM3I5TWRzaUtRNFU4eG5WU2gwbVlqMFg1cnVOYmllVXJ1VExEdFBTQ3BqS0JmQk40bTRZekdjRU0xMmdqSExzCnlMK3hYQ3luYjUwMmY1NWdvZkM0cW5aUUs5Z05QVHNHV0xTcVdhV0ZjeFIvaDYyZnVROFZ2WDJibEhkUXpzb3kKeFdJdHNyL3FtMm1hRjc0Z05NZFpwWkxqYWRDck5ZVjVIOU9VVnpvSFZOZ3ZsY01hWmhHMUJFMFd0eUxzYXIxcApTYjN1WE9yYVF1eUczRlpLV01CeXhWZFFQZHpaaCsyTWwwNThOenVXd3JnbDdPOVd2Vmt2MERMM2UrV0cxNE5QCjA4UkRrQnJGOTZJSkkzaGhGRHAyTVNHcFVaK1hlbVM3WlVDajlvY1Z0ZWhzK3F5SHlsWTJEMlNhWGRtUlJjcCsKeXlGQU1iaEN4cGgycjhYUy9NeCtldFpINThkVTd6aVl0RC81QmxLMGREZHNmeHhnMEhuUC9pRjhKbklNbCtwVgpZdWl2TXBGeHREUm1FQ1lKdkxaL1FMc3FTcC9JSFFJREFRQUJBb0lDQUJSRERoaUhqLzlEcFByRGJnVkhQcENkCnBJOTVvbFBUUWZrSk1XZjJoU0FTMVUzcGF0N0x1bm9IWDRxbVgzZDk4cEpsUWRmRXFzb1JjcC9EN2NFenVtNHkKY2FHRE9qb0tjV2R3T0dLNnkrdHhycG5pWFVzKy8vSC9RVnBsaDRaOTIvaUZmS0JlSlZ1RnozNFhMZ29LWTFXeQp3eUdIOTFCL2F5SitmcU1jYmp4QklaTlVsTThDd1VTQ0dOQitBdy9xbTFJcWZiZzBFK0N3RlVVdTJ2NTJKakpyCnpybFNFTEhjZDZETE9HdTRuTWZZZzVqRm90dFhnOWQ0R0pwS0ZzS3J6bFBjWnFSTUhvbEpLd2orMytYYXpkYVgKSXQrMFQwY2VjMHB2bWFqSDdKZjBBMklpT3dGbktnVVIvemVrOGptcURnL2RzYkViM3FUakE2bk4vOEtkRkNTSAp2VHpNZUVEbzV5eEJuWlBHaTE1OS9LSUYyQU5yLzI1K2pPWVZibnpoZjZHQkxNSjZObDhjc1BLdWgzRkg4MTNBCkhyVUZZckQ1OERYQm1aUFdUYXFacWRxSkhIS25DVThnRUZoTDFFYVNlbWhnMHhPSGcwQjNuUXFPT25aMG1aSm0KZ3BsTy9GemxTN1dGSVB5NGU5RFhJRldoUDRCNWpGaDhubXB6bHZ4cXJSaXkvYUc2VmVSS2hTY3FMTksyOE53Qgo2OWNuM25NdFlDOCs0azhhR0ducDBLeWRDcFU4MFcwVW9PZzJCNHMzSDdHZENUbnZpK2ZwdithNFJ5ZE8yNCtXCmo4Wk15UUpHaFY1TTMwckpaZ1R2MmVxVHhpVjlYVEswV2JrQ1JUNHFTeVJxY2dwYm1IM3dNcGdXbmRqc3dGTVQKOUhrSllMVEFqeEppM09KeVdha0ZBb0lCQVFEeFU3dWQwUlJGVVI1cE1uRzRBeTk2U0hscG1VU0ltZVpzWXlwcQpmamtUL0J6Y1VnZ3Bzam80bnJpMnZBbEN0a3VEWW45K3ovSVR1RzA5Wng1RitmMlRiTUw5L0YvZTZIdUM1NXpTCjBBQ003K3d2QVNLaDdJbVYveit2dVYrSkxud2FISU4xeWh4U2ZLdFF3czBpc2ZsT21EMzUrS054Uk40NUQvbDAKR0tmcm5XcVZGQ29GSTNaN2xiWCszZnpURDdkdEY1ZkFCSTlVdnVaTXNMVis3Uk9lbXhvMXlnN0QyLzFiNnRQSwpONzVwR1d2QzUvbHZnSnMzZ2tmdmlEMi91b3hZM0hrQjFuUU55Sis2clNMajJyUjh2TWl1UCtMeHFvMnZEMVFhCitCYjNmWDRqMDQrMGxOdDRYaGRaSXVGNThKamF5ZzlGZnFQVnBlTnVGNkE2QVhMekFvSUJBUUMxckxNQ1RMSnMKRE8wbjI5cUh6VUtkbHl2USs5QmsxLzByRFpVQVZPNDQrNVhXQ081TlFndWxIOWUxclJJekVVZTZEdXlYVlVTbwpvU1JvenkxUHVSd0tldXNhWVNKZk5JVHJGVGlMRnEzOXJwcnVzWWl4Zk1jM2tSeDVYKyszeFJLOFY0ZlNiMDRkCjdjRStHNkhYRHZkVGxqRmRXRUZRTmRqMkUyWC9jYW1yT0JsRU16RzBGL0VHRWZrLytRNHdVWDUydkY5ZSthVXUKYUJoQ2dtSzhEWXFwMWdlY3hscFE1cEtMVndORFNLVjFLK2ZIMGYwVHRKOUhCWlVNWU9KSlpWdnYzN3NDNk9BawpyYzA0eTRKNVAvWHVlaHFFNmhhbHFrdVdiSW0wV2xWVXArSS9oTEdXajcwK3ZmSG41bFJCVjR0MXhtYVVHTTVRCmdQb2tlbWJBV2Z5dkFvSUJBQkxhZDgzY2g3amluWDJhYzBmczk4aVY0T1pmRXZ1WkNtZHRWK0w1K1h1V05xci8KdmFPRVNRZ2pYa3JvWmREUWJSWFduQjlNSDUxcXl4NEE4RnlISzBoWk51S2cxTnlWVFJEdEIxTnc3Sm9XSkYySAp1U3p0VGRKcUhvK2I2OXJMeHVaRFZBSGZ5RmFwWnJqb2Z4NDJ5VU5hb1h6bDc5N3Bnbkx5eklwRll0a0ZjMDR5ClJSWWhyeC80a2o5WEdHbGswTyswNkNZWU5ScHB6NVF1T2Yrd2hkZmVSaTN0bXpteDloazRQMU9OQjFNdXFUeVEKNHV2VElFMDE0R2pXTy95K2xqaGJBUmtqcCsxcnZ3N1dkK05WTXNTTCt5R2gzQmtGT2d4ekpoNzFRdFlTOThmVQp2MlZjTzhrcmtLZG1FamQwbEh5RFRLNGhOcXQ2U2twUGpqVDU2QUVDZ2dFQUNLcGlKM3Z0RHNaWEVZMmxFTkV6Cm1qeTV0RkF1a29EUzdKakxRS2JNYmg5aCtFR1l6RXFZTDVvak9lRTFld1laKzcvMmZRbHVLdlQwdmFNVU1EZE8KSlJuVDJRQkZHWEZ4M1p5M2c3cmpOYlI4WTJKSWVON1F5Yys4SWZYM2d6WjlQRXFZaWVzUk9OQThaVy8vK2pnVwppQUFqL3FYVkI3UnAwdUw5L0g4NWJwZFFiVFpiNnBFeHgrNVhpenVmOTZJTGZESmtBaTI2T1VweHpjcFdWMDMyCkRUL09RU1ljN0xyeXhuNnlBeVdWN3M3WFVXcXN2YUhoN3d0UEhyWUlWU1Btakx5Sk9ReE9sTEZObHFYdVpVWXQKdnVCSUg0cmk1YWdIenZjQ1luM2trQk1wOFltc3h0ZTRXU1BLUkJ0eWJXTjFuWHFITGcwNDJoSXMzRXlTVmg1MAp0UUtDQVFBdEVtbDVEQWVncjZyaWlHdnVBWkJDa3JuV1YweUZjN2NIbEVHMkFYaCs0OGkxQjNhQXRPNCttZVlzCkZzdERGdHJITGVOd2tKckhzOG0xbXhsWUVjZzdZYy96MmhNQXlNVk9ONWRuMW13QVA1dEViVzllb2NYYUUyamMKeXREbXFsUmMxMk5uRGprT1pIWWRQZ1lORHg2UkhsSHJEVUdKN1BnaHB0SkFFOVhBNk5YQTMrYkZrZGN6RVZNRgpuY2NERGlWNE1yenJib1lZS2xCMzdNWG40S3dVQWdlaFMvdXZBSGUvZjVTLzBUTG1GVkVqWC9nTnNma0tyMzgwCnhoSTJxb2RmbGMvRHRBcFUvU0hJSFZjUklteGFtTHZWZUFSS2c3eFJJejZjY2hET24vbUlEOVRqZUQ1NjJzQWoKRkJwOWNoL3ZObm9IMXhLZWVGUWJWa2FHRFpsVgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + 0 + + 1400 + + + + + + 1 + 0 + 8080 + 8443 + + + + + 0 + + + + + + 0 + 10 + h1,h2 + + + + + 0 + 0 + 10 + + + + + + + 0 + + + + 0 + + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + lan + + + + + + 0 + 0 + + + 1 + + 1 + + 0 + 1 + + 0 + 0 + 0 + 0 + + 1 + + * + apps.sttest0.harmony.mcd + 0 + 192.168.40.1 + + + + + 0 + + + + + + + api + sttest0.harmony.mcd + 0 + 192.168.40.1 + + + + + 0 + + + + + + + api-int + sttest0.harmony.mcd + 0 + 192.168.40.1 + + + + + 0 + + + + + + + cp0 + sttest0.harmony.mcd + 1 + 192.168.40.20 + + + f4:39:09:16:65:ea + + 0 + + + + + + + cp1 + sttest0.harmony.mcd + 1 + 192.168.40.21 + + + f4:39:09:16:65:33 + + 0 + + + + + + + cp2 + sttest0.harmony.mcd + 1 + 192.168.40.22 + + + f4:39:09:07:c8:f2 + + 0 + + + + + + + wk0 + sttest0.harmony.mcd + 1 + 192.168.40.30 + + + 64:00:6a:88:a3:50 + + 0 + + + + + + + lan + + 192.168.40.101 + 192.168.40.151 + + + + + + range + + 0 + + + + + + + + + diff --git a/opnsense-config/src/tests/data/config-full-ncd0.xml b/opnsense-config/src/tests/data/config-full-ncd0.xml index 6cb61861..b14d3b2f 100644 --- a/opnsense-config/src/tests/data/config-full-ncd0.xml +++ b/opnsense-config/src/tests/data/config-full-ncd0.xml @@ -271,7 +271,6 @@ en_US 1.1.1.1 - 8.8.8.8 none none none diff --git a/opnsense-config/src/tests/data/config-opnsense-25.1.xml b/opnsense-config/src/tests/data/config-opnsense-25.1.xml index 0c9a6f11..1df9dc10 100644 --- a/opnsense-config/src/tests/data/config-opnsense-25.1.xml +++ b/opnsense-config/src/tests/data/config-opnsense-25.1.xml @@ -30,28 +30,17 @@ net.inet.ip.sourceroute default - - Source routing is another way for an attacker to try to reach non-routable addresses behind your box. - It can also be used to probe for information about your internal networks. These functions come enabled - as part of the standard FreeBSD core system. - + Source routing is another way for an attacker to try to reach non-routable addresses behind your box. It can also be used to probe for information about your internal networks. These functions come enabled as part of the standard FreeBSD core system. net.inet.ip.accept_sourceroute default - - Source routing is another way for an attacker to try to reach non-routable addresses behind your box. - It can also be used to probe for information about your internal networks. These functions come enabled - as part of the standard FreeBSD core system. - + Source routing is another way for an attacker to try to reach non-routable addresses behind your box. It can also be used to probe for information about your internal networks. These functions come enabled as part of the standard FreeBSD core system. net.inet.icmp.log_redirect default - - This option turns off the logging of redirect packets because there is no limit and this could fill - up your logs consuming your whole hard drive. - + This option turns off the logging of redirect packets because there is no limit and this could fill up your logs consuming your whole hard drive. net.inet.tcp.drop_synfin @@ -181,9 +170,7 @@ net.inet.ip.redirect default - Enable/disable sending of ICMP redirects in response to IP packets for which a better, - and for the sender directly reachable, route and next hop is known. - + Enable/disable sending of ICMP redirects in response to IP packets for which a better, and for the sender directly reachable, route and next hop is known. net.local.dgram.maxdgram @@ -938,4 +925,3 @@ - diff --git a/opnsense-config/src/tests/data/config-vm-test.xml b/opnsense-config/src/tests/data/config-vm-test.xml index 06429df6..ffa78ba1 100644 --- a/opnsense-config/src/tests/data/config-vm-test.xml +++ b/opnsense-config/src/tests/data/config-vm-test.xml @@ -28,28 +28,17 @@ default - - Source routing is another way for an attacker to try to reach non-routable addresses behind your box. - It can also be used to probe for information about your internal networks. These functions come enabled - as part of the standard FreeBSD core system. - + Source routing is another way for an attacker to try to reach non-routable addresses behind your box. It can also be used to probe for information about your internal networks. These functions come enabled as part of the standard FreeBSD core system. net.inet.ip.sourceroute default - - Source routing is another way for an attacker to try to reach non-routable addresses behind your box. - It can also be used to probe for information about your internal networks. These functions come enabled - as part of the standard FreeBSD core system. - + Source routing is another way for an attacker to try to reach non-routable addresses behind your box. It can also be used to probe for information about your internal networks. These functions come enabled as part of the standard FreeBSD core system. net.inet.ip.accept_sourceroute default - - This option turns off the logging of redirect packets because there is no limit and this could fill - up your logs consuming your whole hard drive. - + This option turns off the logging of redirect packets because there is no limit and this could fill up your logs consuming your whole hard drive. net.inet.icmp.log_redirect default @@ -179,9 +168,7 @@ default - Enable/disable sending of ICMP redirects in response to IP packets for which a better, - and for the sender directly reachable, route and next hop is known. - + Enable/disable sending of ICMP redirects in response to IP packets for which a better, and for the sender directly reachable, route and next hop is known. net.inet.ip.redirect default