ポート50000でUDPサーバーを実行しているサーバーがあります。このサーバーはクライアントから更新を受信し、接続元のソケットに5秒ごとにクライアントにpingを返します。
次に、このUDPサーバーとの間のすべてのトラフィックを別のサーバー経由でリダイレクトします。基本的に私はこのサーバーの前に透過プロキシをセットアップしたいと思います。その理由は、DNS設定を変更せずに、UDPトラフィックを処理するサーバーを簡単に制御できるようにしたいためです。
最初に私はsocatを使用してこのプロキシを作成しようとしました:
socat UDP-LISTEN:50000,fork UDP:myserver:50000
しかし、これは着信トラフィックに対してはうまく機能しているようですが、サーバーからクライアントへのバックトラフィックは宛先に到達しません。また、socatは接続ごとに別のプロセスをforkするようです。そのため、クライアントがIPを切断または切り替えたときに、プロセスが多すぎてプロセスが停止する可能性があります。
Iptables NAT=の機能を使用できることに気づきましたが、私には機能しないようです。私が試した構成は次のとおりです:
Sudo iptables -t nat -A PREROUTING -p udp --dport 50000 -j DNAT --to-destination myserver:50000
しかし、それは機能していないようです-私のサーバーの接続すら見ていません。構成が間違っているためか、他の問題のためかはわかりません。
いくつかの質問:
更新:実際にトラフィックを処理するサーバーは、iptablesをセットアップしようとしているマシンとは異なるマシン上にあります。
説明で言及しなかった点がいくつかあります。
FORWARD
チェーンのデフォルトポリシーをACCEPT
に設定するか、特定のトラフィック(ip/port)を許可します。IP転送を有効にするには、/etc/sysctl.conf
の次の行のコメントを外します。
net.ipv4.ip_forward=1
次に、Sudo sysctl -p
を実行します。
iptables
コマンドを使用してルールを追加すると、それらはメモリにのみ追加されます(再起動後に失われます)。 iptables-save
を使用してテキストファイルに保存し、iptables-restore
を使用して必要に応じて復元する必要があります。