на домашнюю страницу автора

к списку статей

"Интернет есть лучший способ удовлетворить свое любопытство за деньги твоего работодателя."
Чей (C), честно говоря не знаю :-)

Сам себе провайдер.

1. Наша задача

Как я убедился по нескончаемому потоку писем, потребность организовать небольшой сервер удалённого доступа, или проще говоря dial-up сервер, с возможностью доступа в локальную сеть и Internet возникает довольно часто. Здесь я хочу поделиться собственным опытом в этом деле.

Начнём с того, что сформулируем нашу задачу. Я попытаюсь представить некую характерную ситуацию. Имеется некая машина подключённая к телефонной линии (с помощью модема конечно), далее будем называть её «сервер». Обычно он стоит где-нибудь в офисе и также подключён к офисной локальной сети. Нередко через эту сеть он имеет выход в Internet. И есть второй компьютер, будем называть его «клиент», у которого тоже есть модем. Обычно это домашний компьютер. Хочется получить возможность с компьютера-клиента соединяться по телефону с сервером и получить доступ к ресурсам самого севера (прежде всего файлам), локальной сети, а через них и к Internet.

Использовать сервер удалённого доступа можно по-разному. Тому, для кого компьютер — это универсальная пишущая машинка, может понадобиться забрать с работы электронные документы. Администратор-«аникейщик» тоже иногда может решить проблемы удалённо, не приезжая в офис. Но чаще всего народ (по крайней мере, наш, «советский») желает использовать возможности удалённого доступа к сети, правильно! для того чтобы полазить в Internet за счёт фирмы. О! Это сладкое слово «халява», сколько сказано о тебе! Впрочем, зачастую в этом нет ничего предосудительного. Сам я оказался в подобной ситуации, когда жил в общаге, где единственной доступной мне линией связи был только внутренний институтский телефон. Но не будем затягивать лирическое отступление и перейдём к делу.

В принципе, в решении поставленной задачи нет почти ничего сложного. Основную трудность для неподготовленного человека составляет множество новых для него понятий, в которых трудно сходу сориентироваться. Поэтому здесь и постараюсь дать читателю общее представление о том, что есть что, и как всё это работает. Я постараюсь не разжижать текст детальными разъяснениями типа «наведите курсор на то-то, щёлкните правой клавишей мыши, в появившемся меню...» Человек, понявший суть дела легко разберётся в этих частностях самостоятельно.

Впрочем, не буду утверждать, что на вашем пути не встретится никаких подводных граблей. Парочку из них я даже знаю и постараюсь о них рассказать. К счастью, эти сложности обычно вполне можно обойти.

И на клиенте и на сервере может быть установлена Windows как 95го (Windows 95, 98, ME), так и NT семейства (Windows NT4, 2000, XP). Для сервера конечно предпочтительнее второе, поскольку в NT имеются специфические серверные возможности, вроде разграничения доступа, аудита и т.п. Я рекомендую Windows 2000, как самую надёжную и проверенную систему, удовлетворяющую современным требованиям. Однако для частного пользования может оказаться вполне достаточно и сервера на 9x. (Лично я как раз использовал старенькую 486ю, на которой стояла Windows 95 OSR2, и был вполне доволен.)

Хотя внешне настройка сети и сервера удалённого доступа в 9x и NT системах заметно отличается (разные диалоги, часто искать их нужно в разных местах), основные понятия всё равно одни те же. Впрочем, я постараюсь рассказать об особенностях каждой из этих платформ. Лично я привык пользоваться англоязычной версией окошек, поэтому буду приводить английские названия. Надеюсь, вы сумеете разобраться, как это называется в русифицированных версиях.

Так уж получилось, что хотя в своё время я много работал под NT4, никогда не пользовался там dial-upом. С новомодной XP я знаком достаточно поверхностно. Поэтому, говоря об NT семействе Winsdows, я буду иметь в виду прежде всего 2000. В принципе, сетевые настройки во всех этих системах очень близки, но незначительные различия всё же имеются. Впрочем, в наше время NT4 уже неактуальны, а переходить на XP явно преждевременно, Windows 2000, на мой взгляд, лучше её по всем параметрам. Что касается 95го семейства, то в том, что касается сети, различий внутри него нет практически никаких.

