Полный пример маскировки NAT с использованием nftables в Linux?

Полный пример маскировки NAT с использованием nftables в Linux?

Я ищу полный пример того, как это сделать с помощью nftables. Он должен быть клиентом DHCP на интерфейсе upstream, иметь локальную сеть 192.168.0.0/24 на другом интерфейсе, а также действовать как брандмауэр.

Дополнительный балл за открытие порта SSH на интерфейсе восходящего потока и переадресацию трафика порта 80 на другой сервер в локальной сети.

Вики nftables оставляет некоторые вопросы без ответа. Например,раздел о маскировкене описывает, как прикрепить правило маскировки к одному интерфейсу по сравнению с другим.

решение1

Вот что я использую, предполагая, lan0что устройство подключено к вашей внутренней сети и wan0к вашему интернет-провайдеру.

Я не уверен, что вы имеете в виду под "DHCP-клиентом на интерфейсе восходящего потока", поскольку это делается с помощью DHCP-клиента, а не nftables. Настройка ниже не ограничивает исходящий трафик, поэтому 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
  }
}

решение2

Маскарадинг — это особый случай SNAT. Если вы хотите прикрепить трафик к выходному интерфейсу или выходному адресу (исходный адрес для ваших внутренних IP-адресов), используйте SNAT

Связанный контент