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

Привіт!

DedicatedServer_SubImage


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

19 коментарі, залиште свій

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

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

*

*

  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.   Мартін - сказав він

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