¿Ejemplo completo de enmascaramiento de NAT usando nftables en Linux?

¿Ejemplo completo de enmascaramiento de NAT usando nftables en Linux?

Estoy buscando un ejemplo completo de cómo hacer esto usando nftables. Debe ser un cliente DHCP en la interfaz ascendente, tener una LAN 192.168.0.0/24 en la otra interfaz y también actuar como firewall.

Crédito adicional por abrir un puerto ssh en la interfaz ascendente y reenviar el tráfico del puerto 80 a algún otro servidor en la LAN.

La wiki de nftables deja algunas preguntas sin respuesta. Por ejemplo, elsección sobre enmascaramientono describe cómo adjuntar la regla de enmascaramiento a una interfaz frente a la otra.

Respuesta1

Esto es lo que estoy usando, suponiendo que lan0esté conectado a su red interna y wan0a su ISP.

No estoy seguro de lo que quiere decir con "cliente DHCP en la interfaz ascendente", ya que esto se hace con un cliente DHCP, no con nftables. La siguiente configuración no restringe el tráfico saliente, por lo que se realizará la solicitud de DHCP.

#!/usr/bin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    # allow established/related connections
    ct state {established, related} accept

    # early drop of invalid connections
    ct state invalid drop

    # allow from loopback
    iifname lo accept

    # Allow from internal network
    iifname lan0 accept

    # allow icmp
    ip protocol icmp accept

    # allow ssh
    tcp dport 22 accept comment "SSH in"

    reject
  }

  chain forward {
    type filter hook forward priority 0;

    # Allow outgoing via wan0
    oifname wan0 accept

    # Allow incoming on wan0 for related & established connections
    iifname wan0 ct state related, established accept

    # Drop any other incoming traffic on wan0
    iifname wan0 drop
  }

  chain output {
    type filter hook output priority 0;
  }

}

table ip nat {
  chain prerouting {
    type nat hook prerouting priority 0;

    # Forward traffic from wan0 to a LAN server
    iifname wan0 tcp dport 80 dnat 192.168.0.8 comment "Port forwarding to web server"
  }

  chain postrouting {
    type nat hook postrouting priority 0;

    # Masquerade outgoing traffic
    oifname wan0 masquerade
  }
}

Respuesta2

El enmascaramiento es un caso especial de SNAT. Si desea adjuntar el tráfico a la interfaz de salida o a la dirección de salida (dirección de origen para sus IP internas), use SNAT

información relacionada