あるIPとポートから別のIPとポートにトラフィックをリダイレクトする

サーバーを管理するときに非常に一般的なことは、トラフィックをリダイレクトすることです。

特定のサービスが実行されているサーバーがあるが、何らかの理由でそれらのサービスのXNUMXつを変更するとします(わかりません。たとえば、ポート3であるpop110)別のサーバーに。 通常の最も頻繁なことは、DNSレコードのIPを変更することですが、誰かがサブドメインの代わりにIPを使用している場合は、影響を受けます。

何をすべきか? ...簡単です。そのサーバーが受信したトラフィックをそのポート経由で同じポートを持つ別のサーバーにリダイレクトします。

server-node-lan-ethernet

トラフィックのリダイレクトを開始するにはどうすればよいですか?

まず、有効にしたはずです。 転送 サーバー上で、このために以下を配置します。

echo "1" > /proc/sys/net/ipv4/ip_forward

このチュートリアルに示されているすべてのコマンドは、管理者権限で実行する必要があります。rootユーザーで直接実行することをお勧めします。

前のコマンドが機能しない場合は、この他のコマンドを使用することもできます(CentOSでこのように私に起こりました):
sysctl net.ipv4.ip_forward=1
次に、ネットワークを再起動します。

service networking restart

CentOSなどのRPMディストリビューションでは、次のようになります。

service nertwork restart

次に、重要なことに移り、サーバーに次のことを伝えます。 iptables リダイレクトするもの:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

言い換えると、前述の例に従って、サーバーがポート110を介して受信するすべてのトラフィックを別のサーバーにリダイレクトするとします(例:10.10.0.2)、110を介してそのトラフィックを引き続き受信します(同じサービスです):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

10.10.0.2サーバーは、クライアントがリクエストをスイムしたい場合、つまり、2番目のサーバーが1番目のサーバーのIPで(およびリダイレクトを適用する)、このXNUMX行目を配置することもできます。

iptables -t nat -A POSTROUTING -j MASQUERADE

いくつかの質問と回答

この例では、両方の時間(110)で同じポートを使用しましたが、問題なく80つのポートから別のポートにトラフィックをリダイレクトできます。 たとえば、別のサーバーのポート443からXNUMXにトラフィックをリダイレクトするとします。これは次のようになります。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

これは iptables、私たちが知っている他のすべてのパラメータを使用できます。たとえば、特定のIPからのトラフィックのみをリダイレクトする場合は、-sを追加します。 …たとえば、10.10.0.51からのトラフィックのみをリダイレクトします。

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

