pub struct NatManager { /* private fields */ }Expand description
NAT rule manager using nftables via rustables netlink API.
Rebuilds the entire nftables table atomically on every change to avoid relying on kernel rule handle tracking (which rustables doesn’t expose). The table is small (one masquerade + two rules per mapping) so this is cheap.
Implementations§
Source§impl NatManager
impl NatManager
Sourcepub fn new(lan_interface: String) -> Result<Self, NatError>
pub fn new(lan_interface: String) -> Result<Self, NatError>
Create the nftables table and NAT chains.
Installs a masquerade rule for traffic exiting via fips0 so that
LAN client source addresses are rewritten to the gateway’s mesh
address, allowing return traffic to route back through the mesh.
lan_interface is the gateway’s LAN-facing interface name,
needed by the port-forward LAN-side masquerade rule.
Sourcepub fn set_port_forwards(
&mut self,
forwards: &[PortForward],
) -> Result<(), NatError>
pub fn set_port_forwards( &mut self, forwards: &[PortForward], ) -> Result<(), NatError>
Replace the current inbound port-forward rule set and rebuild the nftables table atomically. Pass an empty slice to clear.
Sourcepub fn add_mapping(
&mut self,
virtual_ip: Ipv6Addr,
mesh_addr: Ipv6Addr,
) -> Result<(), NatError>
pub fn add_mapping( &mut self, virtual_ip: Ipv6Addr, mesh_addr: Ipv6Addr, ) -> Result<(), NatError>
Add DNAT and SNAT rules for a virtual IP ↔ mesh address mapping.
Sourcepub fn remove_mapping(&mut self, virtual_ip: Ipv6Addr) -> Result<(), NatError>
pub fn remove_mapping(&mut self, virtual_ip: Ipv6Addr) -> Result<(), NatError>
Remove DNAT and SNAT rules for a virtual IP mapping.
Sourcepub fn mapping_count(&self) -> usize
pub fn mapping_count(&self) -> usize
Number of active NAT mappings.
Auto Trait Implementations§
impl Freeze for NatManager
impl RefUnwindSafe for NatManager
impl Send for NatManager
impl Sync for NatManager
impl Unpin for NatManager
impl UnsafeUnpin for NatManager
impl UnwindSafe for NatManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more