nftables를 사용하여 UDP 브로드캐스트 패킷 전달

nftables를 사용하여 UDP 브로드캐스트 패킷 전달

내 네트워크에는 nftables가 포함된 OpenWRT 라우터가 있습니다. 또한 내 네트워크(192.168.36.x)에 게임 서버가 있고 다른 네트워크(192.168.1.x)에 클라이언트가 있습니다. 클라이언트에는 브로드캐스트 패킷(255.255.255.255)을 트리거하여 네트워크를 통과하지 않는 서버 애플리케이션의 인스턴스를 검색하는 애플리케이션이 있습니다. 그래서 nftables DNAT 기능을 활용하여 192.168.1.x의 클라이언트에서 192.168.36.x의 서버로 브로드캐스트 패킷을 전달하려고 시도했지만 지금까지는 성공하지 못했습니다.

나는 다음과 같은 체인을 설정했습니다.

table ip nat {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                iif "br-lan" ip daddr 255.255.255.255 udp dport 10308-10310 dnat to 192.168.36.36
        }
}

br-lan192.168.1.x 호스트를 연결하는 라우터의 브리지는 어디에 있지만 서버에서 아무것도 수신되지 않는 것 같습니다. 내가 시도했지만 성공하지 못한 다른 변형은 다음과 같습니다.

  • iif br-lan ip daddr 192.168.1.255 udp dport 10308-10310 dnat to 192.168.36.36
  • iif br-lan meta pkttype broadcast udp dport 10308-10310 dnat to 192.168.36.36
  • iif br-lan udp dport 10308-10310 dnat to 192.168.36.36
  • ip daddr 255.255.255.255 udp dport { 10308, 10309, 10310 } dnat to 192.168.36.36
  • meta pkttype broadcast udp dport 10308-10310 dnat to 192.168.36.36

이 모든 것에서 특히 흥미로운 점 iif br-lan udp dport 10308-10310 dnat to 192.168.36.36(예: 대상 주소에 필터를 넣지 않음): 이 경우 모든 패킷이 실제로 서버로 전달되는 것처럼 보이지만 불행히도 이는 애플리케이션이 로컬을 트리거하기 때문에 또 다른 하나의 문제를 가져옵니다. 원격 서버에서 정보를 얻기 위해 브로드캐스트 패킷과 원격 유니캐스트 검색 패킷을 사용하는 경우, 이러한 패킷을 모두 라우팅하면 끝없는 중복 목록이 생성됩니다. 따라서 내 로컬 브로드캐스트 패킷에 규칙을 적용하기만 하면 됩니다.

편집: 위의 단락을 무시하십시오. 방금 이 패킷이 브로드캐스트 패킷이 아니기 때문에 올바르게 전달되고 있다는 것을 깨달았습니다.

내가 이 문제를 올바른 방식으로 처리하고 있나요? 제가 시도할 수 있는 다른 것이 있나요? 불행하게도 socat이는 클라이언트가 실제로 서버에 연결하는 데 사용하는 소스 IP 주소를 다시 작성하므로 도움이 되지 않습니다. 따라서 이 역시 옵션이 아닙니다.

답변1

내 문제를 해결했습니다! ~에서 영감을 얻다이 답변, 이 규칙은 매우 효과적입니다.

#!/usr/sbin/nft -f

table netdev dcs_broadcast
delete table netdev dcs_broadcast

table netdev dcs_broadcast {
    chain dcs_lan { type filter hook ingress device br-lan priority 0;
        pkttype broadcast ether type ip udp dport 10308-10310 counter fwd to br-36
    }
}

관련 정보