Что касается альтернативных систем, вроде Linux, я принципиально не хочу их здесь рассматривать. Причин две. Во-первых, далеко не всегда есть возможность выделить под сервер специальную машину, чаще всего он используется и для обычных офисных нужд. И во-вторых, разобраться с Linux-подобными системами для неподготовленного человека практически нереально. (Я предполагаю, что вы, читатель, далеко не крутой компьютерный спец, иначе вы вряд ли стали бы читать эту статью.) Во всяком случае, это потребует непропорционально много сил и времени и вряд ли себя оправдает. Наконец, мне неизвестно каких-либо кардинальных преимуществ у альтернативных ОС для решения нашей задачи. Какие-то проблемы несомненно решаются легче, но взамен появляется столько же других.

2. Общая настройка

Начнём с базовой настройки системы. В этой части мы должны научиться соединяться с сервером и получать доступ к его ресурсам и даже к некоторым ресурсам локальной сети. Выход в интернет пока отложим, эта тема требует отдельного разговора.

2.1. Dial-up Networking & Dial-up Server

Первое, что надо сделать, это научить сервер принимать звонки, а клиента дозваниваться до сервера. Рассмотрим по отдельности, что требуется настроить на компьютере-клиенте, а что на сервере.

2.1.1. Клиент

Здесь всё нужно сделать практически в точности так же, как и для связи с настоящим провайдером. Для этого, на компьютере должна быть установлена поддержка модемного соединения. В Windows 2000/XP она всегда ставится вместе с системой. В Windows 95/98 надо зайти в Windows Setup (Control Panel ==> Add/Remove Programs ==> Windows Setup) в раздел Communications и установить «Dial-up networking». Впрочем, обычно она бывает уже установлена.

Далее следует создать объект «соединение» (connection) (2000/XP: Control Panel ==> Network and Dial-up Connections ==> Make New Connection… 95/98: Start ==> Programs ==> Accessories ==> Communications ==> Dial-up Networking ==> Make New Connection…) и задать там параметры модемного соединения: номер телефона, код страны/города, логин/пароль и т.п. При связи с обычными провайдерами с их унксовыми серверами чаще всего приходится писать специальный login script, иначе имя пользователя и пароль каждый раз придётся вводить вручную. К счастью, при связи Windows-Windows это совершено не нужно, здесь всё автоматизировано. Обычно также требуется подправить параметры сети, но об этом мы поговорим отдельно.

Чаще всего приходится также повозиться с настройкой модема. В наших российских условиях, когда линии сверхдерьмовые, АТС древние, модемы используются зачастую самые дешёвые, не всегда в них есть набор параметров для советского стандарта телефонных линий и т.п. добиться качественной связи бывает очень непросто. Однако эта тема выходит очень далеко за рамки данной статьи, тем более что универсальных рецептов здесь почти не существует. Рискну привести здесь только один совет. По умолчанию, Windows включает поддержку компрессии на уровне модема (enable hardware compression). Если соединение нестабильно, попробуйте отключить её, очень часто это помогает. Дело в том, что по неизвестной мне причине, модемные протоколы устроены так, что сжатие в них плохо согласуется с системой коррекции ошибок. На самом деле, данные через модем всё равно передаются в сжатом виде, только компрессия происходит на уровне PPP протокола, то есть до того, как данные попадают в модем. Кстати, Windows позволяет контролировать и этот параметр, он называется «enable software compression», рекомендую чтобы он был включён на обоих концах.

2.1.2. Сервер

На компьютере-сервере для начала надо также как и на клиенте установить поддержку Dial-up Networking и настроить модем. Это я уже описал. Далее надо установить и настроить собственно сервер удалённого доступа.

В NT системах ничего дополнительного устанавливать не надо, всё уже заранее установлено вместе с системой. А процесс настройки внешне напоминает настройку клиента. Надо открыть папку «Network and Dial-up Connections» и создать новое соединение. Мастер (wizard) предложит вам выбор из возможных типов соединений, и если на клиенте мы должны были выбирать «Dial-up to the Internet», то здесь нужно выбрать «Accept incoming connections». Остаётся лишь задать параметры соединения.

В Windows 9x сервер удалённого доступа требуется специально устанавливать. Причём в Windows 95 для этого требовался специальный пакет «Microsoft Plus!», несколько странный продукт, основной частью которого был набор картинок для десктопа, а в дополнение к ним — несколько действительно полезных системных инструментов, в том числе и Dial-up сервер. К счастью, в Windows 98 все эти компоненты были включены в основной дистрибутив. Впрочем, по умолчанию dial-up сервер всё равно не ставится. Установить его можно точно так же, как и «Dial-up networking» через Add/Remove Programs ==> Windows Setup.

