web-dev-qa-db-ja.com

iptables NATはリモートIPを保持しません

ポート2222で着信sshトラフィックを同じホスト上のvmware「vmnet」ネットワークで実行されている仮想マシンに転送する以下のiptablesルールがあります。

192.168.1.1   192.168.1.40
+---------+     +------+     +-----------------+ 
| network |---->| Host |__   | virtual machine |
+---------+     +------+ \\__+-----------------+
              192.168.2.1 \_____192.168.2.22  

仮想マシンのauth.logでは、リモートログインの着信IPアドレスは、常にパケットを転送したホストのIPです。 リモートIP情報を保持するにはどうすればよいですか?

*filter
:INPUT ACCEPT [593178:45807398]
:FORWARD ACCEPT [881:158378]
:OUTPUT ACCEPT [859348:1232593358]
-A FORWARD -d 192.168.2.22/32 -o vmnet99 -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [943:138565]
:INPUT ACCEPT [658:122878]
:OUTPUT ACCEPT [3266:229178]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22
-A POSTROUTING -j MASQUERADE
COMMIT
2
RaWkStAr

最後のiptablesルール、

 -A POSTROUTING -j MASQUERADE

は、VMへのパケットを含め、ホストを離れるすべてのパケットをマスカレードしています。これが、ゲストですべてのパケットがホストから送信されたものとして表示される理由です。代わりに、マスカレードをインターネットのホストを離れるパケットに制限する必要があります。

 -A POSTROUTING -o eth0 -j MASQUERADE

eth0を呼び出すと、インターネットに接続されているインターフェイスになります。

編集:

質問が他に何が必要ですか IP転送を機能させる場合、十分な答えは次のとおりです。

  Sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22
4
MariusMatutiae