理解できたかどうかは完全にはわかりませんが、あなたは間違った連鎖の中にいるだけだと思います。 :-) 私も最初に iptables を使ったときは戸惑いました。しかし、前進への道 ローカル port ${LOCAL UNPRIV PORT} は以下のステートメントです:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
これは、セマンティックの問題と netfilter の動作方法の混合です。昔は、ローカル ポートの転送には、転送先のボックスへの接続と、宛先への 2 番目の接続が含まれていました。 iptables はこれを 1 ステップで行います。したがって、2 つの接続の代わりに、そのポートへのトラフィックを宛先に直接転送します。 Netfilter はすべてのサニティ チェックとブックキーピングを行います。有効な接続に属するパケットのみが NAT 変換され、転送可能になります。
DNAT を有効にすると、パケットの転送が許可されなくなります。ルールも追加する必要があります:
$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP
$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT
$IPT -A INET-PRIV -j DROP
もちろん、転送を有効にする必要があります。
echo "1" > /proc/sys/net/ipv4/ip_forward
Pro iptables :より安全で柔軟性が高く、接続ごとに使用されるメモリと CPU が少ない
Contraiptables :内部マシンから内部マシンへの接続の転送 (eth0 にフィードバックする) は、iptables では意味がありません (もちろん、いつでも直接接続できます)。ローカルで生成されたトラフィックの転送は機能しません (ポート転送デーモンが役立つかもしれませんが、通常は意味がありません)
まさにこれが問題かもしれません :ルーター以外で NAT を使用しようとしている場合は、転送デーモンを使用するか、この余分なポート転送を完全にスキップして、次のことを行う必要があります:
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
special-vpn-box では、ルーターからの着信接続と、iptables を使用した ${ANOTHER SYSTEM}:${REMOTE PORT} への発信接続のみを許可できます。そうすれば、特別な VPN ボックスのユーザーは ${ANOTHER SYSTEM}:${REMOTE PORT} にしかアクセスできず、信頼されていなければ他のことはできません。
ローカルホスト転送のために私が具体的に行っていることは次のとおりです:
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
ip.ip.ip.ip
を必ず置き換えてください 実際のパブリック IP と --dport 3306
について 転送したいポートの.
最後に sysctl コマンドを実行し、 /etc/sysctl.conf
も更新します
sysctl.ctl
を更新できます 次のコマンドで localhost のルーティングを許可します:
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
これはすべて単純で良いように思えますが、調査と追跡が必要でした。 localhost/127.0.0.1 の転送にはこのメソッドが必要であり、他の典型的な例は機能しないことに注意してください。 localhost で機能しないソリューションの例:
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE
http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}
iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}