私の目標は、ローカルホストからリモートサーバーに接続をリダイレクトし、クライアント構成を変更せずにリモートアドレスを動的に変更できることです。これで、次のように外部インターフェイスでnatを使用してこれを行うことができます。
LOCAL_IP=10.1.1.10
LOCAL_PORT=8888
REMOTE_IP=10.1.1.11
REMOTE_PORT=9999
iptables -t nat -A OUTPUT -p tcp -d $LOCAL_IP --dport $LOCAL_PORT -j DNAT --to-destination $REMOTE_IP:$REMOTE_PORT
iptables -t nat -A POSTROUTING -p tcp -d $REMOTE_IP --dport $REMOTE_PORT -j SNAT --to-source $LOCAL_IP
これはうまく機能しますが、まだクライアント構成をホストIPアドレスに接続します。 NATトラフィックを、で送信できると127.0.0.1:8888
いいようです10.1.1.11:9999
。 DNAT / SNAT | MASQUERADEの組み合わせを使用すると、これは可能ですが、まだ機能している構成が見つかりませんでした。私が試したすべての設定は自動的にパケットを破棄するようです(おそらく火星のルールによってキャプチャされましたか?ip_forwardが有効になっています)。
ベストアンサー1
問題は、Linuxが内部のすべてを127.0.0.0/8
ローカルで処理し、応答さえしないということです(127.99.88.77でpingを試してください)。
これは、パケットが「離れる」ときにOUTPUTで最初に送信されることを意味しますlo
。それが「入ってくる」とINPUTチェーンに入ります(確かに確認するために追跡します)。これがあなたの状況が崩れる場所です。
Linuxでは、PRE / POSTルーティングチェーンに加えて、システムに向けられたパケットはINPUTチェーンのみを通過します。システムから発生したパケットはOUTPUTチェーンのみを通過します。ローカルシステムで開始されず、ローカルシステムに向かわないパケットはFORWARDチェーンのみを通過します。
したがって、LinuxにFORWARDチェーンを選択させるには、LinuxはINPUTチェーンを選択します。
いくつかの他のオプションを試してみましたが、うまく動作しませんでしたが、私は知っています。なぜ動作しません。後で時間があるときにこれを見てみましょう。
PS:最初はルータの問題だと思いました(私の考えではまだルーティングが関係していると思います)。 IPをlo
外部に変換すると、127.0.0.1
ルーティングの競合が発生し、自動的にパケットがドロップされる可能性があります。この機能を無効にするには、を設定する必要がありますrp_filter=0
。それでも機能するには、これを行う必要がありますが、これが問題の原因ではありません。根本的な問題は、Linuxが出力が必要なときに入力を使用することです。