Простая переадресация портов

19

У меня проблемы с настройкой обратного прокси-сервера и второго сервера. Моя идея состояла в том, чтобы заставить брандмауэр пересылать https на обратный прокси-сервер и порт 29418 (gerrit ssh) на второй сервер. Теперь мой сотрудник IT говорит: НЕ МОЖЕТ! Либо оба порта идут на сервер 1, либо оба порта идут на сервер 2.

Хорошо, в качестве обходного пути я попытался настроить переадресацию портов на обратном прокси-сервере порта 29418 -> server2: 29418

Детали:

  • IP-адрес сервера 1: 10.0.0.132 и 192.168.10.2 в Ubuntu 12.04.2 LTS
  • IP-адрес сервера 2: 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

Цепной ВХОД (политика ПРИНЯТЬ)
целевой целевой источник назначения

Цепной ВЫХОД (политика ПРИНЯТЬ)
целевой целевой источник назначения

Цепь РАЗМЕЩЕНИЯ (ПРИНЯТЬ ПОЛИТИКУ)
целевой целевой источник назначения
root @ dev: / root # cat / proc / sys / net / ipv4 / ip_forward
1
uncletall
источник

Ответы:

32

В случае, если кто-то ищет способ, который действительно работает. Хотя @HorsePunchKid прав в своем предложении, я нашел это пошаговое руководство, которое заполняет пропущенные шаги:

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

По сути:

Включить IP-пересылку:

sysctl net.ipv4.ip_forward=1

Добавьте правило переадресации (используйте nnnn: port):

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

Спросите IPtables на маскарад:

iptables -t nat -A POSTROUTING -j MASQUERADE

Вот и все! У меня это сработало в любом случае :)

Брендон Мьюир
источник
1
Это лучший ответ, который я нашел на эту тему.
Виктор Piousbox
Потерянное соединение из моего контейнера Docker после использования этого решения. Пришлось удалить правило. Правило работало, но потерял весь другой трафик. Я не рекомендую это.
Дьин
iptables -t nat -A POSTROUTING -j MASQUERADEО, ВАУ ... вот и все, спасибо! Потратил часы на поиск в сети и выяснение. Это так просто и работает.
креветочный фургон
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, рассмотрите возможность добавления вышеуказанной команды в качестве правила «после запуска» в / etc / network / interfaces.

HorsePunchKid
источник
Это именно то, что я сделал, но это не сработало. Я раскомментировал net.ipv4.ip_forward = 1 в /etc/sysctl.conf, но все еще получаю ошибки при подключении к 10.0.0.132:29418
uncletall
6

Если кто-то ищет временный метод, попробуйте следующее решение.

    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 для маршрутизации трафика на разные виртуальные машины, поскольку я не мог заставить его работать в Ubuntu.

uncletall
источник