[ VMware и интернет ]
Немного предыстории.
Довелось мне как-то в институте изучать Linux. Я накупил книг,
дисков - типа больше всех надо:) Но далеко дело не пошло - других
дел было много. Предмет закончился и энтузиазм вместе с ним... На
компе стоял Linux, напоминая о себе на начальном этапе загрузки LILO.
Шло время, изредка я перемещал курсор на загрузку Linux. После
различных переустановок винды LILO надоело восстанавливать, да и
"болтание" между системами требовало перезагрузки. А как хотелось
чтобы было всё и сразу! Мечта студента:) Однажды мне упомянули о
виртульных машинах, и это отложилось в моей памяти. Выбрав время я
профильтровал тему и нашёл VMware. Начались проверки - что на ней
будет работать, скока это всё будет жрать ресурсов и т.д. и т.п.
Набаловавшись грубыми экспериментами и переустановив различные
операционные системы я постепенно осел в FreeBSD. Почему FreeBSD?
Просто по работе пришлось с ней однажды столкнуться и она мне чем-то
запала в душу. Началось освоение интересующей операционной сисетмы
(ОС). Немного освоившись понял что надо бы её подключить к инету
(тем более это СЕТЕВАЯ операционная система!). Но как сделать это
лучше? В сети нашёл лишь одну маленькую статью. Пробежав по ней
беглым взгядом решил не забивать ей голову, а найти и опробовать
свои решения.
В инет...
Речь пойдёт об использовании для подключения к интернету стандартного
модема и GPRS на мобиле. Вы конечно возмутитесь/удивитесь: а как же
сетевое подключение через кабель или ADSL модем? Всё просто - для меня
траффик дешевле по dial-up, чем по выделенке. Правда чуть было не
подключился по ADSL, но по причине некомпетентности технического
персонала УралСвязьИнформ я пролетел с подключением. И решил забить на
их контору, тем более внимательно пересчитав их тарифы и сколько я
качаю и во сколько мне это обходится, понял, что мне не выгодно. А
выделенку дома - ну её, только лишние провода. Поэтому и рассмотрю
вопрос подлючения через выше указанные устройства. А проблем с
подключением через выделенку быть не должно, там ещё проще. Создаём
bridge на реальной сетевухе, если ADSL или расшариваем соединение по
выделенке для одной из виртуальных сетей на хост системе. Хотя на
выделенке наверное можно и второй IP повесить (купив его у провайдера),
и сделать bridge на сетевой карте. Если комп в сети, то делаем опять
же bridge, на FreeBSD прописываем IP и указываем шлюз, который
обеспечит нам выход в интернет.
Конфигурация, на которой всё проверялось:
ОС установленная на хосте: XPPro SP2
Виртуальная машина: VMware Workstation, Version 5.5.1 build-19175
Установленные ОС: FreeBSD 6.0-RELEASE, Windows 98
1. Соединяемся через стандартный модем
Для начала Вам нужно добавить физический COM порт к виртуальной
операционной системе (ВОС). Для этого ВОС должна быть выключена,
после в раделе устройств ВОС FreeBSD добавляем физический COM порт.
VMware сама предложит Вам список доступных портов. Если Вы добавляете
первый порт к ВОС, то VMware подключит его к FreeBSD как СОМ1, если
второй - COM2. И неважно, какой порт добавляется к ВОС - СОМ3 или СОМ12
существующие на хосте, VMware добавит их в порядке CОМ1-СОМ2.
Настраиваем FreeBSD.
Модем настроен для работы в режиме pppd.
Файл /etc/ppp/options:
/dev/cuad0 115200 #com1
crtscts
connect-max-attempts 3
modem
connect "/usr/bin/chat -V -f /etc/ppp/chat.script"
noipdefault
passive
defaultroute
debug
ipcp-accept-local
ipcp-accept-remote
user you_login
Файл /etc/ppp/pap-secret:
you_login * you_pass
Файл /etc/ppp/chat.script:
ABORT BUSY
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'NO CARRIER'
TIMEOUT 5
"" AT
OK ATZ
OK ATL3
OK ATDT3730555
TIMEOUT 120
CONNECT ""
TIMEOUT 10
Если в ВОС FreeBSD при старте прописывается defaultroute, то при
соединении по модему это приведёт к ошибке. Defaultroute нужно удалить
из таблицы router - смотрим таблицу командой netstat -rn, и если в
поле под Destination стоит default, то удаляем его. Адреса DNS
прописываем в /etc/resolv.conf.
Для работы NAT не забываем пересобрать ядро с опциями:
options IPFIREWALL
options IPDIVERT
В /etc/rc.conf дожны быть добалены строки:
#виртуальный адаптер для которого расшариваются соединения на хосте
ifconfig_lnc0="inet 192.168.100.2 netmask 255.255.255.0"
#виртуальны адаптер для соединения с Windows 98
ifconfig_lnc1="inet 192.168.10.5 netmask 255.255.255.0"
gateway_enable="YES"
natd_enable="YES"
#для GPRS
#natd_interface="tun0"
#для модема
natd_interface="ppp0"
natd_flags="-f /etc/natd.conf"
inetd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc_pppd.fw"
Файл /etc/natd.conf:
dynamic yes
same_ports yes
use_sockets yes
Настройки firewall /etc/rc_pppd.fw:
#!/bin/sh
ipfw="/sbin/ipfw"
#для модема
natd_interface="ppp0"
#для GPRS
#natd_interface="tun0"
${ipfw} -f flush
${ipfw} add divert natd all from any to any via ${natd_interface}
${ipfw} add pass all from any to any via lo0
${ipfw} add deny all from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any
${ipfw} add pass all from any to any
Firewall представлен ОТКРЫТОГО типа, помните об этом!
На Windows 98, или другой ВОС, для которой требуется выход в интернет
через другую ВОС (шлюз), в моём случае шлюз - ВОС FreeBSD. Не забудьте
указать адрес шлюза (у меня 192.168.10.5) и адреса DNS.
2. Соединяемся через GPRS
Через GPRS можно соединиться собрав свой кабель с буферным элементом и
подключив его к СОМ порту. Я подключался через USB адаптер Prolific для
Siemens C55. Весь нюанс заключался в том, что мне так и не удалось
связать USB адапер c ВОС FreeBSD напрямую! Хотя при подключении пишется:
kernel: ucom0: Prolific Technology Inc. USB-Serial Controller, rev 1.10/3.00, addr 2
а при отключении:
kernel: ucom0: at uhub0 port 1 (addr 2) disconnected
kernel: All threads purged from cuaU0
kernel: All threads purged from ttyU0
kernel: ucom0: detached
Но сколько я не пытался подцепиться к адаптеру и передать AT команды на
модем телефона, ничего не вышло. Хотя с FLASH-USB ВОС работала замечательно,
и с данной сборкой FreeBSD установленной на реальной машине, адаптер
работал замечательно. Единственное, что я видел - это надо анализировать
сигналы проходящие к портам на хосте с ВОС. Но я этим не стал заниматься,
а поступил следующим образом.
При подключении адаптера к хосту, появляется виртуальный СОМ порт. Его
мы и подключаем к ВОС. Подключать нужно следующим образом: ВОС выключена
или в режиме suspend (приостановлена - клавиша ||), иначе FreeBSD
перехватит подключение USB адаптера. Хотя Вы можете пересобрать ядро и
выкинуть из него всё что относится к USB, если конечно Вы не будете
работать с этим портом. Подключаем адаптер. В ОС хоста появляется
виртуальный СОМ порт. Первое подлючение адаптера нужно проводить при
выключенной ВОС.
Первое подключение делается так же, как описано в начале раздела
"Соединяемся через стандартный модем". С той лишь разницей, что Вам
нужно в самом начале подключить адаптер Prolific. Теперь при выборе
СОМ порта, он появится в предложенном списке. Подключаем его. На ОС
хоста он у меня СОМ4, а на ВОС FreeBSD СОМ2.
В следующий раз, если Вы желаете воспользоваться подключением к телефону
через адаптер, включайте адаптер либо до загрузки ВОС, либо в режиме
suspend ВОС, либо сделав активным другое окно на ОС хоста. Если при загрузке
ВОС не обнаруживает адаптер, обычно при этом он отключен и ВОС
предупреждает что СОМ порт не доступен, то Вы его можете подключить
как описано выше. И при этом ткнув мышкой в недоступный порт в разделе
Device status установите галочку Connected и нажмите OK. Всё. Адаптер
задействован.
GPRS настроен для работы в режиме ppp.Рассмотрим файлы настроек.
Файл /etc/ppp/ppp.conf:
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
disable pred1 deflate deflate24 protocomp acfcomp shortseq vj
den pred1 deflate deflate24 protocomp acfcomp shortseq vj
set speed 115200
set mtu maximum 576
set timeout 0
set redial 10 10
enable dns
set device /dev/cuad1
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\"\" AT OK-AT-OK ATE1Q0 OK \
AT+CGDCONT=1,\\\"IP\\\",\\\"inet.ycc.ru\\\",\\\"0.0.0.0\\\",0,0 OK \
AT+CGATT=1 OK \\dATDT\\T TIMEOUT 40 CONNECT"
set logout "ABORT BUSY ABORT ERROR TIMEOUT 30 \
\"\"+++ATH OK-ATH-OK AT+CGATT=0 OK"
set phone *99***1\#
set authname motiv
set authkey motiv
set ifaddr 0/0 0/0 0/0
add default HISADDR
В /etc/rc.conf вносим изменения:
#для GPRS
natd_interface="tun0"
#для модема
#natd_interface="ppp0"
Изменения в /etc/rc_pppd.fw:
#для модема
#natd_interface="ppp0"
#для GPRS
natd_interface="tun0"
Для проверки подлючение модема или телефона Вы можете воспользоваться
следующей командой:
cu c параметрами -l /dev/устройство.
У меня:
Для модема cu -l /dev/cuad0
Для мобильного телефона cu -l /dev/cuad1
Пошлите команду AT. Ответ должен быть - ОК. Значит подключение работает.
Соединение с интернетом проверям командой ifconfig, в списке интерфейсов
должно быть следующее (у Вас могут быть другие IP):
tun0: flags=8051 UP,POINTOPOINT,RUNNING,MULTICAST mtu 576
inet 172.30.29.166 --> 192.168.254.254 netmask 0xffffffff
Часть вывода команды netstat -rn:
Destination Gateway
default 192.168.254.254
Это при соединении через GPRS.
При указанных настройках с Windows 98 нормально ползал по интернету. При
этом была запущена icq. Через модем icq работает лучше, чем через GPRS.
Нюанс (к ВОС не относится): если у Вас есть телефон и в компе модем, но
при этом Вы пользуетесь GPRS чтобы непрерывно находиться на связи
используя интернет-пейджеры (icq и пр.) и icq (только с ней были
отмечены такие проблемы) очень долго пытается соединиться с сервером
для авторизации то можно поступить так. Подключаемся через модем,
запускаем icq и дожидаемся авторизации на сервере. Рвём соединение
(icq можено не переводить в offline) и подключаемся через GPRS. Шанс
подкючения icq резко возрастает.
Чтобы icq работала через gprs без проблем, ну или почти без проблем.
Вам надо найти в сети список IP, через которые icq также может
подключаться вместо login.icq.com. При этом можете попробывать поменять
порт с 5190 на другой. Проблемы с подключением к login.icq.com через gprs
возникают в следствии того, что сервера ICQ ограничивают количество
подключений на один адрес. А один он у многих бользователей gprs потому,
что провайдер пускает клиентов через NAT.
Ещё отметил для себя следующее удобство:
Сидим через GPRS (у кого-то дневной траффик может быть дорогой), но если
надо что-то скачать, то просто запускаем соединение через модем и все новые
соединения, которые устанавливаются после этого запущенными программами
будут идти через dial-up соединение. Icq при этом остаётся работать через
GPRS, если конечно не "лопнет" связь, тогда она переконнектиться через
dial-up модем.
Если решили "скакать" от dial-up к GPRS без перезагрузки выполняя настройки,
то здесь я не проверял данную возможность. Скорее всего надо закомментировать
все natd_interface в /etc/rc.conf и запускать/выключать natd вручную по
необходимости. Перезапуск firewall после внесения изменений выпоняется
командой nohup sh /etc/rc_pppd.fw
Внимание!
Вновь создаваемы виртуальные адаптеры - VMware Network Adapter VMnet,
получают адреса x.y.z.1. Поэтому не забывайте менять "1" в последнем поле
на Ваше усмотрение. Или оставьте как есть и не присваивайте виртуальным
сетевым адаптерам ВОС адреса с "1" в последне поле.
Связь ОС хоста с ВОС производится либо через VMware Network Adapter VMnet,
либо через IP, который Вы установите на сетевой карте (если таковая имеется)
ОС хоста с помощью bridge. Если сделали bridge, то Ваш компьютер должен быть
подключен к сети, иначе не достучатся до ВОС, если конечно на ВОС нет ещё
одного адаптера подключенного к VMware Network Adapter VMnet.
Открываем внутренние сервисы на ВОС для пользователей интернет
Если вы подключаете ВОС через модем или bridge по выделенной линии, то здесь
проблемы вроде бы не видно.
Я открывал ресурсы через ОС хоста XP. Для примера возьмём входящие соединение
на 80 порт (http) и перенаправим его на ВОС FreeBSD на 192.168.100.2 (в моём
случае). К сожалению перенаправление с помощью firewall XP не удалось. Может я
что-то не то делал или он слишком простой:) Но разбираться с ним долго не стал,
отложил. Я воспользовался UserGate version 2.8.0.42.
На закладке Настройка->"назначение портов" нажимаем "Добавить" и заполняем:
имя - http; протокол TCP; исходящий адрес - любой; слушающий адрес - вот
здесь, если вы подключены через модем, то IP вводится после установления
соединения, т.к. если выставить Any, то извне люди не могут к Вам попасть
только Вы сможете зайти на виртуальный сайт через любой IP адрес, который
существует у Вас в сетевых соединениях с хост системы, поэтому и нужно
поставить реальный внешиний IP; слушающий порт - 80; назначение - хост
192.168.100.2, порт - 80; авторизация пользователь - по IP адресу.
Проблемы:
При попытке зайти на виртуальный сайт следующим путём: клиент->IP адрес
GPRS модема->ОС XP->ВОС FreeBSD->сервер http ничего не вышло. До XP даже
ping не проходит. Скорее всего дело в операторе сотовой связи. А вот путём
клиент->IP адрес стандартного модема->ОС XP->ВОС FreeBSD->сервер http всё
было замечательно.
Проблема оказалась естественно в провайдере - gprs клиенты выходят в сеть
через NAT.
Что ещё было отмечено на ВОС:
Отставание времени, не помог даже vmware-guestd, которы якобы желательно
установить на ВОС. Вот эти сообщения:
kernel: calcru: runtime went backwards from 2312331 usec to 2312309 usec for pid 337 (syslogd)
kernel: calcru: negative runtime of -686035 usec for pid 45 (swi0: sio)
kernel: calcru: runtime went backwards from 2312331 usec to 2312309 usec for pid 337 (syslogd)
kernel: calcru: negative runtime of -686035 usec for pid 45 (swi0: sio)
Нашёл ссылку в сети, что у человека слетел сервер (реальный) спустя
непродолжительное время после начала появления сообщений. После этого
он сделал синхронизацию. Я не стал заморачиваться и пока всё работает.
Но минус и большой очевиден. На ВОС Windows 98 время же почти не остаёт
от ОС хоста - разница может составлять несколько секунд. Также не было
замечено проблем на Linux RedHat связанных с отставанием времени.
Ещё кое-что о расшаривании реальных сетевых соединений для виртуальных
адаптеров.
Если для VMware Network Adapter VMnet(1-8) Вы впервые расшариваете
соединение, допустим Relcom_modem, на закладке "Дополнительно"->"Общий
доступ к подлючению к Интернету" необходимо поставить галочку "Разрешить
другим пользователям сети...". И в выпадающем меню выбираем адаптер, для
которого откроем доступ в интернет. Допустим
VMware Network Adapter VMnet1 c IP адресом 192.168.100.1. Для моей ВОС
FreeBSD в /etc/rc.conf прописывалось
defaultrouter="192.168.100.1"
Но почему-то при первом подключении VMware Network Adapter VMnet(1-8) XP
думает, что лучше знает какой IP должен быть у VMware Network Adapter и
меняет его на 192.168.0.1. Меняем его обратно - в моём случае 192.168.100.1
Если куда-то не проходят пакеты данных, не забывайте про tcpdump.
Тут меня упрекали, что нет описания работы ВОС при наличии выделенки. И
вот, сдвинулись какие-то шестерёнки в механизме жизни, и меня предложили
подключить к инету по выделенке по доступным ценам. Тем более что цены в
2007 на dial-up из-за монополии взлетели немеренно:( из-за чего в голове
тикал таймер на просиживаемое время в сети. В итоге выгоднее стало покупать
трафик GPRS и спокойно сидеть в сети, изредка дёргая любимый модем для
качания больших объёмов. Ну так вот, когда подключили, я даже почти ничего не
переделывал в ВОС. Если Вы внимательно изучили статью, то Вы разберётесь что
делать, при каком либо подключении к сети. Можно задействовать (расшарить)
подключение к выделенной сети и указать в настройках ВОС шлюз и адреса DNS,
которые должен выдать провайдер. Проше когда стоит роутер, врубаем его в режим
dila-on-demand, на сетевой карте для ВОС делаем bridge, в ВОС прописываем шлюз
(роутер) и адреса DNS, или указываем в настройках получать адреса DNS от роутера,
если он в режиме их передачи локальным машинам (при статически прописанных DNS
неизбежны временные задержки при нахождении в разных сетях). Если открываете
внутренние сервисы в ВОС, такие как http, ftp, ssh (если желаете из вне
контролировать работу своих систем) то не забывайте настроить фаер, и желательно
активировать NIDS. А то не успеешь открыть сервис - его уже ломать
пытаются...(где мой сетевой молоток...]:-> ). И изучайте безопасность сетевых ОС.
О! Оказывается в самом начале я уже писал об этом. Так что трудностей у
Вас не должно возникнуть.
Ну вот вроде и всё, что я успел исследовать к настоящему моменту.
(c) WhiteDragon, http://www.pro-t.web.ur.ru/