iptablesルールで「ローカルコンピュータのIP」を使用しますか?

iptablesルールで「ローカルコンピュータのIP」を使用しますか?

iptables自動化された方法で複数のコンピュータにそれらを展開するために使用するポート転送ルールを作成しました。アンシプール。ただし、POSTROUTINGチェーンルールでは、転送されたパケットを受信するシステムが応答する場所を知るために、ソースアドレスをローカルシステムのアドレスに変更する必要があります。ルールは次のとおりです。

iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source 192.168.11.1

つまり、DNATを使用してPREROUTING宛先アドレスを192.168.11.2に変更し、pingした後にパケットをネットワークに送信する前に、ネットワークヘッダーの送信元アドレスを変更するACCEPT必要があります。SNAT

--to-source「ローカルマシンのIP」でなければならないことを記号的に指定するためにこのルールを作成できますか?必要なコマンドを一連のパイプコマンドにコンパイルしてこれを達成します。

iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source $(ifconfig eth1 | grep -i "inet " | awk '{print $2}')

しかし、私の意図は、iptables設定ファイルを生成し、可能であればすべてのコンピュータに展開することです。

答え1

iptables設定スクリプトは単にシェルスクリプトです。 「一般的な」方法では、ローカルIPアドレスを変数に追加できます。

LOCALIP=`hostname -i`

次に、ハードコードされたIPアドレスインスタンスを次のものに置き換えます。

$LOCALIP

答え2

SNATの代わりにMASQUERADEターゲットを使用できます。

読みたいかもしれませんSNATと仮面舞踏会の違いただし、MASQUERADEにはオーバーヘッドがあります。

関連情報