воскресенье, 25 ноября 2012 г.

Проброс портов в Windows

Ситуация проста. Имеем следующее. Виртуальную машину. Физическую машину на которой она крутиться. Если коротко то хост машина - Win7, гостевая - ubuntu-server 12.04., роутер. На роутере скорее всего для проброса портов будет пункт типа Virtual Servers. Там выбираем службу (или руками порты прописываем) IP машины на которую нам надо отправлять. Это сугубо индивидуально поэтому не могу ничего конкретно посоветовать. Смотрите документацию по своему роутеру. На тему "проброс портов".
Идем далее. На Убунте поднят апач, т.е. это 80 порт - это наша цель. Но роутер может обратиться только на наш физический IP адрес внутри локальной сети, на железную сетевую карту. Тут нам надо делать еще один проброс порта, того же 80го. Но только уже на нашем компьютере под управлением Win7 с железной карты, пускай у нее IP будет 192.168.1.101 на карту, которую добавит при установке, ваша виртуальная машина (у меня Virtual Box и карта которая соединяет виртуальные миры с физическими имеет адрес 192.168.56.1, ну шлюз, в смысле, соответственно машина с Апачем имеет IP равный 192.168.56.101). Итого, вкратце, надо пробросить 192.168.1.101:80 на 192.168.56.101:80 в операционной системе Windows 7 приступаем.
1. Запускаем консоль с правами администратора.
2. Запускаем netsh
и
netsh>interface
netsh interface>portproxy
netsh interface portproxy>add v4tov4 listenport=80 listenaddress=192.168.1.101 connectaddress=192.168.56.101 connectport=80
Проверяем все ли прошло гладко:
netsh interface portproxy>dump

#===========================
# Конфигурация портов прокси
#===========================
pushd interface portproxy

reset
add v4tov4 listenport=80 connectaddress=192.168.56.101 connectport=80


popd

# Конец конфигурации портов прокси
Да все нормально. Пробуем теперь обратиться локально по 192.168.1.101 и мы получим ответ от апача по адресу 192.168.56.101. Дальше пробуем уже по внешнему IP адресу, и вы должны получить тот же ответ что и от внутреннего адреса 192.168.56.101. Стоит уточнить, данный способ пробросит только TCP.

Если узрите неточности, прошу отметить в комментариях.