単一のNIC(eth1)に2つのIPを持つLinuxシステム(RHEL 6.7)があります。ベースアドレス(つまり、すべてのトラフィックが発生しているように見えるアドレス)は10.0.0.23です。もう一つは10.0.0.160です。
iptablesを使用して、パケットの宛先アドレスに基づいて送信元IPを変更する方法を探しています。一般的に、トラフィックは10.0.0.23で「発信」しますが、パケットの宛先が10.0.0.1であると仮定すると、パケットは10.0.0.160で「発信」が必要です。
その理由は、ネットワークのファイアウォールが私の制御下にないためです。 10.0.0.160から10.0.0.1まではトラフィックを許可しますが、10.0.0.23から10.0.0.1までは許可しないルールがあります。
私はすべてのトラフィックが10.0.0.160から始まることを望んでおらず、10.0.0.1に行くトラフィックだけを望んでいます。
私はnatテーブルと辞書パスルールを使うつもりですが、ソースアドレスを変更する方法が見つかりませんでした。役に立つ場合は、eth1のエイリアスを作成できますが(eth1とeth1:0がある)、現在の構成にソリューションがあるかどうかを確認したかったです。
どんなアドバイスもよろしくお願いします。
答え1
所望の動作を達成する2つの方法は以下の通りである。
1. iptablesを使う
SNAT
ターゲットを使用すると、iptables
要件に応じてソースアドレスを変更できます。マニュアルページiptables 拡張こんな言葉がありますSNAT
。
このターゲットは、natテーブル、POSTROUTINGおよびINPUTチェーン、およびこれらのチェーンでのみ呼び出されるカスタムチェーンでのみ有効です。これは、パケットの送信元アドレスを変更し(この接続の将来のすべてのパケットも破損する)、ルールチェックを停止する必要があることを指定します。
あなたの質問に応じて、次の規則は次に送信されるパケットの送信元10.0.0.1
アドレスを変更します10.0.0.160
。
$ iptables -t nat -A POSTROUTING --destination 10.0.0.1/32 -j SNAT --to-source 10.0.0.160
2. 静的ルーティングを使用する
iptables
または、ルールを使用する代わりに、次の構文を使用して、ターゲットホストへのスタティックルートをルーティングテーブルに追加します。
$ ip route add <destination>/32 via <gateway> src <alias>
あなたが提供した情報に基づいて、以下を使用します。
$ ip route add 10.0.0.1/32 via <gateway> src 10.0.0.160
<gateway>
質問にこのアドレスが提供されていないので、ゲートウェイの実際のIPアドレスに置き換えてください。
これで、宛先へのトラフィックがから10.0.0.1
始まります10.0.0.160
。他のすべてのトラフィックはのデフォルトルートを使用します10.0.0.23
。