Я не случайно так подробно рассказываю о Windows 95. Дело в том, что для личного dial-up сервера зачастую более чем достаточно старенькой 486 (именно такую я и использовал на протяжении пары лет). Всё равно узкое место — это всегда модем, именно его возможности ограничивают скорость связи. Оптимальной системой для такой старинной машинки будет как раз старая добрая Windows 95 OSR2 (для 98 ресурсов может быть уже маловато).

Правда у 9x систем есть одно серьёзное ограничение, о котором я узнал относительно недавно. Одновременно может открыть соединение только один модем! То есть вы можете подключить несколько модемов, и все они будут принимать звонки. Но одновременно может поднять трубку только один из них. Мне неизвестно можно ли обойти это ограничение 9x. Разумнее всего конечно в этом случае перейти на Windows 2000, где подобного ограничения нет. (Конечно, обойтись при этом 486 будет уже ой как не просто) Впрочем, если вы делаете сервер «для личных нужд», больше одного модема обычно и не требуется.

Панель управления сервером удалённого доступа в Windows 9x запрятана подальше от глаз пользователя. Откройте окошко «Dial-up Networking», выберете меню «Connection», там-то и увидите сокровенное «Dial-up Server..». (Если вы его не нашли, вероятно dial-up server не установлен) Богатством настроек эта панель не блещет: можно разрешить или запретить удалённый доступ (то есть включить и выключить сервер) и задать пароль. Настройки в «Server Type» лучше оставить те, что стоят по умолчанию. Радует, что все эти настройки делаются для каждого из модемом независимо.

Собственно на этом этапе уже можно попытаться дозвониться с клиента и убедиться по крайней мере в том, что сервер берёт трубку и отвечает на звонок.

2.1.3. Управление RAS сервером.

В условиях типичной конторы редко удаётся выделить под сервер удалённого доступа специальную телефонную линию (разве только вы в этой конторе начальник :-) Обычно этот же телефон используется и для обычных телефонных разговоров. Как сделать так, что бы сервер удалённого доступа не мешал им?

Есть два пути решения этой проблемы. Во-первых, стоит ограничить время работы сервера, чтобы он отвечал на звонки только в нерабочее время, скажем с 20.00 до 8.00. Во-вторых, можно сделать так, чтобы компьютер брал трубку не сразу, а после скажем 6 звонков.

И то и другое не сложно сделать в системах NT семейства. Ограничения по времени в свойствах входящих соединений не предусмотрено, но его легко организовать подручными средствами. Дело в том, что запустить и остановить dial-up сервер можно с командной строки. В 2000 и XP для этого можно использовать команды:

    NET START "Routing and Remote Access"
    NET STOP "Routing and Remote Access"

В NT4, если не вру, эти команды выглядели немного по-другому:

    NET START "REMOTE ACCESS SERVER"
    NET STOP "REMOTE ACCESS SERVER"

Соответственно остаётся добавить эти команды в «Scheduled tasks» и задать время, когда сервер будет включаться, а когда выключаться.

Ограничение на минимальное количество звонков делается ещё проще, хотя опять-таки "руками". Нужно залезть в Regedit, открыть ключ:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters

и создать там параметр (типа DWORD) под именем NumberOfRings, в котором и задать требуемое число звонков (от 0 до 20).

А вот что касается Windows 95 (и иже с ним) то тут всё несколько хуже. Во-первых, сделать так, чтобы модем снимал трубку не сразу, а после нескольких звонков просто невозможно ни штатными, ни внештатными средствами. В самом 95м сервере такой возможности не предусмотрено. В принципе, для этих целей существует команда модема S0=N (где N – число звонков). Но не спешите вставлять её в строку инициализации, RAS сервер реализован так, что эта команда не работает. В принципе, мне встречалось сообщение в FIDO, что кому-то удалось воспользоваться этой командой. Правда, для этого пришлось чуть ли не полностью переправить раздел реестра, где прописаны команды модема используемые RAS. Лично мне этого достичь не удалось. В любом случае идти таким извратным путём я не рекомендую. Так что с тем, что Windows 95 сервер берёт трубку немедленно по звонку лучше попросту смириться.

