web-dev-qa-db-ja.com

Debianでポート転送/リダイレクトを行う方法は?

2つの質問があります。

質問1:私のdebianマシンはip 192.168.57.28のインターフェースeth3を持っています。誰かが192.168.57.28:1234に接続しようとした場合、リクエストを別のマシンにリダイレクトするにはどうすればよいですか:192.168.57.25:80?

質問2:私のdebianマシンに192.168.57.28のeth3と動的IPのあるppp0の2つのインターフェースがあり、誰かがポート1234でppp0を介して接続を試みた場合、リクエストを192.168.57.25:80にリダイレクトするにはどうすればよいですか?

私はこれを試しました:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

しかし、それは機能しません。

iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

最初のものは、ポート1234へのすべての着信tcp接続が内部マシン192.168.57.25のポート80に送信されることを指定します。 iptablesはすべての着信接続を拒否するため、このルールだけではジョブは完了しません。次に、2番目のルールでpublich IPを使用してインターネットに接続するeth3からポート1234への着信接続を受け入れます。 FORWARDチェーンに2番目のルールを追加して、192.168.57.25のポート80にパケットを転送できるようにします。

編集: POSTROUTINGが追加されました。

接続を追跡します。そうしないと、外部のホストには内部IP 192.168.57.25が表示されますが、これには手掛かりがありません。

EDIT2: --toではなく--to-destinationであるというヒントを得た(sry)

12
Daywalker

DaywalkerとDannal Salberg Adlerssonに感謝します。何時間も誓った後、iptablesを使ったポート転送がついに機能します。 (Debianでテスト済み)

bash-script

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
8
scotty86