Просте переадресація порту


21

У мене виникають проблеми, коли я намагаюся налаштувати зворотний проксі з другим сервером. Моя ідея полягала в тому, щоб змусити брандмауер переслати https на зворотний проксі і порт 29418 (gerrit ssh) на другий сервер. Тепер мій ІТ-хлопець співпрацює: "НЕ МОЖЕ! Або обидва порти переходять на сервер 1 або обидва порти переходять на сервер 2.

Гаразд, як обхід, я спробував налаштувати переадресацію порту на зворотному проксі-сервері порту 29418 -> server2: 29418

Деталі:

  • IP сервера1: 10.0.0.132 та 192.168.10.2 на Ubuntu 12.04.2 LTS
  • Сервер2 IP: 10.0.0.133 та 192.168.10.3 на Ubuntu 12.04.2 LTS

Тепер і https, і порт 29418 переходять від брандмауера до 10.0.0.132, ІТ каже, що це єдиний шлях. :(

Тож скажіть, будь ласка, як переслати з 10.0.0.132:29418 -> 192.168.10.3:29418 або 10.0.0.133:29418

Під час роботи над 10.0.0.132 я можу підключитися до обох 10.0.0.133:29418 та 192.168.10.3:29418, щоб порти були відкритими.

- Оновлення -

Мої iptables -t nat -L виглядає так:

root @ dev: / root # iptables -t nat -L
РЕГУЛЮВАННЯ ланцюга (прийняття політики)
цільове місце вибору джерела призначення
DNAT tcp - де-небудь dev.example.com tcp dpt: 29418 до: 10.0.0.133

Ланцюговий Вхід (політика ACCEPT)
цільове місце вибору джерела призначення

Ланцюговий вихід (політика ACCEPT)
цільове місце вибору джерела призначення

РЕГУЛЮВАННЯ ланцюга (прийняття політики)
цільове місце вибору джерела призначення
root @ dev: / root # cat / proc / sys / net / ipv4 / ip_forward
1

Відповіді:


34

У випадку, якщо хтось інший шукає спосіб, який насправді працює. Хоча @HorsePunchKid має рацію у своїй пропозиції, я знайшов цей посібник, який заповнює пропущені кроки:

http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

По суті:

Увімкнути переадресацію IP-адреси:

sysctl net.ipv4.ip_forward=1

Додайте правило переадресації (використовуйте nnnn: порт):

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.132 --dport 29418 -j DNAT --to-destination 10.0.0.133:29418

Запитайте IPtables у Masquerade:

iptables -t nat -A POSTROUTING -j MASQUERADE

І це все! Це працювало для мене в будь-якому випадку :)


1
Це найкраща відповідь, яку я знайшов з цього приводу.
Віктор Піобокс

Після використання цього рішення втрачено з'єднання з мого контейнера Docker. Довелося видалити правило. Правило працювало, але втрачало весь інший рух. Я не рекомендую цього.
Дійн

iptables -t nat -A POSTROUTING -j MASQUERADEО О Я ... це все, дякую! Провели годин на пошуку в Інтернеті та з'ясуванні. Це так просто і працює.
shrimpwagon

Це прекрасно працює. Тепер, як зробити ці правила постійними?
vmalep

Проблема, яку я помітив, полягає в тому, що при активації переадресації порту маршрутизатор більше не може отримати доступ до підходящих серверів ... Будь-яка підказка?
vmalep

7

Якщо у вас встановлені iptables 10.0.0.132, я думаю, що це буде досить просто:

iptables -t nat -A PREROUTING -j DNAT -d 10.0.0.132 -p tcp --dport 29418 --to 10.0.0.133

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

Якщо ви хочете, щоб це правило запустилося автоматично при запуску 10.0.0.132, розгляньте додавання вищевказаної команди як правило "post-up" в / etc / network / interfaces.


Саме це я і зробив, але це не спрацювало. Я прокоментував net.ipv4.ip_forward = 1 в /etc/sysctl.conf, але я все одно отримую помилки під час підключення до 10.0.0.132:29418
uncletall

7

Якщо хтось шукає тимчасовий метод, спробуйте рішення нижче.

    ssh -L 192.168.0.10:8080:10.0.0.10:80 root@10.0.0.10

Вищевказана команда перенаправляє всі підключення до порту 8080 на вашій базовій машині на 80 порт вашої віртуальної машини. Ви можете перевірити роботу, перейшовши на веб-сторінку http://192.168.0.10:8080 , і вона покаже вам веб-сторінку на гостьовій машині.

Це стосується всіх портів :)


0

Врешті-решт мені довелося встановити pfSense як маршрутизатор всередині мого ESXi-сервера, щоб направити трафік на різні VM, оскільки я не міг змусити його працювати в Ubuntu.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.