Ни встроенной возможности задать график работы, ни хотя бы команды, аналогичной NET START в NT, в Windows 9x тоже не предусмотрено. Здесь я не нашёл ничего лучше, чем написать собственную программку, работающую с командной строки и заменяющую NET START. Подробности смотри на страничке программы. С помощью этой команды вы легко сможете задать график работы использую системный планировщик. В Windows 95 таковой входил в состав всё того же Microsoft Plus!, в 98х аналогичная программка вошла в состав основного дистрибутива.

2.2. Настройка сети.

Итак, мы научились дозваниваться до сервера и устанавливать соединение. Следующий этап — получить доступ к ресурсам сервера и локальной сети (о том, как выйти в интернет разговор особый). Обычно для этого более чем достаточно настроек, что Windows используют по умолчанию, но на всякий случаю я кратко расскажу, на что стоит обратить внимание.

2.2.1. О сетевых протоколах.

После того, как модемное соединение установлено, в дело вступает следующий уровень программного обеспечения, который реализуют взаимодействие компьютеров по сети. Для этого уровня в принципе всё равно, как именно соединены компьютеры: с помощью сетевых карт, через модемное соединение или скажем напрямую через COM порты. В Windows 9x это видно наглядно: после установки Dial-up networking в настройках сети вы увидите так называемый «Dial-up adapter», виртуальная сетевая карта, передающая данные через модемное соединение. Не смотря на это, в Windows 95 настройки связанные с этим уровнем раскиданы по разным местам: основная часть находится в настройках локальной сети (Control Panel ==> Network), а другая в настройках модемного соединения. В NT системах всё сделано более капитально. Здесь модемное соединение выступает абсолютно на равных правах с соединением через локальную сеть. Не зря и те и другие представлены вместе в окошке «Network and Dial-up Connections». Параметры каждого из них настраиваются совершенно независимо от других, во всяком случае по сравнению с 9x, где многие важные параметры увы пересекаются.

Начать пожалуй, следует с того, что выбрать, какие из сетевых протоколов вам могут пригодиться, и при необходимости включить и настроить их. В Windows 9x это делается через панель настройки локальной сети (Control Panel ==> Network) плюс в панели настройки модемного соединения можно указать, какие из трёх протоколов (IPX, NetBEUI, TCP/IP) можно использовать с этим соединением.

На практике обычно используется три сетевых протокола: IPX/SPX, NetBEUI и TCP/IP. Рассмотрим каждый из них:

2.2.2. IPX/SPX

Протокол фирмы Novell. Соответственно нужен только в случае, если вы собираетесь работать с Novell сервером. Если же нет, можете смело удалить этот протокол. В принципе, если он останется подключённым, ничего страшного не случится. Но жизненный опыт и здравый смысл подсказывают, что неиспользуемые элементы системы лучше отключить. «От греха подальше».

Что ещё можно сказать про IPX? Приятная особенность этого протокола по сравнению с TCP/IP что он фактически не требует какой-либо специальной настройки маршрутизации. (В 9x её следует разрешить в свойствах протокола) Тогда дозвонившись с удалённой машины до сервера, вы автоматически получите доступ ко всей локальной сети.

Хочу обратить внимание ещё вот на что. Если вы решили подключить протокол IPX в Windows 9x, открыли свойства сети, нажали Add... Т Protocol вы увидите список фирм. Там будет и Novell и Microsoft, и заглянув в оба из этих пунктов вы обнаружите там IPX/SPX. Выбрать следует тот, что Microsoft. Это специально обученный 32-х битный Windows драйвер. Тот, что в пункте Novell - это всего лишь интерфейс к старому DOSовскому драйверу IPX.

2.2.3. NetBEUI

Родной для Windows протокол. Появился и поддерживается он ещё со времён старой доброй Windows 3.11. Ставится он по умолчанию, настройки никакой не требует. К сожалению, как показал опыт, протокол это работает несколько нестабильно, особенно при работе через dial-up соединение. Во всяком случае, это касается Windows 9x. Тем не менее, если вам требуется доступ к «расшаренным» папкам и принтерам, не только сервера, но и других компьютеров в локальной сети, я рекомендую использовать именно этот протокол. Дело в том, что так же как и IPX он не требует настройки маршрутизации. Если же вам достаточно иметь доступ лишь к разделяемым ресурсам сервера, можно обойтись более надёжным, но не дающим выхода в локальную сеть TCP/IP, а NetBEUI отключить.

2.2.4. TCP/IP

