diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-21 21:25:44 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-21 21:25:44 +0100 |
commit | b18f9b75cba7a03429fb586dcf5e4ba0949e3b57 (patch) | |
tree | 820bbcd233f45cc76d1c6095c31fa965aea4c0a1 | |
parent | e6b6175b27180c87335a6ded5a8b4603c7a168b2 (diff) |
add support for masquerading
-rw-r--r-- | src/expr/immediate.rs | 1 | ||||
-rw-r--r-- | src/expr/verdict.rs | 1 | ||||
-rw-r--r-- | src/rule_methods.rs | 6 |
3 files changed, 8 insertions, 0 deletions
diff --git a/src/expr/immediate.rs b/src/expr/immediate.rs index 2fd9bd5..47c9478 100644 --- a/src/expr/immediate.rs +++ b/src/expr/immediate.rs @@ -32,6 +32,7 @@ impl Immediate { VerdictKind::Jump { .. } => VerdictType::Jump, VerdictKind::Goto { .. } => VerdictType::Goto, VerdictKind::Return => VerdictType::Return, + VerdictKind::Masquerade => VerdictType::Goto, }; let mut data = Verdict::default().with_code(code); if let VerdictKind::Jump { chain } | VerdictKind::Goto { chain } = kind { diff --git a/src/expr/verdict.rs b/src/expr/verdict.rs index c42ad32..609c21d 100644 --- a/src/expr/verdict.rs +++ b/src/expr/verdict.rs @@ -47,4 +47,5 @@ pub enum VerdictKind { chain: String, }, Return, + Masquerade, } diff --git a/src/rule_methods.rs b/src/rule_methods.rs index 4ee3a16..161c2a4 100644 --- a/src/rule_methods.rs +++ b/src/rule_methods.rs @@ -218,6 +218,12 @@ impl Rule { self.add_expr(Immediate::new_verdict(VerdictKind::Drop)); self } + /// Adds the `Masquerade` verdict to the rule. The packet will have its + /// source address rewritten. + pub fn masquerade(mut self) -> Self { + self.add_expr(Immediate::new_verdict(VerdictKind::Masquerade)); + self + } } /// Looks up the interface index for a given interface name. |