Правильно ли проброс портов к виртуальной машине (Windows Server 2012) на CentOS?
Всем Привет!
В общем (не спрашивайте меня, к чему такое извращение) существует виртуалка Windows Server 2012R2 на CentOS6 , на удаленном сервере на одном выделенном хостером IP адресе, например 111.111.111.111 - на eth0
Виртуалка virbr0 на 192.168.122.1-192.168.122.254. DHCP в ней включен.
Айпи WindowsServer 192.168.122.253
Задача:
1. На WindowsServer будет веб-сервер, который в итоге должен работать на 111.111.111.111:80.
2. Пробросить порт для RDP (3389) подключения к Windows Server, чтобы извне подключаться к этому серверу, чтобы развернуть IIS веб-сервер.
3. Пробросить порт для FTP (21) для удаленного подключения веб-девелопера.
Я набросал первое решение, скажите как лучше на ваш взгляд.
1)
sudo iptables -t nat -A PREROUTING --dst 111.111.111.111 -p tcp --dport 80 -j DNAT --to-destination 192.168.122.253
sudo iptables -I FORWARD 1 -i eth0 -o virbr0 -d 192.168.122.253 -p tcp -m tcp --dport 80 -j ACCEPT
2)
sudo iptables -t nat -A PREROUTING --dst 111.111.111.111 -p tcp --dport 3389 -j DNAT --to-destination 192.168.122.253
sudo iptables -I FORWARD 1 -i eth0 -o virbr0 -d 192.168.122.253 -p tcp -m tcp --dport 3389 -j ACCEPT
3) для FTP наружний порт сделать какой-нибудь другой (не 21), например 8888
sudo iptables -t nat -A PREROUTING --dst 111.111.111.111 -p tcp --dport 8888 -j DNAT --to-destination 192.168.122.253
sudo iptables -I FORWARD 1 -i eth0 -o virbr0 -d 192.168.122.253 -p tcp -m tcp --dport 21 -j ACCEPT
Если есть другие способы решения, боле лаконичные или я неправильно написал, подскажите
инструменты имеются в виде: virt-manager, virsh.
Стоит qemu-kvm. libvirt
В общем кого тоже интересует этот вопрос.
Я сделал так:
-Сначала остановил виртуальную машину.
-Создал файл "qemu" (можете назвать по другому) в /etc/libvirt/hooks/ (папку hooks тоже сам создал)
-И написал в этом файле скрипт.
Скрипт такой:
-----------------------------------------------------
#!/bin/bash
# used some from advanced script to have multiple ports: use an equal number of guest and host ports
# Update the following variables to fit your setup
Guest_name=Имя виртуальной машины
Guest_ipaddr=IP-адрес виртуальной машины
Host_ipaddr=IP-адрес сервера (внешний, выданный хостером)
Host_port=( 'внешний порт1' 'внешний порт2' )
Guest_port=( 'порт виртуальной машины1' 'порт виртуальной машины2' )
length=$(( ${#Host_port[@]} - 1 ))
if [ "${1}" = "${Guest_name}" ]; then
if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
for i in `seq 0 $length`; do
iptables -t nat -D PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
done
fi
if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
for i in `seq 0 $length`; do
iptables -t nat -A PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
done
fi
fi
----------------------------------------------
- Потом сделал так:
chmod +x /etc/libvirt/hooks/qemu
- И сделал рестар libvirt
service libvirtd restart
И все заработало. Но на мой взгляд этот способ небезопасен.