На этом протоколе строится весь Internet. Соответственно, чтобы выйти в глобальную сеть, без него не обойтись. К сожалению, как и всё пришедшее с UNIX систем, этот протокол требует немало всякой ручной настройки. Особый геморрой начинается, когда дело доходит до маршрутизации, поэтому этот разговор я вынес в отдельный раздел. А сейчас попытаемся просто соединить этим протоколом два компьютера: клиент и сервер.

Главное, что необходимо для этого сделать, это назначить компьютерам адреса. IP-адрес устроен так, что первая часть его обозначает номер подсети, а вторая — номер компьютера в этой сети или как выражаются юниксоиды «номер хоста». Какая именно часть адреса означает подсеть, определяется маской подсети. Маска — это число в двоичном представлении которого вся часть, соответствующая номеру подсети заполнена единицами, а остальная — нулями. Приведу простой пример. По старинной традиции (на мой взгляд, ужасно неудобной) адреса и маски записываются в виде четырёх десятичных чисел, каждое из которых означает один байт (байт — это 8 бит, IP-адрес — 32битное число, соответственно делится на 4 байта). Пусть IP-адрес 192.168.1.1, а маска подсети будет 255.255.255.0. В двоичном виде последняя представляет 11111111.11111111.11111111.00000000. Значит первые три числа 192.168.1 — номер сети, а последняя 1 — номер хоста в ней. Номера подсети и хоста не обязательно состоят из целого числа байт. Например если используется маска 255.255.255.224 (в двоичном виде 11111111.11111111.11111111.11100000) под номер хоста отводятся последние 5 бит адреса, остальное же — номер подсети.

У одного компьютера может быть несколько IP адресов. Например, это необходимо в случае, когда он принадлежит сразу нескольким IP-сетям. Так наш dial-up сервер как раз входит в две сети: офисной локальной и dial-up сети.

Номера компьютеров в подсети можно выбирать произвольно, главное чтобы они были разными. А вот номер сети можно взять от фонаря, только если ваши компьютеры больше ни с чем не соединены. О назначении номера сети и IP-адресов, мы ещё поговорим, когда речь пойдёт о подключении к Internet. А пока, для первого эксперимента предлагаю вам назначить адреса следующим образом: маска 255.255.255.0, адрес сервера 192.168.0.1, адрес клиента 192.168.0.2. (Почему я выбрал именно этот номер сети, объясню позднее) Теперь попробуйте дозвониться до сервера и проверить работу TCP/IP инструментом ping. Откройте «command prompt» и дайте команду ping 192.168.0.1. Этот команда просто посылает запросы серверу и ждёт, когда он ответит.

Если в качестве сервера у вас стоит Windows NT/2000 Server, можно попробовать настроить систему DHCP. При этом можно добиться того, что на клиенте вообще ничего не нужно будет настраивать, IP-адрес и другие параметры TCP будут передаваться ему автоматически. Впрочем, это становится важно, когда к вашему серверу должны подключаться сотни человек. В наших же условиях кустарного провайдерства, на мой взгляд, проще задать IP-адреса статически.

2.2.5. Доступ к локальным ресурсам.

Ну вот, компьютеры дозваниваются, протоколы работают, теперь можно настроить удалённый доступ к локальным ресурсам компьютеров, то есть к «расшаренным» папкам и принтерам. Обычно эта возможность бывает не лишней. Собственно открыть ту или иную папку для доступа из внешнего мира тривиально, выбрать в её свойствах закладку «Sharing» и задать параметры. Остановлюсь лишь на паре важных моментов...

Для того, чтобы иметь доступ к разделяемым папкам чужих компьютеров, необходимо, чтобы работал сервис «Client for Microsoft networking» (см. свойства сети в Win9x или свойства сетевого соединения для NT/2000), а для того, чтобы иметь возможность открывать доступ к своим папкам необходим также «File and printer sharing for Microsoft networks». Последний сервис выполняет также ещё одну полезную функцию: ведёт список компьютеров в сети. Так что если у вас он выключен, не удивляйтесь, что открыв папку «Network Neighborhood», вы увидите там лишь свой компьютер. Подсоединиться к другому компьютеру при этом всё равно можно, но надо знать его имя. Для этого вам придётся воспользоваться: Start ==> Find ==> Computer...

