Перенаправить трафик с одного IP-адреса и порта на другой IP-адрес и порт

При управлении серверами очень часто встречается перенаправление трафика.

Предположим, у нас есть сервер с запущенными определенными службами, но по какой-либо причине мы меняем одну из этих служб (Я не знаю, например pop3, который является портом 110) на другой сервер. Обычным и наиболее частым делом было бы просто изменить IP-адрес в записи DNS, однако, если кто-то использовал IP-адрес вместо поддомена, это повлияет на это.

Что делать? ... просто перенаправьте трафик, который сервер получает через этот порт, на другой сервер с тем же портом.

сервер-узел-LAN-Ethernet

Как начать перенаправлять трафик?

Во-первых, мы должны включить пересылка на сервере, для этого поставим следующее:

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

Все команды, показанные в этом руководстве, должны выполняться с правами администратора, я рекомендую выполнять их напрямую от имени пользователя root.

Вы также можете использовать эту другую команду, если предыдущая не работает для вас (со мной это случилось на 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-адреса клиента, если они хотят проплыть запросы, то есть, что 2-й сервер видит, что запросы поступают с IP-адресом 1-го сервера (и в который мы применяем перенаправление), также можно было бы поместить эту вторую строку:

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.    КЗКГ ^ Гаара сказал

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

      1.    Данхантер сказал

        Если быть точным, pfsense использует не iptables, а pf, помните, что это bsd внутри.

        1.    КЗКГ ^ Гаара сказал

          Ах да, моя беда!

  2.   никола сказал

    Большое спасибо за подсказку 🙂

    У меня есть пара сомнений:
    1 - Изменение является постоянным? или он теряется при перезапуске сервера?
    2 - У меня несколько экземпляров (скажем, A, B и C) в одной подсети. В случае A я применяю правило для маршрутизации трафика на внешний IP-адрес и пытаюсь использовать локоны из экземпляров B и C, все творит чудеса. Проблема в том, что из экземпляра А он не работает. Я пробовал использовать как ваш 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-гггг: 8080 / hello_world
    curl: (7) Не удалось подключиться к порту ip-yyyy 8080: соединение отклонено
    $ curl локальный: 8080 / hello_world
    curl: (7) Не удалось подключиться к порту localhost 8080: соединение отклонено

    Есть идеи, в чем может быть проблема?

    1.    КЗКГ ^ Гаара сказал

      Да, изменение теряется при перезагрузке, вам придется использовать iptables-save & iptables-restore или что-то в этом роде, чтобы избежать этого.
      Я не совсем понял, что вы хотите сделать, пример А?

      1.    никола сказал

        У меня есть сервер, который поддерживает соединения только с определенного IP-адреса (сервер A), я не могу или хочу добавить больше IP-адресов в белый список (для проблем с масштабируемостью), поэтому я хочу, чтобы весь трафик на внешний сервер проходил через сказал сервер (A).
        Для практичности у меня есть глобальные конфигурации, которые определяют, какой IP-адрес использовать для каждой службы, поэтому в данном случае это что-то вроде «каждый, кто хочет использовать внешнюю службу, должен использовать IP A».
        Я успешно добился этого с помощью метода, описанного в этой статье, но столкнулся с проблемой, заключающейся в том, что при его применении сервер A не может получить доступ к службе, используя свой собственный IP-адрес (но все остальные серверы это делают).
        Пока что лучшее, что я нашел, - это добавить сопоставление в файл / etc / hosts сервера A, указывающее на внешний IP-адрес, переопределив глобальные настройки.

  3.   Braybaut сказал

    Очень хорошо, если бы у меня был другой почтовый сервер, я мог бы перенаправлять трафик с порта 143 с server1 на server2, и электронные письма доходили до server2, верно?

    привет

    1.    КЗКГ ^ Гаара сказал

      Теоретически да, так работает. Конечно, у вас должен быть правильно установлен почтовый сервер на 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 с двумя сетевыми картами:
    eth0 = 192.168.1.1 подключен к остальной части локальной сети.
    eth1 = 192.168.2.2 подключен к роутеру.
    Мне нужно, чтобы все, что проходит через eth0, проходило через eth1, а также через прокси (я использую Squid, порт по умолчанию - 3128), и я не могу найти ключ в конфигурации IPTABLES.
    Мне не нужны никакие ограничения, только запись остается в журнале посещенных веб-адресов.

    Я надеюсь, что вы можете мне помочь, так как это довольно громоздкая задача, которая беспокоила меня уже несколько дней.

    Спасибо.

  8.   Габриель сказал

    Друг, я новичок в других серверах, я понятия не имею, но я понимаю предмет и быстро учусь, мой вопрос заключается в следующем. У меня есть 2 сервера serv_1 и serv_2, которые я подключил к той же интрасети, на этих серверах у меня настроено owncloud, Я бы хотел сделать следующее:

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

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

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

  10.   Джон сказал

    Могли бы вы перенаправить HTTPS на HTTP с помощью этого метода?

  11.   Мати сказал

    Привет, может быть, уже немного поздно, но я хотел спросить вас, как мне заставить squid не изменять IP-адрес клиента, когда я хочу подключиться к веб-серверу в той же сети?

  12.   Лафат32 сказал

    Не обращайся со мной плохо за то, что я спросил. Можно ли это сделать в Windows?

  13.   Мартин сказал

    Эта информация была мне полезна. Как всегда, вам, ребята, можно доверять, когда я не могу найти что-то на английском, я обычно ищу на испанском, в таких случаях я почти всегда захожу на этот сайт. Спасибо.

  14.   Seba сказал

    У меня есть маршрутизатор 4G, который является клиентом сети, которой я не управляю (очевидно, я клиент)… этот маршрутизатор является шлюзом в эту удаленную сеть через OpenVPN. Кроме того, указанный маршрутизатор выполняет функцию переадресации портов на порт доступа 80 сервера одной из этих подсетей в полевых условиях.

    Это было объявление, которое я должен был поместить в маршрутизатор в качестве пользовательского правила брандмауэра «-t nat -A POSTROUTING -j MASQUERADE».

    Спасибо за помощь!