Перенаправляйте трафік з одного 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-адреси клієнта, на випадок, якщо вони хочуть виконати запити, тобто 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, ви можете застосувати те, що вже відомо, щоб сервер робив саме те, що ви хочете, щоб він робив 😉

Привіт!

Виділений_підзображення_сервера


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  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) в одній підмережі. Наприклад, я застосовую правило для перенаправлення трафіку на зовнішню 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) Не вдалося підключитися до порту localhost 8080: Підключення відмовлено

    Будь-яка ідея, в чому проблема?

    1.    KZKG ^ Гаара - сказав він

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

      1.    Нікола - сказав він

        У мене є сервер, який підтримує лише з'єднання з певного ip (сервера A), я не можу або хочу додати більше ips до білого списку (для проблем із масштабованістю), тому я хочу, щоб весь трафік на зовнішній сервер проходив через зазначений сервер (A).
        З практичної точки зору, у мене є глобальні конфігурації, які визначають, який IP використовувати для кожної служби, тож у цьому випадку це щось на кшталт "кожен, хто хоче користуватися зовнішньою службою, повинен використовувати IP A"
        Цього вдалося досягти успішно, використовуючи метод у цій статті, але я стикаюся з проблемою, що при його застосуванні сервер A не може отримати доступ до служби за допомогою власного ip (але це роблять усі інші сервери).
        Поки що найкраще, що я знайшов, було додати зіставлення у файлі сервера / etc / hosts, вказуючи на зовнішній ip, перезаписавши глобальні налаштування.

  3.   брайбо - сказав він

    Дуже добре, якщо у мене є інший поштовий сервер, я міг би перенаправляти трафік з порту 143 з сервера1 на сервер2, і електронні листи надходитимуть на сервер2, так?

    привіт

    1.    KZKG ^ Гаара - сказав він

      Теоретично так, це працює так. Звичайно, на сервері2 🙂 потрібно мати належним чином встановлений поштовий сервер

  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.   Габріель - сказав він

    Друже, я дуже новачок в інших серверах, я поняття не маю, але я розумію тему і швидко вчусь, моє питання полягає в наступному. У мене є 2 сервери serv_1 і serv_2, які я підключив до тієї самої інтрамережі, на цих серверах у мене створена власна хмара Я хотів би зробити наступне:

    що певний діапазон ips, наприклад rangeip_1 при розміщенні ip доступу до власного хмари (ipowncloud), спрямований до serv_1, а якщо це інший діапазон ip_2, розміщений той самий ipowncloud, спрямований на serv_2, це для того, щоб 2 сервери знаходились у двох різних містах і діапазони ip різні, але всі вони знаходяться в одній мережі, це буде перша частина, друга буде зрозумілою - синхронізувати ці 2 сервери так, щоб вони були дзеркалами, або щоб вони порадили мені це, щоб оптимізувати ширину band, будь ласка, якщо ви збираєтеся пояснити мені, як це робити поетапно, а не в режимі супер програміста = (

  9.   Антоніо Каррізоса - сказав він

    Привіт, вибачте, у мене є комутатор, відповідальний за зв’язок усіх пристроїв, що складають мою мережу, і після цього брандмауер і, нарешті, вихід з Інтернету, відбувається те, що я хотів би, щоб переспрямування було надано в перемикач і не повинен підключатися до брандмауера, якщо запитувана послуга не є Інтернетом.

  10.   Джон - сказав він

    За допомогою цього методу ви можете перенаправити HTTPS на HTTP?

  11.   mati - сказав він

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

  12.   Лафат32 - сказав він

    Не поводьтеся зі мною погано, що питаєте. Чи можна це зробити в Windows?

  13.   Мартін - сказав він

    Ця інформація була для мене корисною. Як завжди, вам, хлопці, можна довіряти, коли я не можу щось знайти англійською мовою, я в кінцевому підсумку шукаю іспанською, і тоді я майже завжди відвідую цей сайт.

  14.   Seba - сказав він

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

    Це була декларація, яку я мав додати до маршрутизатора як спеціальне правило брандмауера «-t nat -A POSTROUTING -j MASQUERADE»

    Дякую за допомогу!