Ещё хочу предупредить вас! Ни в коем случае, не открывайте доступ полностью ко всему диску "C:\", как это часто делают! Открыть диск на полный доступ — всё равно что бросить автомобиль на улице не только не заперев, а наоборот оставив распахнутыми двери... В любой конторе, где работает больше двух человек обязательно найдётся какой-нибудь придурок мнящий себя великим хакером. К сожалению, способ самоутверждения у этой публики только один: сделать какую-нибудь пакость. (Кстати, некоторые вирусы умеют автоматически сканировать локальную сеть в поисках компьютеров, с открытыми на запись системными дисками и заражать их.) Так что лучше заранее подстраховаться от неприятных сюрпризов. Создайте специальную папку, которая будет использоваться только для временного хранения и передачи файлов, откройте на доступ только её и желательно поставьте пароль.

3. Как пробраться в Internet?

Итак, мы подходим к самому интересному моменту, ради чего обычно всё и затевается, к выходу в Internet. И вот на этом то этапе обычно и поджидают основные проблемы. Сказать спасибо за это надо создателям протокола TCP/IP, которые в соответствии с юниксовыми традициями минимализма решили, что для IP-адреса вполне достаточно 32х бит. В результате Internet сообщество давно уже испытывает нехватку свободных адресов и выкручивается из положения как только может. Дошло до того, что в наше время именно «обходные» пути (NAT/proxy сервера) стали намного более употребительны, чем «правильный» путь с настройкой маршрутизации.

В принципе возможны два варианта: 1) Использовать NAT либо Proxy сервер. 2) Настраивать маршрутизацию TCP/IP. Реализация второго на практике оказывается гораздо сложнее. Причин две. Во-первых, вам придётся согласовать с системным администратором вопрос о распределении IP-адресов. Во-вторых, создатели TCP/IP соблюли и другую традицию юниксоидов, согласной которой TCP/IP стал увлекательной игрушкой для сисадминов, где есть куча загадочных параметров, которые можно настраивать, конфигурировать, администрировать... В этой статье я могу дать «солюшен» лишь для первого уровня этого «квеста». Так что основное внимание я хочу уделить первому варианту.

3.1. Несколько слов о терминологии.

Что мы имеем на данный момент? У нас есть две IP-сети: подключённая к Internet офисная локалка с одной сторны, а с другой dial-up сеть из двух компьютеров, сервера и удалённого клиента. Пока они никак не связаны и наша задача как раз и состоит в том, чтобы эту связь наладить.

Далее мы будем называть эти две IP-сети, которые мы должны соединить, внешней и внутренней. В нашем случае внешняя сеть — это офисная локалка, а внутренняя — dial-up сеть. Гораздо чаще эту же задачу, соединение IP-сетей, приходится решать в обратном варианте, когда нужно соединить офисную сеть с Internet через одно dial-up соединение с провайдером. В этом случае наоборот, локальная сеть будет внутренней, а dial-up — внешней.

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

3.2. NAT/Proxy.

Обычно, администраторы не позволяют выделять для внутренней сети реальные IP адреса. В этом случае для соединения с внешней сетью на сервере должна работать специальная программа-мостик. По принципу действия эти программы можно разделить на два класса: proxy и NAT, хотя надо заметить, что многие современные программные продукты сочетают в себе оба подхода.

Proxy в дословном переводе с английского означает «заместитель, уполномоченный». В общем случае, принцип действия такого заместителя прост: для внутренней сети proxy работает как сервер для заданного протокола, к примеру почтового SMTP, но все поступающие к нему запросы вместо того, чтобы обрабатывать их самостоятельно, он напрямую переправляет уже настоящему серверу, находящемуся во внешней сети и точно также переправляет его ответы. Например, если вы отправляете письма через сервер smtp.company.com, вам придётся прописать этот сервер в своей проксе, а в почтовой программе на клиенте вместо него записать адрес сервера в dial-up сети (если ваша сеть настроена так, как было предложено в п. 2.2.4, это будет 192.168.0.1). Для большинства Internet протоколов (таких, как SMTP, POP3, Telnet) proxy вполне достаточно лишь тупо принять данные от одной стороны и переправить их другой. Поэтому в программах proxy-серверов как правило имеется возможность настраивать «port mapping», то есть задать, к примеру, чтобы все запросы к серверу на порт 25 (стандартный номер порта для SMTP) со стороны внутренней сети, перенаправлялись к примеру на некий сервер smtp.company.com:25. Если вам надо работать с двумя SMTP серверами, для одного из них очевидно придётся использовать нестандартный номер порта. К сожалению, port mapping работает далеко не для всех протоколов. Например FTP использует не одно, а два соединения и простой port mapping не сработает. Для таких «сложных» протоколов требуется специальная поддержка со стороны proxy. Для HTTP протокола, хотя он и может работать через «port mapping» лучше использовать специальный HTTP proxy.

