將流量從一個IP和端口重定向到另一個IP和端口

在管理服務器時,重定向流量非常常見。

假設我們有一台運行著某些服務的服務器,但是由於某種原因,我們更改了其中一個服務(我不知道,例如pop3是端口110)到另一台服務器。 正常且最常見的事情是僅更改DNS記錄中的IP,但是如果有人使用IP而不是子域,則會受到影響。

該怎麼辦? ...簡單,將服務器通過該端口接收的流量重定向到具有相同端口的另一台服務器。

服務器節點局域網以太網

我們如何開始重定向流量?

首先,我們必須啟用 轉發 在服務器上,為此,我們將放置以下內容:

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服務器將看到所有數據包或請求都來自客戶端的IP,即第二台服務器看到請求與第一台服務器的IP一起到達(並且我們將其應用重定向),也將放置第二行:

iptables -t nat -A POSTROUTING -j MASQUERADE

一些問題和答案

在示例中,我兩次都使用相同的端口(110),但是它們可以將流量從一個端口重定向到另一個端口而沒有問題。 例如,假設我想將流量從端口80重定向到另一台服務器上的443,因為它將是:

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. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   FER 他說:

    我們還可以通過允許端口轉發的防火牆來做到這一點,對嗎? (應用相應規則)。

    1.    KZKG ^ Gaara 他說:

      是的,當然可以,最後,像Pfsense或其他防火牆一樣,從後面使用iptables。

      1.    獵人 他說:

        確切地說,pfsense不是使用iptables,而是使用pf,請記住它是內部的bsd。

        1.    KZKG ^ Gaara 他說:

          哦,對,我的壞!

  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本地主機:8080 / hello_world
    curl:(7)無法連接到本地主機端口8080:連接被拒絕

    知道可能是什麼問題嗎?

    1.    KZKG ^ Gaara 他說:

      是的,更改在重新啟動後丟失,您將必須使用iptables-save和iptables-restore或類似方法來避免這種情況。
      我不太了解您要做什麼,實例A?

      1.    薩科 他說:

        我有一台僅支持來自特定ip(服務器A)的連接的服務器,我不能或不想向白名單中添加更多ip(用於可伸縮性問題),所以我希望到外部服務器的所有流量都通過該服務器(一種)。
        出於實用性考慮,我具有全局配置,這些配置定義了用於每個服務的IP,因此在這種情況下,就像“每個想要使用外部服務的人都必須使用IP A”
        我使用本文中的方法成功實現了此目的,但是遇到一個問題,即在應用它時,服務器A無法使用其自己的ip訪問服務(但所有其他服務器都可以)。
        到目前為止,我發現最好的方法是將映射添加到服務器A的/ etc / hosts文件中,指向外部ip,覆蓋全局設置。

  3.   布賴鮑 他說:

    很好,如果我有另一個郵件服務器,我可以將端口143的流量從server1轉發到server2,電子郵件將到達server2,對嗎?

    問候

    1.    KZKG ^ Gaara 他說:

      從理論上講,它的工作原理是這樣的。 當然,您必須在server2上正確安裝郵件服務器

  4.   MSX 他說:

    我們喜歡閱讀的帖子,謝謝!

  5.   亞伯拉罕·伊巴拉 他說:

    很棒的文章,我有一個正在工作的項目,我想問你一個問題,有一些具有NAT功能的工業交換機(我想它們使用下面的IPTable),可以在不更改設備的情況下轉換IP地址,例如,我有一台與10.10.2.1.X計算機通信的服務器10.10.2,並通過該交換機進行了編程,以便實際上從服務器看到的地址為192.168.2.4的計算機為10.10.2.5,它轉換了IP要顯示的地址從其他具有該地址的計算機上,我想在具有Ubuntu或其他發行版的服務器上進行操作,iptables規則是什麼?

  6.   uk 他說:

    很好的信息,謝謝你^ _ ^

  7.   伊蘇斯 他說:

    下午好。
    我在嘗試重定向時遇到問題。 我解釋:
    我在Ubuntu中有一個代理服務器,帶有2個網卡:
    eth0 = 192.168.1.1已連接到本地網絡的其餘部分。
    eth1 = 192.168.2.2已連接到路由器。
    我需要通過eth0來通過eth1以及通過代理的所有內容(我使用Squid,其默認端口為3128),並且在IPTABLES配置中找不到密鑰。
    我不需要任何限制,只需要在訪問的網址的日誌中保留一條記錄即可。

    我希望您能為我提供幫助,因為這是一項繁瑣的任務,困擾了我幾天。

    謝謝。

  8.   加布里埃爾 他說:

    朋友,我是其他服務器的新手,我不知道,但是我了解這個主題,並且學得很快,我的問題是以下這些服務器中我有2台服務器serv_1和serv_2,它們已連接到同一Intranet。建立了owncloud之後,我要執行以下操作:

    當放置對自己的雲的訪問ip(ipowncloud)時,某個範圍的ip,例如rangeip_1被定向到serv_1,如果是另一個rangeip_2,則將相同的ipowncloud定向到serv_2,這是為了定位2個服務器在兩個不同的城市中,並且IP範圍不同,但是它們都在同一網絡上,這將是第一部分,第二部分將是清楚的是將這兩個服務器同步為鏡像服務器或就此向我提出建議以優化寬頻帶,如果您要向我解釋如何逐步進行操作,請不要使用超級程序員模式=(

  9.   安東尼奧·卡里佐薩(Antonio Carrizosa) 他說:

    您好,對不起,我有一個交換機負責構成我的網絡的所有設備的通信,此後是防火牆,最後是Internet出口,發生了什麼事,我想在交換機中進行重定向除非請求的服務是Internet,否則不必到達防火牆。

  10.   約翰 他說:

    使用此方法可以將HTTPS重定向到HTTP嗎?

  11.   馬蒂 他說:

    嗨,也許有點晚了,但是我想問你,當我想連接到同一網絡上的Web服務器時,我該如何使烏賊不修改客戶端的IP?

  12.   拉法特32 他說:

    不要因為問我而對我不好。 可以在Windows中完成嗎?

  13.   馬丁 他說:

    這些信息對我很有用。 像往常一樣,你們可以放心,當我找不到英語的東西時,我通常最終會用西班牙語看,在那種情況下,我幾乎總是來這個網站,謝謝。

  14.   西巴 他說:

    我有一個 4G 路由器,它是我不管理的網絡的客戶端(顯然,我是客戶端)……這個路由器是通過 OpenVPN 到遠程網絡的網關。 此外,該路由器還實現了端口轉發功能,以訪問現場那些子網之一的服務器的80端口。

    這是我必須作為防火牆自定義規則放入路由器的聲明 «-t nat -A POSTROUTING -j MASQUERADE»

    謝謝您的幫助!