Пренасочвайте трафика от един IP и порт към друг IP и порт

Нещо много често при управление на сървъри е пренасочването на трафик.

Да предположим, че имаме сървър с работещи определени услуги, но по някаква причина променяме една от тези услуги (Не знам, например pop3, който е порт 110) към друг сървър. Нормалното и най-често нещо би било просто да промените IP в DNS записа, но ако някой използва IP вместо поддомейн, това ще бъде засегнато.

Какво да правя? ... просто, пренасочете трафика, получен от този сървър през този порт към друг сървър със същия порт.

сървър-възел-lan-Ethernet

Как да започнем да пренасочваме трафика?

Първото нещо е, че трябва да сме активирали спедиция на сървъра, за това ще поставим следното:

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

Всички команди, показани в този урок, трябва да се изпълняват с администраторски права, препоръчвам да се изпълняват директно с основния потребител.

Можете също да използвате тази друга команда, в случай че предишната не работи за вас (случи ми се така на CentOS):
sysctl net.ipv4.ip_forward=1
След това ще рестартираме мрежата:

service networking restart

В дистрибуциите на RPM като CentOS и други, това би било:

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 ще види, че всички пакети или заявки идват от 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, можете да приложите това, което вече е известно, така че сървърът да прави точно това, което искате да направите 😉

Поздрави!

DedicatedServer_SubImage


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Fer каза той

    Можем да направим това и от защитна стена, която позволява пренасочване на портове, нали? (прилагане на съответните правила).

    1.    KZKG ^ Гаара каза той

      Да, разбира се, в крайна сметка защитна стена като Pfsense или други, използвайте iptables отзад.

      1.    dhunter каза той

        За да бъдем точни, pfsense не използва iptables, но pf, не забравяйте, че вътре е bsd.

        1.    KZKG ^ Гаара каза той

          О, така, лошо!

  2.   Никола каза той

    Благодаря ви много за съвет 🙂

    Имам няколко съмнения:
    1 - Промяната постоянна ли е? или се губи при рестартиране на сървъра?
    2 - Имам няколко екземпляра (да речем A, B и C) в една и съща подмрежа. В пример A прилагам правилото за насочване на трафика към външен IP и при тестване с къдрици от екземпляри B и C всичко прави чудеса. Проблемът е, че от екземпляр А не работи. Опитах се да използвам както вашия ip, така и интерфейса за обратна връзка и нито едно от двете не работи:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –до местоназначение xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –до местоназначение 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 или нещо подобно, за да избегнете това.
      Не разбрах напълно какво искате да направите, пример А?

      1.    Никола каза той

        Имам сървър, който поддържа само връзки от определен ip (сървър A), не мога или искам да добавя още ips към белия списък (за проблеми с мащабируемостта), така че искам целият трафик към външния сървър да мине през споменатия сървър (А).
        От практическа гледна точка имам глобални конфигурации, които определят кой IP да се използва за всяка услуга, така че в този случай това е нещо като "всеки, който иска да използва външната услуга, трябва да използва IP A"
        Това беше постигнато успешно с помощта на метода в тази статия, но срещам проблема, че когато го прилага, сървър А не може да получи достъп до услугата, използвайки свой собствен ip (но всички други сървъри го правят).
        Досега най-доброто, което намерих, беше да добавя картографирането във файла / etc / hosts на сървър A, сочейки към външния ip, заменяйки глобалната настройка.

  3.   брайбо каза той

    Много добре, ако имам друг пощенски сървър, бих могъл да пренасоча трафика от порт 143 от server1 към server2 и имейлите ще стигнат до мен на server2, нали?

    поздрави

    1.    KZKG ^ Гаара каза той

      На теория да, работи така. Разбира се, трябва да имате правилно инсталиран пощенски сървър на server2 🙂

  4.   MSX каза той

    Видовете публикации, които обичаме да четем, благодаря!

  5.   Абрахам Ибара каза той

    Отлична статия, имам проект, в който работя и исках да ви задам въпрос, има индустриални суичове с функция NAT (предполагам, че те използват IPTables по-долу), за превод на IP адрес, без да се правят промени в оборудването, например имам сървър 10.10.2.1, който комуникира с компютри 10.10.2.X и чрез превключвателя е програмиран така, че компютър, който има адрес 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, а също и през прокси (използвам Squid, чийто порт по подразбиране е 3128), и не мога да намеря ключа в конфигурацията IPTABLES.
    Нямам нужда от никакво ограничение, само че записът остава в дневника на посетените уеб адреси.

    Надявам се, че можете да ми помогнете, тъй като това е доста тромава задача, която ме тревожи от няколко дни.

    Благодаря.

  8.   Gabriel каза той

    Приятелю, аз съм много нов за други сървъри, нямам представа, но разбирам темата и се уча бързо, въпросът ми е следният Имам 2 сървъра serv_1 и serv_2, които съм свързал към същия интранет, в тези сървъри имам създаден собствен облак, бих искал да направя следното:

    че определен диапазон от ips например rangeip_1 при поставяне на ip за достъп до собствения облак (ipowncloud) е насочен към serv_1 и ако е друг rangeip_2, същият ipowncloud е насочен към serv_2, това, за да се намират 2-те сървъра в два различни града и диапазоните на ip са различни, но всички те са в една и съща мрежа, това би било първата част, втората ще бъде ясно е да се синхронизират тези 2 сървъра, така че да са огледални или да ми посъветват това, за да за да оптимизирате широчината на лентата, моля, ако ще ми обясните как да го направя стъпка по стъпка, а не режим на супер програмист = (

  9.   Антонио Каризоса каза той

    Здравейте, извинете, имам превключвател, отговарящ за комуникацията на всички устройства, които изграждат моята мрежа, и след това защитна стена и накрая изходът от Интернет, това, което се случва, е, че бих искал пренасочването да бъде дадено в превключвателя и не трябва да достига до защитната стена, освен ако заявената услуга не е интернет.

  10.   Джон каза той

    Използвайки този метод, бихте ли могли да пренасочите HTTPS към HTTP?

  11.   мати каза той

    Здравейте, може би е малко късно, но исках да ви попитам как да накарам калмари да не променят IP на клиента, когато искам да се свържа с уеб сървър в същата мрежа?

  12.   Лафат32 каза той

    Не се отнасяйте лошо с мен, че питате. Може ли това да се направи в Windows?

  13.   лястовица каза той

    Тази информация ми беше полезна. Както винаги, на вас може да се вярва, когато не мога да намеря нещо на английски, обикновено в крайна сметка търся на испански, в тези случаи почти винаги идвам на този сайт. Благодаря.

  14.   Seba каза той

    Имам 4G рутер, който е клиент на мрежа, която не управлявам (очевидно съм клиент)… този рутер е шлюз към тази отдалечена мрежа чрез OpenVPN. В допълнение, споменатият рутер изпълнява функцията на препращане на порт за достъп до порт 80 на сървъра на една от тези подмрежи в полето.

    Това беше декларацията, която трябваше да поставя в рутера като персонализирано правило на защитната стена „-t nat -A POSTROUTING -j MASQUERADE“

    Благодаря за помощта!