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

OpenVZ: доступ к физическому серверу или доступ к виртуальным серверам

Я просто играю с OpenVZ и раньше не имел опыта виртуализации. Итак, у меня есть следующие проблемы с пониманием этой виртуальной инфраструктуры:

У меня есть физический сервер Linux с IP-адресом (например, 1.2.3.4), и у меня есть 2 экземпляра виртуальных серверов, работающих в OpenVZ. Я хочу подключиться к обоим виртуальным серверам через ssh. Итак, какой IP-адрес мне тогда использовать?

Нужно ли мне всего 3 IP-адреса?

или как openVZ решить, какой экземпляр взять?

Каждой виртуальной машине OpenVZ будет назначен собственный IP-адрес с запущенным демоном SSH, который прослушивает IP-адрес виртуальной машины. Когда вы хотите подключиться к хосту по SSH, вы используете IP-адрес хоста, а когда вы хотите подключиться по SSH к одному из гостей, вы используете IP-адрес гостя. (Когда я говорю «IP-адрес», вы также можете заменить «DNS-запись, которая относится к IP-адресу»).

В большинстве случаев (по крайней мере, на этом раннем этапе вашего обучения) вы можете думать о виртуальной машине как о реальной физической машине во всех отношениях, которые имеют значение, в том, что касается ее повседневного использования. основание.

Я вызывающе предлагаю изучить настройку DNAT на аппаратном узле.

Вот моя рабочая установка (с некоторыми запутанными вещами):

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# DHCP
-A INPUT -i vzpb -p udp -m udp --sport 67:68 --dport 67:68 -j ACCEPT
-A OUTPUT -o vzpb -p udp -m udp --sport 67:68 --dport 67:68 -j ACCEPT

# Allow ping to and from
-A INPUT   -p icmp --icmp-type 8 -j ACCEPT
-A INPUT   -p icmp --icmp-type 0 -j ACCEPT
-A OUTPUT  -p icmp --icmp-type 0 -j ACCEPT
-A OUTPUT  -p icmp --icmp-type 8 -j ACCEPT

# All new DROP
-A INPUT -m state --state NEW -j REJECT
-A OUTPUT -m state --state NEW -j REJECT

# All non-tcp DROP
-A INPUT ! -p tcp -j REJECT
-A OUTPUT ! -p tcp -j REJECT

# username xsmith = 1234 (XX State University)
#-A INPUT -m owner --uid-owner 1234 -j REJECT

COMMIT


*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# SNAT (to give Internet access for the local containers)
-A POSTROUTING -p tcp -o vzpb -j SNAT --to-source 1.2.3.4
# upd is needed for DNS
-A POSTROUTING -p udp -o vzpb -j SNAT --to-source 1.2.3.4



# DNAT SSH
-A PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 192.168.1.2
# SNAT --to-source NOT required


# DNAT Web
-A PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 192.168.1.3
-A POSTROUTING -p tcp -d 192.168.1.2 --dport 80 -j SNAT --to-source 192.168.1.1
# --to-source required


COMMIT
  • Общедоступный аппаратный узел: 1.2.3.4
  • Локальный аппаратный узел: 192.168.1.1
  • Локальный контейнер: 192.168.1.2
  • Вам, вероятно, потребуется удалить все «-o vzpb» и «-i vzpb», потому что у меня есть veth, и у вас, вероятно, есть venet по умолчанию (прочтите http://wiki.openvz.org/Differences_between_venet_and_veth)

Кроме того, поместите это в файл /etc/sysctl.conf своих аппаратных узлов и запустите sysctl -p:

### OpenVZ settings (2011-01-25)
# from http://wiki.openvz.org/VEs_and_HNs_in_different_subnets

# On Hardware Node we generally need packet
# forwarding enabled and proxy arp disabled

net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# TCP Explict Congestion Notification
net.ipv4.tcp_ecn = 0

# we do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Вариант 2

Чтобы стать еще более гибким и безопасным, рассмотрите возможность удаления всех общедоступных IP-адресов с аппаратного узла и помещения указанной выше конфигурации NAT в контейнер, предназначенный только для целей NAT. Этому контейнеру потребуется общедоступный IP-адрес (это может быть единственный общедоступный IP-адрес на этой машине).

Контейнеру NAT потребуется доступ на уровне MAC к общедоступному сетевому интерфейсу, поэтому вам нужно будет переключиться с VENET на VETH: http://wiki.openvz.org/Differences_between_venet_and_veth

ПРИМЕЧАНИЕ: veth может быть очень безопасным, если правильно настроить брандмауэр (мосты).

Чтобы сделать veth, вам придется много читать эту страницу: http://wiki.openvz.org/Veth