またはネットワーク全体(/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

-iを使用してネットワークインターフェイスを指定することもできます:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

終わり!

これはすでに述べたように、iptablesです。サーバーが希望どおりに動作するように、既知のものを適用できます😉

ご挨拶!

専用サーバー_サブイメージ


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.  

    ポートフォワーディングを可能にするファイアウォールからもこれを行うことができますよね? (対応するルールを適用します)。

    1.    KZKG ^我愛羅

      はい、もちろん、最終的にはPfsenseなどのファイアウォールで、背後からiptablesを使用します。

      1.    ハンター

        正確には、pfsenseはiptablesではなくpfを使用します。これは、内部のbsdであることを忘れないでください。

        1.    KZKG ^我愛羅

          ああ、私の悪い!

  2.   ニコラス

    ヒントありがとうございます🙂

    私にはいくつか疑問があります:
    1-変更は永続的ですか? または、サーバーを再起動すると失われますか?
    2-同じサブネット上に複数のインスタンス(たとえば、A、B、C)があります。 インスタンスAでは、トラフィックを外部IPにルーティングするルールを適用し、インスタンスBとCからのカールを使用してテストすると、すべてが驚異的に機能します。 問題は、インスタンスAからは機能しないことです。 IPとループバックインターフェイスの両方を使用してみましたが、どちらも機能しません。
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination xxxx:8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx:8080

    $ curl ip-yyyy:8080 / hello_world
    curl:(7)ip-yyyyポート8080への接続に失敗しました:接続が拒否されました
    $ curl localhost:8080 / hello_world
    curl:(7)ローカルホストポート8080への接続に失敗しました:接続が拒否されました

    問題が何であるかについて何か考えはありますか?

    1.    KZKG ^我愛羅

      はい、変更は再起動時に失われます。それを回避するには、iptables-save&iptables-restoreなどを使用する必要があります。
      インスタンスA、あなたが何をしたいのかよくわかりませんでしたか?

      1.    ニコラス

        特定のIPからの接続のみをサポートするサーバー(サーバーA)があり、ホワイトリストにIPを追加できないか、追加したくないので(スケーラビリティの問題のため)、外部サーバーへのすべてのトラフィックがそのサーバーを通過するようにします(A )。
        実用上、サービスごとに使用するIPを定義するグローバル構成があるので、この場合は「外部サービスを利用したい人は誰でもIPAを使わなければならない」という感じになります。
        この記事の方法を使用してこれを正常に達成しましたが、適用すると、サーバーAが独自のIPを使用してサービスにアクセスできないという問題が発生します(ただし、他のすべてのサーバーはアクセスできます)。
        これまでのところ、サーバーAの/ etc / hostsファイルにマッピングを追加し、外部IPをポイントして、グローバル設定を上書きするのが最善でした。

  3.   ブレイボー

    別のメールサーバーがある場合は、ポート143からserver1からserver2にトラフィックを転送でき、メールはserver2で届きますよね?

    よろしく

    1.    KZKG ^我愛羅

      理論的にはそうです、それはこのように機能します。 もちろん、メールサーバーをserver2に正しくインストールする必要があります🙂

  4.   MSX

    私たちが読みたい投稿の種類、ありがとう!

  5.   アブラハムイバラ

    すばらしい記事です。私が取り組んでいるプロジェクトがあります。質問したいのですが、NAT機能を備えた産業用スイッチがあり(以下のIPTablesを使用していると思います)、機器を変更せずにIPアドレスを変換します。たとえば、10.10.2.1.Xコンピューターと通信するサーバー10.10.2があり、スイッチを介して、アドレス192.168.2.4のコンピューターが実際にサーバーから10.10.2.5として認識されるようにプログラムされている場合、そのIPが変換されます。表示されるアドレスそのアドレスを持つ他のコンピューターから、Ubuntuまたは別のディストリビューションを備えたサーバーから実行したいのですが、iptablesルールは何でしょうか?

  6.   クック

    とても良い情報ありがとうございます^ _ ^

  7.   イサス

    今日は。
    リダイレクトしようとして問題が発生しました。 私が説明します:
    Ubuntuに2つのネットワークカードを備えたプロキシサーバーがあります。
    eth0 = 192.168.1.1は残りのローカルネットワークに接続されています。
    eth1 = 192.168.2.2がルーターに接続されています。
    eth0を経由してeth1を経由し、プロキシ(デフォルトポートが3128のSquidを使用)を経由するすべてのものが必要ですが、IPTABLES構成でキーが見つかりません。
    いかなる種類の制限も必要ありません。アクセスしたWebアドレスのログにレコードが残るだけです。

    数日間私を悩ませてきた非常に面倒な作業なので、あなたが私を助けてくれることを願っています。

    ありがとう。

  8.   ガブリエル

    友人、私は他のサーバーに非常に慣れていません、私はわかりませんが、主題を理解し、すぐに学びます、私の質問は次のとおりです私は同じイントラネットに接続した2つのサーバーserv_1とserv_2を持っています、これらのサーバーには私が持っていますowncloudのセットアップ私は次のことをしたいと思います:

    owncloud(ipowncloud)にアクセスIPを配置するときの特定の範囲のips(たとえばrangeip_1)はserv_1に向けられ、別のrangeip_2が配置されている場合は、同じipowncloudがserv_2に向けられます。これは、2つのサーバーが配置されるためです。 2つの異なる都市で、IP範囲は異なりますが、すべて同じネットワーク上にあります。これが最初の部分であり、XNUMX番目の部分は、これらXNUMXつのサーバーを同期してミラーにするか、順番にアドバイスすることです。幅の帯域を最適化するために、スーパープログラマーモードではなく、ステップバイステップでそれを行う方法を私に説明する場合は、お願いします=(

  9.   アントニオ・カリゾサ

    こんにちは、すみません。ネットワークを構成するすべてのデバイスの通信を担当するスイッチがあります。この後、ファイアウォールと最後にインターネットが終了します。スイッチでリダイレクトを指定したいのですが。要求されたサービスがインターネットでない限り、ファイアウォールに到達する必要はありません。

  10.   ジョン

    この方法を使用して、HTTPSをHTTPにリダイレクトできますか?

  11.   マティ

    こんにちは、少し遅いかもしれませんが、同じネットワーク上のWebサーバーに接続するときに、クライアントのIPを変更しないようにsquidを作成するにはどうすればよいですか?

  12.   ラファット32

    私に尋ねるのを悪く扱わないでください。 これはWindowsで実行できますか?

  13.   マーティン

    この情報は私にとって役に立ちました。 いつものように、皆さんは信頼できます。英語で何かを見つけることができないとき、私は通常スペイン語で見ることになります。そのような場合、私はほとんどいつもこのサイトにアクセスします。ありがとう。

  14.   セバ

    管理していないネットワークのクライアントである 4G ルーターを持っています (明らかに、私はクライアントです)。このルーターは、OpenVPN を介したリモート ネットワークへのゲートウェイです。 さらに、このルーターは、フィールド内のサブネットの 80 つのサーバーのポート XNUMX にアクセスするためのポート転送機能を実行します。

    これは、ファイアウォールのカスタム ルール「-t nat -A POSTROUTING -j MASQUERADE」としてルーターに入れなければならなかった宣言でした。

    助けてくれてありがとう!