web-dev-qa-db-ja.com

iptablesを使用してUDPプロキシを作成する方法

ポート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

しかし、それは機能していないようです-私のサーバーの接続すら見ていません。構成が間違っているためか、他の問題のためかはわかりません。

いくつかの質問:

  1. NAT構成を追加したら、どうにかしてiptablesを再起動する必要がありますか?
  2. 着信ポートへのトラフィックを許可する必要があるか、またはNAT設定で十分ですか?)

更新:実際にトラフィックを処理するサーバーは、iptablesをセットアップしようとしているマシンとは異なるマシン上にあります。

5
arikfr

説明で言及しなかった点がいくつかあります。

  1. Iptablesマシンが受信したトラフィックを別のマシンに転送する場合。 IP転送を有効にする必要があります。詳細については、以下を参照してください。
  2. また、転送されたトラフィックの通過を許可する必要があります。これを行うには、FORWARDチェーンのデフォルトポリシーをACCEPTに設定するか、特定のトラフィック(ip/port)を許可します。

IP転送を有効にするには、/etc/sysctl.confの次の行のコメントを外します。

net.ipv4.ip_forward=1

次に、Sudo sysctl -pを実行します。

iptablesコマンドを使用してルールを追加すると、それらはメモリにのみ追加されます(再起動後に失われます)。 iptables-saveを使用してテキストファイルに保存し、iptables-restoreを使用して必要に応じて復元する必要があります。

5
Khaled