LINUX.ORG.RU
ФорумAdmin

VMware в атипичной среде


1

2

Добрый день! Есть Linux-сервер с Fedora, у которой есть реальный ip и все с ней хорошо. На ней установлен VMware Server 2. Под ней гостевая Win2003 с доступом по RDP. Гостевая коннектится к vmnet8, инет видит через nat. В nat прописана трансляция адресов на эту машину, порт 3389. Все видно, можно коннектиться к гостевой по RDP.

Возникла такая задача. Провом нам выделено 8 ip. Нужно, чтобы на гостевую машину можно было заходить не через ip linux, а по дополнительному ip. Настроил alias на карте, попробовал сделать проброс порта в iptables. Нифига не работает.

Вопрос - как это вообще делается? Это настраивается в VM или в iptables?

Вот что создаю в iptables (признаю, знаю слабо, срисовал с некоего источника):

$IPT -t nat -A PREROUTING -p tcp -d $Ext_IP2 --dport 3389 -j DNAT --to-destination 192.168.100.100:3389

$IPT -A FORWARD -i eth0 -d 192.168.100.100 -p tcp --dport 3389 -j ACCEPT

Ответ на: комментарий от Slavaz

Через Bridge я пытался с самого начала. Однако, насколько я понял, он не отрабатывает эту ситуацию. Если я в VMvare ставлю интерфейс как бридж, я отлично начинаю видеть с гостевого родительскую машину, но нифига не вижу шлюз в той же сети. Кроме того, чтобы к гостевой можно было бы подключиться, в linux должен появляться внешний ip - он не появляется. Slavaz, Вы всерьез знаете, как это сделать через бридж, или это из общих соображений - читай мануалы?

Yarilo ()

1. Поднять алиас на хосте

2. Переключить виртуальную машину на host-only networking (например с подсетью 192.168.15.0/24) и выдать хосту адрес 192.168.15.1 и виртуальной Windows 192.168.15.2

3. Настроить iptables:
iptables -A PREROUTING -i eth1 -d <real.ip.from.alias> -j DNAT --to-destination 192.168.15.2
iptables -A POSTROUTING -o eth1 -s 192.168.15.2 -j SNAT --to-source <real.ip.from.alias>

Nastishka ★★★★★ ()
Ответ на: комментарий от Yarilo

> Slavaz, Вы всерьез знаете, как это сделать через бридж, или это из общих соображений - читай мануалы?

Всерьёз знаю.

Bridge - это виртуальный сетевой свитч. Все интерфейсы, «воткнутые» в bridge, должны видеть сети и хосты за ними (по аналогии с реальной железкой-свичем).


Если я в VMvare ставлю интерфейс как бридж, я отлично начинаю видеть с гостевого родительскую машину, но нифига не вижу шлюз в той же сети.


Персонально мосты с Vmware не доводилось возиться, делал мосты с libvirtd+qemu+kvm и с VirtualBox. Виртуальная машинка становилась частью реальной сети, поэтому озвученная Вами проблема немного непонятна для меня...

Через Bridge я пытался с самого начала. Однако, насколько я понял, он не отрабатывает эту ситуацию.


Если немного расскажете, как настраивали, то подможем найти ошибку в процессе и у Вас будет нормальный bridge.

Кроме того, чтобы к гостевой можно было бы подключиться, в linux должен появляться внешний ip - он не появляется


На интерфейсе хост-машины должен появляться адрес, который хотим нахначить вирт.машине? Нет, не должен. bridge прокидывает ARP-запросы из физической сети в виртуальную. А если на виртуальном интерфейсе будет вполне вменяемый MAC-адрес, то виртуальная машина станет участницей физической сети.

Подготовка хост-машины: интерфейс хост-машины вводится в bridge и с него убираются IP-адреса, потом новому мосту назначается адрес, который ранее был на сетевом интерфейсе.

Подготовка виртуальной машины: в Vmware должен быть выбор типа имитации сетевого соединения: хост-хост, NAT или Bridge. просто выбирайте bridge, потом укажите то название моста, в который ранее ввели физический сетевой интерфейс (vmbridge0 ? или как там...). В виртуальной машине назначьте на сетевуху второй реальный IP-адрес.

После всего этого виртуальная машина должна «увидеть» шлюз, как и шлюз должен «видеть» виртуальную машину.


Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz

Спасибо за развернутый ответ! Однако, не вполне все понял.

Настраивал, казалось бы, просто. В цифрах. Сейчас хостовая имеет x.x.x.121, шлюз x.x.x.1, маска 255.255.255.0. У меня интерфейс eth0 bridged на vmnet0. Это при установке сделалось само. В виртуалке в свойствах железа ставлю briged, в гостевой - реальный ip x.x.x.122.

Вижу и отлично пингую из гостевой хостовую. Но гостевая не видит шлюз х.х.х.1 и, соответственно, интернет.

