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

У меня небольшие проблемы, так как я пытаюсь настроить обратный прокси-сервер со вторым сервером. Моя идея состояла в том, чтобы заставить брандмауэр перенаправлять https на обратный прокси-сервер и порт 29418 (gerrit ssh) на второй сервер. Теперь мой знакомый айтишник говорит: НЕ МОГУ! Либо оба порта идут на сервер 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 -LChain (политика ACCEPT)целевая прибыль opt источник destinationDNAT tcp -- где угодно dev.example.com tcp dpt:29418 to:10.0.0.133 Ввод цепочки (политика ПРИНИМАЕТСЯ)целевая прибыль opt источник назначения Цепочка ВЫВОДА (политика ПРИНИМАЕТСЯ)целевая прибыль opt источник назначения цепочка POSTROUTING (политика ПРИНИМАЕТСЯ)целевая прибыль opt источник destinationroot@dev:/root# cat /proc/sys/net/ipv4/ip_forward1

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

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

По сути:

Включить переадресацию IP-адресов:

sysctl net.ipv4.ip_forward=1

Добавьте свое правило пересылки (используйте n.n.n.n:порт):

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

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

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

    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, и он покажет вам веб-страницу на гостевой машине.

Это относится ко всем портам :)

Если у вас установлены 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.

В конце концов мне пришлось установить pfSense в качестве маршрутизатора внутри моего сервера ESXi для маршрутизации трафика на разные виртуальные машины, поскольку я не мог заставить его работать в Ubuntu.

Я нахожу this статья полезная. Основная проблема, связанная с включением ipforward в Linux, описана в разделе “Настройка брандмауэра для переадресации порта 80”.