Назад | Перейти на главную страницу

Подключение к контейнеру OpenVZ, использующему NAT

Допустим, у меня недостаточно IP-адресов для выделения каждому контейнеру, как кто-то может подключить этот контейнер, если у него нет общедоступного адреса? (используя NAT для этого контейнера) адрес будет частным, верно? так как же к нему подключиться из внешней сети?

Мой подход следующий:

  • Запустите каждый контейнер с отдельным глобально маршрутизируемым IPv6-адресом.
  • Запустите обратный прокси-сервер на одном глобально маршрутизируемом IPv4-адресе. Прокси-сервер может использовать Host заголовок (в случае http) и SNI (в случае https) для проксирования каждого клиента на IPv6-адрес соответствующего контейнера.
  • Кроме того, шлюз между контейнерами и внешней сетью может предоставлять ретрансляторы Teredo и 6to4 для ваших контейнеров, так что в случае, если клиенты, использующие один из этих методов туннелирования, могут получить надежное соединение с вашими адресами IPv6.

Таким же образом устанавливаются соединения извне через любой NAT внутрь: через перенаправление портов.

Вы используете iptables для перенаправления одного или нескольких портов хоста на один или несколько портов гостя. Излишне говорить, что вы, вероятно, сможете назначить каждый порт хоста одному гостевому порту. Например, если у вас есть контейнер веб-сервера, вы захотите перенаправить порты 80 и 443. После этого никакие другие контейнеры не смогут использовать эти порты.

По этой причине, и если вам нужно предоставить несколько контейнеров веб-серверов, вы можете рассмотреть возможность запуска обратного прокси-сервера на хосте или в гостевой системе, который может проверять заголовки / URL-адреса хоста HTTP и прокси-соединения в соответствующем месте.