различные подсети на одном интерфейсе, используемые виртуальными машинами в сетевом интерфейсе

479
skydanc3r

У меня есть один физический сервер с одним сетевым интерфейсом. Переадресация IP включена и брандмауэр настроен правильно.

Мой провайдер назначил мне один основной IP-адрес и 4 отказоустойчивых IP-адреса из другой подсети. Проблема в том, что я не знаю, как настроить их так, чтобы не тратить ресурсы ipv4.

(IP-адреса в этом примере являются поддельными, и только для информативности и примера настройки, но они являются точной аналогией)

Главный сервер (хост): Основной IP: 100.0.98.116, шлюз 100.0.98.115, маска сети 255.255.255.252.

IP-адреса аварийного переключения: 50.76.102.200 50.76.102.201 50.76.102.202 50.76.102.203

Как я могу использовать их все на виртуальных машинах, используя мостовые сети (назначенные непосредственно для интерфейса хоста)? На данный момент я должен добавить 50.76.102.201 к основному интерфейсу основного сервера в качестве вторичного адреса с маской сети 255.255.255.252. В виртуальной машине я использую IP-адрес 50.76.102.202 с маской сети 255.255.255.252 и шлюзом 50.76.102.201. Но это позволяет мне использовать меньше адресов IPv4. Как можно было бы использовать их все и использовать шлюз 100.0.98.115?

0

2 ответа на вопрос

0
Carlos Mendioroz

Учитывая, что ваш провайдер предоставляет вам Ethernet, вы можете использовать все свои адреса, немного изменив настройки. Как вы можете это сделать, зависит от операционной системы на ваших виртуальных машинах. Ради этого поста я возьму linux.

Возвращаясь к основам, ethernet является многоточечным, и вы обычно можете напрямую связаться со всеми соседями подсети (адрес L3), обнаружив их MAC (адрес L2) с помощью ARP. То, что ваши виртуальные машины являются виртуальными, и виртуальный переход от реальной сети Ethernet не должен иметь значения, фактически вы можете перейти непосредственно от сетевой карты виртуальной машины к DG вашего провайдера, не проходя (логически, то есть L3) через ваш хост.

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

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

 ip address add 50.76.102.200/24 dev eth0 ip route add default dev eth0 

Очень простая (и хорошая) альтернатива - получить адрес DG у вашего поставщика услуг в этой подсети и использовать его для своих виртуальных машин. Скажите 50.76.102.1.

 ip address add 50.76.102.200/24 dev eth0 ip route add default via 50.76.102.1 dev eth0 

Но если нет, вы можете (по крайней мере, в Linux с использованием iproute2) использовать DG, который не находится в вашей подсети:

 ip address add 50.76.102.200/24 dev eth0 ip route add default via 100.0.98.115 dev eth0 onlink 

Я надеюсь, вы поняли идею.

0
skydanc3r

Мне не удалось решить эту проблему так, как я планировал. Единственный способ использовать Bridged network для vms - это поднять IP-адрес с .201 на хосте как псевдоним eth0: 0 с маской сети 255.255.255.252. И назначьте vm IP-адрес .202 с маской сети 255.255.255.252 и шлюзом .201 - это работает просто отлично. Однако слишком много IP-адресов используется таким образом, что можно использовать только 2 хоста.

Я добавил все ip-адреса .200-.203 в качестве псевдонимов eth0: 0 - eth0: 3 каждый с маской сети 255.255.255.255, чтобы их можно было использовать. И я создал виртуальный сетевой адаптер, предназначенный только для хоста для виртуальных машин, который имеет частную локальную сеть в диапазоне 192, и я использую SNAT / DNAT, чтобы привязать каждый виртуальный сервер за диапазоном 192 к общему IP-адресу.