Моя основная ситуация - это выделенный сервер под управлением CentOS 5.4. На данный момент у меня есть одна виртуальная машина под управлением Ubuntu 9.0.4. Позже я захочу добавить еще одну виртуальную машину под управлением Windows Server 2003, но в данный момент я сосредоточен на том, чтобы запустить Ubuntu.
Установка Ubuntu работает нормально, но я серьезно изо всех сил пытаюсь заставить работать переадресацию портов, чтобы я мог получать доступ к веб-сайтам, которые будут размещены на виртуальной машине Ubuntu. Как новичок в Linux, меня смущает связь между IPTables и собственной переадресацией портов VMWare.
Вот что я пробовал до сих пор.
IP моего сервера - xxx.xxx.xxx.xxx, и служба поддержки провайдера сообщила мне, что маска подсети - 255.255.255.0, адрес шлюза - xxx.xxx.xxx.1, а сетевой адрес - xxx.xxx.xxx. .0. (Последние два меня немного удивили, я ожидал, что шлюз / сетевой адрес будет частным, а не общедоступным.)
Прежде всего я попробовал мостовую сеть, но безуспешно общался с машиной, кроме как через консоль VMware. Я пробовал пинговать его с хоста (используя ssh в хост), но без радости; также нет доступа к инернету с ВМ. Я изменил конфигурацию интерфейсов с DHCP на статический, используя статический адрес 192.168.1.100 и установив шлюз на xxx.xxx.xxx.1 в соответствии с рекомендациями поставщика. Никакой реальной разницы, по-прежнему не может пинговать гостя с хоста или наоборот, и нет доступа в Интернет от гостя.
Потом попробовал NAT. Хост автоматически устанавливает IP-адрес на 192.168.132.128 со шлюзом 192.168.132.2. Теперь у гостя есть доступ в Интернет, и когда я выполняю VNC для хоста и открываю Firefox с 192.168.132.128, я вижу размещенный веб-сайт в порядке, но я до сих пор не может попасть в него извне.
Я упомянул, что меня немного смущает IPtables и переадресация портов VMware, я имел в виду, что я не уверен, следует ли устанавливать переадресацию IPtable на IP-адрес гостевого интерфейса (192.168.132.128 в данном случае) или адрес шлюза 192.168.132.2.
У меня такое чувство, что мне здесь не хватает чего-то очень простого, может кто-нибудь сказать мне, что это такое?
Вот магическое заклинание, которое мне нужно для моего хозяина centos. Короче говоря, для достижения двух целей необходимо добавить новые правила iptables. Один из них - переадресация порта 80 и, возможно, порта 443 от виртуальной машины к хосту. Два - разрешить переключение между общедоступными и частными подсетями. Если vmware обрабатывает все и автоматически добавляет правила, вы должны найти правила или их функциональные эквиваленты уже в списке правил, полученном с помощью "iptables -nvL". Если нет, вы должны добавить их.
ПРИНИМАЮЩАЯ СТОРОНА ...
#In my case,
IF_ETH_0=eth0
IF_TUN_0=vbr0
IP_PRIVATE_WEB=192.168.132.xxx
IP_PUBLIC_0=192.168.1.yyy
#The interface for the VM is vnet0. vbr0 bridges eth0 and vnet0.
#Using vnet0, instead or vbr0, for IF_TUN_0 will not work.
# port forwarding
/sbin/iptables -t nat --flush
/sbin/iptables -t nat -A PREROUTING -p tcp -i $IF_ETH_0 -j DNAT -d $IP_PUBLIC_0 --dport 80 --to $IP_PRIVATE_WEB:80
/sbin/iptables -t nat -A POSTROUTING -p tcp -o $IF_ETH_0 -j SNAT -s $IP_PRIVATE_WEB --to-source $IP_PUBLIC_0
# the private internal VM address and public-facing host address are on different subnets
# add rules to allow travel between subnets
/sbin/iptables -A FORWARD -i $IF_TUN_0 -o $IF_ETH_0 -j ACCEPT
/sbin/iptables -A FORWARD -i $IF_ETH_0 -o $IF_TUN_0 -j ACCEPT
СТОРОНА ВМ ...
# open up ports 40 and 443
/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport 40 -m state --state NEW
/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport 443 -m state --state NEW
# allow established traffic to pass
/sbin/iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
Вам вообще не нужно делать переадресацию портов с помощью iptables. Механизм переадресации портов Vmware должен позаботиться об этом за вас. Посмотрите руководство по серверу vmware в разделе Advanced NAT Configuration -> host section -> incomingtcp section, чтобы настроить сопоставление портов.
Возможно, вам потребуется открыть порт 80 на хосте и гостевом компьютере с помощью iptables, если они еще не открыты, но вам не нужны какие-либо правила пересылки.