入ってくるIPアドレスとインターフェースに応じて送信元IPアドレスを変更したいと思います。次の例を考えてみましょう。
-----------------------------
| |
| Host 1 |
| |
| application |
| |
| eth0 |
-----------------------------
|
| IP0-IP47
|
-----------------------------
| eth0 |
| Host 2 |
| |
| NAT |
| |
| eth1.1 eth1.2 eth1.3 |
-----------------------------
| | |
| | |
IP0-IP15 IP0-IP15 IP0-IP15
ホスト2は、インターフェースeth1.1、eth1.2、eth1.3でメッセージを受信しています。各インターフェイスには、16個の一意のIPアドレスを持つ16個のホストがありますが、これらの16個のIPアドレスはすべてのインターフェイスで同じです。 NATを実行する必要があるため、ソースIPは、アプリケーションに送信されるメッセージに48個の一意の送信元IPアドレスを設定するために、送信元IPとインターフェイスに基づいて変更されます。
モストダウンホストで実行されているアプリケーションとそのIPは変更できません。だから私はそれらをVLANに入れることにしました。
さまざまなチュートリアルやHOWTOを検索しましたが、探しているものが見つかりませんでした。問題は次のとおりです。SNATはPOSTROUTINGチェーンでのみ使用できますが、POSTROUTINGではそれが入ったインターフェイスに関する情報がありません。
私は私の仮定で正しいですか?私はこのネットワークに不慣れなので、どんな助けやアドバイスも役に立ちます。
ご協力いただきありがとうございます。
解決しました。
パケットの宛先はNATが実行されたマシンであったため、POSTROUTINGチェーンを使用できませんでした。
同じ問題を抱えている他の人のために:xtables-addonsをチェックしてください:RAWNATターゲット http://manpages.ubuntu.com/manpages/karmic/man8/xtables-addons.8.html
これにより、PREROUTINGでステートレスSNATを使用できます。それがまさに私が探していたものでした。モジュールをビルドしてロードするだけです(例:modprobeを使用)。
これを実装する場合は、ステートレスであることを忘れないでくださいNATしたがって、SNATやDNATのように自動的にリバースNATを実行しません。したがって、独自のリバースNATルールを実装します。
おそらくあなたはこれを行うことができます:
PREROUTING時に、異なるインターフェイスからのパケットを異なる番号でマークします。
Sudo iptables -t nat -A PREROUTING -i eth1.<x> -j MARK --set-mark <choose_a_unique_number_per_interface>
ルーティング後の時点でSNATとマークを使用します。
Sudo iptables -t nat -A POSTROUTING -s <iprange_of_eth1.<x>> -m mark --mark <number_given_to_eth1.<x>_at_the_time_of_prerouting> -j SNAT --to-source <an_ip_from_48_ipset>