«Подготовка хост-машины: интерфейс хост-машины вводится в bridge и с него убираются IP-адреса, потом новому мосту назначается адрес, который ранее был на сетевом интерфейсе» Вот это, увы, не понял. У меня машина на коллокейшн, я там особо ip не поубираю. Да и не очень я понимаю, чем назначать ip интерфейсам. У меня из инструментария лишь веб-консоль VMware Server. Может, я чего-то не имею из того, чем можно конфигурить под linux?

Есть один момент, который, кажется, не учитывается. Все отлично будет работать, если гостевая машина у меня находится «за хостовой», то есть хостовая является роутером для гостевой. Однако у меня ситуация другая - гостевая должна стать «рядом» с хостовой, и роутер у них один, и он не хостовая. Все рецепты, что видел, и мануалы - они как раз про первый случай. Как быть?

Yarilo ()
Ответ на: комментарий от Nastishka

Nastishka, спасибо! Однако получаю незамысловатый ответ:

iptables: No chain/target/match by that name

Я слабо знаю iptables, поэтому понять причину ошибки не могу. Увы.

Yarilo ()
Ответ на: комментарий от Yarilo

Лично я делал вот как и работало великолепно с NAT:
Создал алиас для сети виртуальной машины(скажем 192.168.0.1) на интерфейсе скажем eth0 на котором есть внешний сетевой адрес.
Настроил vmware на использование бриджа с алиасом. Прямо то есть бриджуешь алиас с сетью vmware.
В виртуалке настроил адрес 192.168.0.2, default gw 192.168.0.1 соответственно.
Все, теперь у меня ходит любой NAT(DNAT).

q4x2 ()
Ответ на: комментарий от Slavaz

«Нет, не должен. bridge прокидывает ARP-запросы из физической сети в виртуальную. »

А как он передает данные? ARP нам может распознать ip из мас, но данные-то передадутся только по ip? Или я что-то путаю?

Yarilo ()
Ответ на: комментарий от q4x2

А ну и забыл добавить очевидное - теперь со всех алиасов eth0(там я как понял будут еще внешние адреса) можно правилами DNAT на виртуалку на любой порт.

q4x2 ()
Ответ на: комментарий от Yarilo

У меня была проблема - не видел пакеты в какой-то цепочке если не через алиас бридживать, догадался через алиас как default gw гонять и естественно все пакеты во всех цепочках появились от виртуалки, зато никакой бридж утился нах не нужен.

q4x2 ()
Ответ на: комментарий от Yarilo

> понять причину ошибки не могу.

Добавьте -t nat в параметры iptables к тем, которые я выше написала.

P.S.: вместо eth1 подставьте тот интерфейс, который у вас смотрит на интернет и на который вы повесили алиас.

Nastishka ★★★★★ ()
Ответ на: комментарий от q4x2

> Настроил vmware на использование бриджа с алиасом. Прямо то есть бриджуешь алиас с сетью vmware. В виртуалке настроил адрес 192.168.0.2, default gw 192.168.0.1 соответственно.

Вот и объясните теперь - зачем вам bridge если вы только что пришли фактически пришли к host-only, который я выше описала? Чтобы интерфейс в promisc перевести? :-)

Nastishka ★★★★★ ()
Ответ на: комментарий от Nastishka

Кстати а чем обусловлен выбор в пользу host-only и почему вас не удивило то что гостевая машина ТС «не видит» роутер при использовании bridge подключения?

n1 ()
Ответ на: комментарий от Nastishka

Честно говоря уже не помню с какого я стал именно бридж нетворкинг использовать, но не просто так это точно, просто описал как у меня работало по памяти, с хост онли будет работать точно так же.

q4x2 ()
Ответ на: комментарий от Nastishka

Nastishka, большое спасибо!

Правда, терминал в вашем случае не заработал: $IPT -t nat -A PREROUTING -p tcp --dst х.х.х.122 -j DNAT --to-destination 10.0.0.2 $IPT -t nat -I POSTROUTING -p tcp --source 10.0.0.2 -j SNAT --to х.х.х.122 Законнектиться не удается.

Заработало в таком варианте: $IPT -t nat -A PREROUTING -p tcp --dst х.х.х.122 -j DNAT --to-destination 10.0.0.2 $IPT -A FORWARD -d 10.0.0.2 -p tcp --dport 3389 -j ACCEPT

Внутренний интерфейс у меня 10.0.0.2.

В вашем варианте вторая строка обеспечивает nat из гостевой машины?

Yarilo ()
Ответ на: комментарий от Yarilo

>И еще вопрос. Средствами iptables в принципе можно сделать NAT изнутри гостевой машины наружу, если гостевая HostOnly?
Не совсем понял вопрос, если речь идет о том чтобы транслировать гостевые соединения с наружным миром в адреса хостовой машины(внешние), то конечно можно.
iptables -t nat -I POSTROUTING -s $guest_ip -d! $local_network -j SNAT --to-source $wan_ip

q4x2 ()
Ответ на: комментарий от Yarilo

Чтобы заработал DNAT в хост онли:
iptables -t nat -I PREROUTING -p tcp --dport 3389 -d $wan_ip -j DNAT --to-destenation $guest_ip
Это при условии что нет правил запрещающих транзит пакетов.

q4x2 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.