У меня есть сервер под управлением Windows Server 2012 R2 с одной физической сетевой картой и несколькими виртуальными машинами Hyper-V. Хост имеет 3 внешних IP-адреса. Я настроил коммутатор Hyper-V на узле, назначил ему статический IP-адрес узла и также подключил виртуальную машину к этому коммутатору.
Я хотел бы иметь возможность настроить NAT на хосте, чтобы я мог назначить 2 из 3 внешних IP-адресов, чтобы их трафик отправлялся на коммутатор Hyper-V, и чтобы виртуальная машина, подключенная к этому коммутатору, получала этот трафик.
Внешние IP-адреса в этом сенарио:
ПРИМЕЧАНИЕ. Фактические назначенные IP-адреса не находятся в одной подсети. Они были приобретены в разное время как отдельные IP-адреса.
10.1.1.1 - это основной IP-адрес сервера. 10.1.2.1 и 10.1.3.1 - это дополнительные IP-адреса, которые я приобрел и назначил той же сетевой карте, что и 10.1.1.1.
IP-адрес на хосте, назначенный сетевой карте, подключенной к коммутатору Hyper-V:
На виртуальной машине IP-адрес, назначенный сетевой карте, подключенной к коммутатору Hyper-V:
Я знаком с такой настройкой в Linux, но никогда не делал этого в Windows. Обычно это достигается путем настройки виртуального адаптера eth0: 1 и присвоения ему IP-адреса 10.1.2.1. Затем примените следующие правила iptables:
-A FORWARD -i eth0:1 10.1.2.1 -m state --state NEW -j ACCEPT
-A PREROUTING --destination 10.1.2.1 -j DNAT --to-destination 192.168.1.1
-A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 10.1.2.1
Я следовал руководству Dell по настройке компьютера с Windows Server 2012 R2 в качестве маршрутизатора, которое можно найти здесь: http://www.dell.com/support/article/us/en/19/how10169/configuring-windows-server-2012-r2-as-a-router?lang=en
После настройки трафик на 10.1.2.1 действительно проходит через NAT и отправляется на 192.168.1.1, и моя виртуальная машина может видеть трафик. Большой! Проблема в том, что трафик с 10.1.3.1 не отправляется на 192.168.1.1.
Я ожидал чего-то в Windows, где можно было бы сказать: «Все, что приходит на IP x.x.x.x, используйте NAT и отправляйте на y.y.y.y. Все, что приходит на y.y.y.y, используйте SNAT и отправляйте на x.x.x.x».
Я прочитал техническую статью об использовании netsh для настройки маршрутизации и управления nat (https://technet.microsoft.com/en-us/library/cc754535(v=ws.10).aspx) - но пока я не нашел способа добавить в пул единственный внешний IP-адрес.
Я чувствую, что это должна быть простая задача, но мне не удалось ее настроить. Я хотел бы добавить дополнительный внешний IP-адрес к хосту и преобразовать их в коммутатор Hyper-V, но я застрял!
Как я могу настроить хост для выполнения NAT на выбранных внешних IP-адресах?
РЕДАКТИРОВАТЬ: ответ Appleoddity поднял проблему, которую я забыл поднять - эта машина находится в центре обработки данных, к которому у меня нет доступа, и поставщик не может добавлять дополнительные сетевые адаптеры. Я также не могу сделать переключатель Hyper-V внешним, поскольку, когда я попробовал это, хост был загружен из сети. После звонка провайдеру я узнал, что они не допускают такого поведения.
Я собираюсь рискнуть и сказать, что вы слишком много думаете об этом. Если вы намерены подключить свой физический хост и 2 виртуальных гостя к 1 из 3 общедоступных IP-адресов, доступных на одном физическом интерфейсе, NAT вам не нужен.
Просто создайте стандартный коммутатор Hyper-V с «внешним» доступом к физическому сетевому адаптеру.
Это создаст «Внешний» интерфейс на физическом хосте, и вы сможете добавить сетевой адаптер к каждому виртуальному хосту, который подключен к этому «Внешнему» коммутатору.
Теперь назначьте Public IP 1 «Внешнему» интерфейсу на физическом хосте. Назначьте общедоступный IP-адрес 2 интерфейсу виртуальной машины №1, а общедоступный IP-адрес 3 - интерфейсу виртуальной машины №2.
По сути, все машины соединены мостом, но поскольку они используют разные общедоступные IP-адреса, они будут отвечать только на эти IP-адреса. Чтобы представить себе это по-другому, представьте себе 3 отдельных физических машины, подключенных к модему / маршрутизатору вашего интернет-провайдера - каждая машина подключена к одному и тому же сетевому коммутатору, но каждому интерфейсу назначен свой публичный IP-адрес.
Когда вы покупаете общедоступные IP-адреса, они обычно входят в блоки. И поскольку в приведенном выше примере вы использовали «частные» IP-адреса, а не предоставляли истинные общедоступные IP-адреса и маску подсети, я не могу сказать, что каждый IP-адрес находится в одной и той же подсети, но это обычно так. Если это так, то это типичный способ всегда использовать свой блок общедоступных IP-адресов, потому что все они в любом случае находятся в одной «сети».
Кроме того, если вы продолжите путь NAT, вам также нужно будет начать перенаправление портов. Если нет NAT, очевидно, должен быть брандмауэр (программный или аппаратный) между машиной и Интернетом.