Хоть и редко, но иногда полезной бывает возможность настраивать port mapping не только для исходящих, но и для входящих соединений. Это означает, что представитель будет наоборот переправлять запросы из внешней сети во внутреннюю. Это даёт возможность использовать на компьютере-клиенте серверные приложения и иметь к ним доступ из внешней сети.

Понятно, что с proxy связана масса неудобств, для каждого сервера в Internet, с которым вы хотите работать, требуется настраивать port mapping. Исключение составляет протокол HTTP. Возможность использование proxy заложена в основу этого протокола, поэтому всё, что нужно сделать, это прописать адрес HTTP proxy в параметры web броузера на компьютере-клиенте. (Обычно под словом proxy подразумевают именно HTTP proxy.) Прстейший HTTP proxy не намного сложнее port mapping. Он извлекает имя сервера, с которого требуется скачать страничку из заголовка HTTP запроса и переправляет туда этот запрос. Кроме того, обычно HTTP proxy предоставляет дополнительную услугу: кэширование загружаемых страничек, что снижает общий трафик. Впрочем, в нашей ситуации от кеширования пользы всё равно немного (в отличие от задачи подключения офисной сети через dial-up к Internet).

HTTP proxy обычно позволяют работать не только с HTTP, но и с FTP серверами. К сожалению, при этом теряется важнейшее свойство FTP, докачка. Очень странно, и FTP и HTTP протоколы имеют возможность докачки. Более того, HTTP proxy как правило поддерживают докачку с HTTP серверов. Но мне до сих пор не известна ни одна программа HTTP proxy, где была бы реализована поддержка докачки с FTP, хотя никаких фундаментальных препятствий для этого не существует.

Специально для работы с FTP предназначен «FTP gateway», особый вид представителя предназначенный специально для этого протокола (иногда его так и называют «FTP proxy», что впрочем вносит только дополнительную путаницу с HTTP proxy). К сожалению, распространённые web броузеры не поддерживают возможность работы через него (в отличие от HTTP proxy). Зато его поддерживают многие программы «качалки».

Следует упомянуть ещё SOCKS протокол. По сути, с помощью этого протокола с компьютера-клиента можно создавать временные port mapping на сервере и с помощью них уже выходить во внешнюю сеть. Однако SOCKS требует поддержки со стороны программного обеспечения клиента. Так, через SOCKS умеет работать ICQ, некоторые качалки, а вот распространённые web-броузеры увы нет.

Действие NAT-сервера в некотором смысле подобно port mapping, но в отличие от него почти прозрачно для клиента. NAT специальным образом подправляет адреса в заголовках IP-пакетов и таким образом автоматически переадресует IP-пакеты исходящих соединений. Несомненное достоинство NAT по сравнению с port mapping, в том, что и клиентов не надо перенастраивать при переходе с прямого подключения (в нашем примере в почтовой программе вы должны будете указать непосредственно smtp.company.com) и на сервере ничего дополнительно прописывать не надо. Но и NAT не универсален. Например, через него не хотели работать ранние версии ICQ. Основное ограничение — невозможность принимать входящие соединения. Обычно это требуется только серверным приложениям, однако некоторые клиентские программы их также используют. Чаще всего проблемы возникают опять-таки с FTP. Мало того, что он использует второе соединение, так ведь ещё в режиме по умолчанию оно открывается не стороны клиента, а со стороны сервера. Во всяком случае, так записано в RFC и именно так работает классический FTP клиент командной строки. Поэтому, если вы соединяетесь через NAT, ваш FTP клиент необходимо перевести в пассивный режим (passive mode), где второй сокет открывается со стороны клиента. Практически все современные приложения поддерживают его. Почему разработчики FTP протокола решили, что основным должен быть «активный», а не пассивный режим, для меня остаётся загадкой. Хотя надо заметить для многих современных приложений, например для Internet Explorer, по умолчанию включён именно пассивный режим, что нельзя не приветствовать.

