プログラムでパケット宛先を設定し、Netfilter を使用してルーティングします。

プログラムでパケット宛先を設定し、Netfilter を使用してルーティングします。

私はiptablesとそのモジュールに最初に触れました、そしてそれを理解するのに助けが必要です。


質問

大規模なNATルーティングを管理します。 100,000を超える固定IP(および増加している)を処理し、それをN環境の1つにルーティングする必要があります。


ターゲット

目標は、動的DNATルーティングを持つことです。これが意味するものは、次のプロセスを使用して説明できます。

  1. マシン(Linux)はネットワーク層の要求を受け取ります。
  2. Netfilterは要求を傍受します。プログラム的に
  3. Netfilterはターゲットを次に変更します。人々知的財産権
  4. リクエストの転送

現在のソリューション

現在の実装は静的に実行されます。 IPごとのMASQUERADEで、次のDNATルールを使用してSNATを処理します。

iptables -t nat -A PREROUTING -s {USER-STATIC-IP_1} -j DNAT --to-destination {ENV-IP_1}
...
iptables -t nat -A PREROUTING -s {USER-STATIC-IP_N} -j DNAT --to-destination {ENV-IP_N}
iptables -t nat -A POSTROUTING -j MASQUERADE

質問:

  • 拡張 - iptablesルールは永遠に大きくすることはできません。
  • レプリケーション - ルールデータは一元化されず、代わりに各システムでキャッシュされます。
  • 管理 - N個のルールを管理し、システム間で同期するのは面倒です。
  • ロギング - ロギングできますが、ストリーミングはできません。 LOG iptablesモジュールを使用する必要があります
  • 直接制御なし - パケットフローに対する実際の制御はありません。静的ルールのみを追加および削除できますが、パケットと対話することはできません。

挑戦

  • Netfilterを使用してネットワーク要求を傍受する(プログラミング方法で要求を傍受できる他のモジュールが見つかりません)
  • 要求の非同期処理。すべてのIPを一元化するために、IPアドレスをデータベース(高速データベース)に保存したいと思います。
  • 更新中バッグ無傷の目的地
  • 応答はユーザーに再ルーティングする必要があります(MASQUERADEスタイル)。
  • Netfilterとの統合に使用されるプログラミング言語は、高速(コンパイル可能)で、新しいプログラマに精通している必要があります(IPythonそして行く)。

これは非常に複雑な質問であり、私にとっては本当に難しい質問でした。

どんな助けでも大変感謝します。

関連情報