「1つのインターフェース」でポートフォワーディングする方法についてです。
iptables では実現できないと思います。
iptables にこだわらなくていいのですよね?
例えば、マシン2 からマシン1 の TCP 10000 番ポートに接続する方法として、以下の方法が考えられます。
いずれもマシン1 からは、Ubuntu機から 10000 番ポートに接続されたように見えます。
方法1: SSH ポートフォワード
マシン2 のコマンドプロンプトやシェルから ssh コマンドが利用できるのであれば、SSH ポートフォワードを利用できます。
(1) マシン2 から Ubuntu機に SSHトンネル(LocalForward)を作成
[マシン2]$ ssh -f -N -L 20000:192.168.1.10:100000 (Ubuntu機ユーザー)@192.168.101.1
※このプロセスは自動では終了しません。不要になったら kill コマンドなどで停止させる必要があります。
(2) マシン2 から 127.0.0.1:20000 番ポートにアクセス
方法2: xinetd redirect
(1) Ubuntu機に xinetd をインストール
(2) 設定ファイル(/etc/xinetd.d/redirect-machine1)を作成
service redirect-machine1
{
disable = no
type = UNLISTED
socket_type = stream
wait = no
user = root
port = 20000
redirect = 192.168.1.10 10000
}
(3) xinetd を起動
(4) マシン2 から Ubuntu機の 20000 番ポートにアクセス
方法1,2 とも Listen するポート番号(例では 20000)は、使われていないものであれば何番でもいいです。