nftables: HTTP 트래픽을 NAT 뒤의 상자로 전달

nftables: HTTP 트래픽을 NAT 뒤의 상자로 전달

게이트웨이로 데비안 시스템이 있습니다. 내 nftables.conf는 매우 간단합니다.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority filter;
        }
        chain forward {
                type filter hook forward priority filter;
        }
        chain output {
                type filter hook output priority filter;
        }
}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority filter; policy accept;
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                oifname "enp5s0" masquerade
        }
}

이제 인터넷에서 포트 80으로 들어오는 트래픽을 192.168.1.3 호스트로 리디렉션하도록 수정하고 싶습니다.

tcp dport 80 dnat to 192.168.1.3체인을 추가하려고 시도했지만 nat:prerouting나가는 트래픽도 리디렉션됩니다. 추가가 iffname "enp5s0"전혀 작동하지 않는 것 같습니다. 즉 이것은:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority filter;
        }
        chain forward {
                type filter hook forward priority filter;
        }
        chain output {
                type filter hook output priority filter;
        }
}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority filter; policy accept;
                iifname enp5s0 tcp dport 80 dnat to 192.168.1.3
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                #oifname "enp5s0" masquerade
                masquerade
        }
}

올바른 접근 방식이 무엇인지 아시나요? 구글링해도 별로 도움이 안 됐는데

감사해요!

답변1

들어오는 트래픽을 리디렉션하는 것이 WAN한 가지 접근 방식이지만 NAT나가는 트래픽도 필요하지만 패킷이 전달되는 호스트로만 필요합니다.

saddr따라서 해당 호스트에만 적용되도록 백 라우팅 체인의 소스 주소를 지정 해야 합니다 .

table ip nat {
        chain prerouting {
                type nat hook prerouting priority filter; policy accept;
                iifname enp5s0 tcp dport 80 dnat to 192.168.1.3
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                # This will SNAT only that host but not outgoing traffic from localhost
                ip saddr 192.168.1.3 masquerade
        }
}

보너스:

사전 라우팅 체인의 dstnat우선순위 는 filter다음과 같습니다.

        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                iifname enp5s0 tcp dport 80 dnat to 192.168.1.3
        

forward구성 에 구성하려는 체인 도 누락되어 있다는 점에 유의하세요 .

관련 정보