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(たとえば、宛先アドレスにフィルタを入れない)。この場合、すべてのパケットが実際にサーバーに転送されるように見えますが、残念ながら、アプリケーションはローカルをトリガーするため、もう1つの問題が発生します。リモートサーバーから情報を取得するためにブロードキャストパケットとリモートユニキャスト検索パケットを使用している場合、これらのパケットの両方をルーティングすると、無限の冗長リストが生成されます。したがって、私のローカルブロードキャストパケットにルールを適用するだけです。

編集:上記の段落を無視してください。このパケットがブロードキャストパケットではないため、正しく配信されていることに気づきました。

私はこの問題を正しい方法で処理していますか?私が試すことができる他のものがありますか?残念ながら、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
    }
}

おすすめ記事