NFT 포트 전달이 라우터에서 작동하지 않습니다

NFT 포트 전달이 라우터에서 작동하지 않습니다

라우터와 서버 역할을 모두 수행하는 컴퓨터가 있습니다. 이 컴퓨터에 여러 개의 lxc 컨테이너가 있고 이를 LAN 및 WAN에 노출하고 싶습니다. 다음과 같은https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-configuring_port_forwarding_using_nftablesWAN 및 LAN 컴퓨터에서는 서버에 성공적으로 액세스할 수 있지만 로컬 호스트/라우터 서버 자체에서는 액세스할 수 없습니다!

다음은 부분적으로 유효한 구성입니다.

# Created from lxc-net in debian
table inet lxc {
        chain input {
                type filter hook input priority filter; policy accept;
                iifname "lxcbr0" udp dport { 53, 67 } accept
                iifname "lxcbr0" tcp dport { 53, 67 } accept
        }

        chain forward {
                type filter hook forward priority filter; policy accept;
                iifname "lxcbr0" accept
                oifname "lxcbr0" accept
        }
}
# Created from lxc-net in debian
table ip lxc {
        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                ip saddr 10.0.3.0/24 ip daddr != 10.0.3.0/24 counter packets 51 bytes 3745 masquerade
        }
}

# This is what I added
table ip myportforwarding {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                tcp dport 8088 dnat to 10.0.3.230
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                ip daddr 10.0.3.230 masquerade
        }
}

이 답변에서 몇 가지 옵션을 시도했습니다.nftables를 사용하여 Raspberry Pi에서 Minecraft 서버에 대한 포트 전달을 구성하는 방법은 무엇입니까?

8088의 서비스에 로컬로 액세스할 수 있는 방법은 없는 것 같습니다.

Wireshark를 보고 다음과 같이 LAN에서 액세스합니다.

192.168.1.105 -> 192.168.1.1 SYN
10.0.3.1 -> 10.0.3.230 SYN
...

동일한 머신에서 액세스:

192.168.1.1 -> 192.168.1.1 SYN
192.168.1.1 <- 192.168.1.1 FIN!

저는 nft나 iptables에 익숙하지 않아서 뭔가 빠졌다고 확신합니다.

답변1

그 중 일부를 살펴보자일반 네트워크의 Netfilter 및 패킷 흐름개략도. 그것은iptables하지만 대부분은 다음에 적용됩니다.nftables:

일반 네트워크의 Netfilter 및 패킷 흐름

기록에 따르면,conntrack 상태의 패킷에 대해서만 조회 테이블 새로운 기능: 패킷 시작새로운흐름.

라우팅/전달되는 트래픽NAT/사전 라우팅후크: 새 스트림이 NAT를 수행할 기회가 있는 곳입니다. OP가 사건을 처리했습니다.

로컬로 시작된 패킷(다음에서 생성됨)로컬 프로세스중앙에 버블) 먼저 통과자연/산출연결하면 답변이 평소대로 전달됩니다.NAT/사전 라우팅훅. 쿼리 대상이 아직 변경되지 않았다는 사실을 제외하면 답변이 이전에 생성된 스트림과 일치하므로 더 이상 NEW 상태의 패킷이 아닙니다.NAT/사전 라우팅너무 늦었기 때문에 그러한 트래픽에 대해서는 후크를 참조하지 않습니다. NAT를 수행할 수 있는 유일한 장소는 다음과 같습니다.자연/산출.

따라서 이 경우 라우팅된 패킷과 로컬로 시작된 패킷 모두 동일한 변경 사항을 받아야 하며 규칙은 다음과 같습니다.NAT/사전 라우팅다음으로 복사해야 합니다.자연/산출그리고 종종 다양한 상황에 맞게 약간 조정되었습니다.

여기서의 적응은 호스트가 자신에게 도달하는 것에 관한 것이므로 인터페이스의 경우 루프백( lo) 인터페이스의 라우팅 사례 이므로 oif lo이에 추가됩니다. 이 필터가 없으면 포트 8088을 사용하여 호스트에서 어디로든 보내는 모든 쿼리는 컨테이너로 리디렉션되며 호스트만 해당 사례에 사용됩니다.

이미 존재하는 체인에 이 체인을 추가하세요.IP 내 포트 포워딩테이블에서 이를 처리합니다.

        chain output {
                type nat hook output priority dstnat; policy accept;
                tcp dport 8088 oif "lo" dnat to 10.0.3.230
        }

작은 세부 사항: from자연/산출방아쇠경로 재지정 확인라우팅 스택이 이전 라우팅 결정을 다시 고려하도록 지시하는 섹션(출력 인터페이스 lo) 뒤쪽에경로 재지정 확인출력 인터페이스는 lxcbr0.

관련 정보