Linux에서 nftables를 사용하여 위장 NAT 예제를 완료하시겠습니까?

Linux에서 nftables를 사용하여 위장 NAT 예제를 완료하시겠습니까?

nftables를 사용하여 이 작업을 수행하는 방법에 대한 완전한 예를 찾고 있습니다. 업스트림 인터페이스에서는 DHCP 클라이언트여야 하고, 다른 인터페이스에는 192.168.0.0/24 LAN이 있어야 하며, 방화벽 역할도 해야 합니다.

업스트림 인터페이스에서 SSH 포트를 열고 포트 80 트래픽을 LAN의 다른 서버로 전달하는 데 대한 추가 크레딧입니다.

nftables 위키에는 몇 가지 질문에 대한 답변이 남아 있습니다. 예를 들어,가장에 관한 섹션가장 규칙을 한 인터페이스와 다른 인터페이스에 연결하는 방법을 설명하지 않습니다.

답변1

lan0내부 네트워크와 wan0ISP에 연결되어 있다고 가정하고 제가 사용하는 방법은 다음과 같습니다 .

"업스트림 인터페이스의 DHCP 클라이언트"가 무슨 뜻인지 잘 모르겠습니다. 이는 nftables가 아닌 DHCP 클라이언트를 사용하여 수행되기 때문입니다. 아래 설정은 나가는 트래픽을 제한하지 않으므로 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를 사용하세요.

관련 정보