Важным условием корректного функционирования NAT является правильная настройка IP адресов. Не смотря на то, что адреса внутренней сети остаются виртуальными, очень важно, чтобы такие же адреса не встречались нигде во внешних сетях (иначе с ними нельзя будет связаться). Поэтому для организации таких внутренних сетей используют специально зарезервированные номера подсетей. Наиболее популярным является 192.168, тот что я уже советовал вам. Впрочем, обратите внимание, если в вашей офисной сети адреса уже являются виртуальными и принадлежат сети 192.168, для dila-up сети вам придётся выбрать другой номер.

Итак, я кратко изложил «теорию вопроса». Теперь скажу несколько слов о софте, реализующим NAT/proxy. Чаще всего используют сторонние приложения (такие как Win-Proxy, WinGate, WinRoute... почему-то их очень любят называть на win). В современных версиях Windows (начиная с 98 и 2000) имеется встроенная поддержка NAT, здесь она носит название «internet connection sharing». К сожалению, как она, так и большинство программ сторонних производителей заточены под конфигурацию, когда офисную сеть нужно подключить к Internet через dial-up соединение. А вот настроить их для нашей конфигурации: наоборот подключить dial-up сеть к офисной, часто оказывается проблематично или вовсе невозможно.

Лично я в своё время использовал Ositis Winproxy (Существует ещё одна программа, также носящая имя Winproxy, но от другой фирмы) Это классический представитель proxy, включающий в себя HTTP proxy, FTP gateway, Telnet proxy, SOCKS4-5 и port mapping. Современные версии, насколько мне известно, включают и NAT тоже, но в той версии его ещё не было. Не смотря на это, его возможностей мне оказалось вполне достаточно. Internet Explorer, почта, ICQ, всё прекрасно работало. Я остановился на этом приложении именно потому, что его (в отличие например от WinGate) оказалось легко приспособить для нашей конфигурации и работало оно очень надёжно. К сожалению, не могу дать совет, что лучше использовать в наши дни, так как я честно говоря давно уже не слежу за новинками в этой области. Исходить конечно в первую очередь нужно из ваших потребностей. Использование NAT обычно предпочтительнее. Но лучше остановить свой выбор на приложении, пусть обладающем не с самой богатой функциональностью, но которое легче настроить и которое надёжно работает.

3.3. Маршрутизация.

Здесь я не хочу подробно рассказывать о настройке маршрутизации. Это достаточно большой разговор, требующий более детального объяснения принципов конфигурации TCP/IP и заслуживающий отдельной статьи. Если вам недостаточно того, что даёт NAT/proxy и возникла необходимость настраивать маршрутизацию TCP/IP, советую вам просто привлечь знающего человека. Тем более, вам всё равно не обойтись без участия администратора вашей офисной сети.

Скажу лишь пару слов. Первая возникающая при этом проблема — выделить для вашей dial-up сети реальные адреса. Вам понадобится не просто дополнительный адрес, а небольшая IP-подсеть. Если ваш офис подключён к Internet напрямую, обычно это бывает малореально. А вот если адреса в офисной сети виртуальные (относительно глобальной сети Internet) шансов больше, ведь в этом случае распределение адресов зависит лишь от местного системного администратора. (Hint! Все админы очень любят пиво :)

Достоинство маршрутизации заключается в том, что dial-up сеть становится полноценной частью офисной сети, и все приложения которые работают на офисных компьютерах будут точно также работать и на удалённом без каких-либо дополнительных настроек или ухищрений. Недостаток (помимо проблем с адресами и админами) — необходимость правильно задать кучу параметров: адресов, гейтвеев, а возможно ещё и таблиц маршрутизации... Так что в реальности настройка маршрутизации может оказаться намного более сложным делом, чем поставить NAT-сервер.

Справедливости ради, надо отметить, что я не знаю ни одного приложения, для использования которого на удалённом клиенте остро необходимо было бы именно настраивать маршрутизацию и нельзя было бы обойтись средствами описанными в предыдущем пункте.

На этом мне хотелось бы закончить. Вряд ли я смог здесь ответить на все возможные вопросы юного чайника. Но надеюсь теперь по крайней мере задача организации собственного сервера удалённого доступа не кажется вам такой непонятной! Извиняюсь за несколько корявый язык статьи. Честно говоря не нашёл времени, чтобы довести её до уровня литературного шедевра :-)

Удачи! Хорошего коннекта! И доброй сети! :-)

© 2002-2003 Алексей Курзенков

Внимание!!! Если вы хотите перепечатать эту статью или её часть на на своём сайте, в печтном издании, где либо ещё, большая просьба, согласуйте пожалуйста это с автором! Связаться со мной можно по адресу: