20 июля 2019 года    
Суббота | 05:46    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Всё о компьютерах / Другие

Настройка ICQ для работы через Socks5 сервер.

Настройка ICQ для работы через Socks5 сервер.

Как работает ICQ

ICQ может:

  • передавать маленькие сообщения по протоколу UDP напрямую между двумя программами ICQ
  • передавать такие сообщения через сервер mirabilis, если по какой-то причине нельзя передать напрямую
  • передавать сообщения напрямую по протоколу TCP
  • поддерживать chat по протоколу TCP
  • передавать файлы по протоколу UDP
  • и др.

Для обеспечения мобильности пользователей ICQ присваивает им номера, независимые от их текущего положения в сети (IP-адреса). Но при передаче данных (сообщений, файлов и т.д.) программе приходится получать текущий IP-адрес пользователя с другой стороны, т.к. без него прямая передача по TCP/IP невозможна. Для преобразования пользовательских номеров в IP-адреса используются специальные серверы в Internet. Эти серверы специально предназначены для обслуживания пользователей ICQ и поддерживаются Mirabilis.

В момент получения доступа к Internet ICQ соединяется с одним из таких серверов и регистрируется на нем, передавая имя и пароль. Сервер запоминает текущий IP-адрес этого пользователя. Пока пользователь на линии, сервер может обрабатывать запросы других ICQ на преобразование номера пользователя в его текущий IP-адрес. Эти запросы и ответы передаются по протоколу UDP (подобно запросам и ответам DNS). Этот же сервер может служить и источником информации "доступен ли данный пользователь online".

Получив IP-адрес другой стороны, ICQ может соединиться с другой копией ICQ на другой стороне и передавать данные напрямую. Короткие сообщения ICQ может передавать по UDP. Это более быстрый и легковесный протокол чем TCP, так как не ориентирован на соединение, а посылает данные отдельными пакетами. Но UDP ненадежный, поэтому используются подтверждения доставки. ICQ делает до 6 попыток отправить сообщение по UDP. И если ни на одну из них подтверждение не пришло, ICQ выводит вам сообщение, что не пожет передать сообщение напрямую, предлагая передать через сервер Mirabilis (он, в отличие от пользователей, реже бывает недоступен). Когда получатель сообщения очередной раз подключится для регистрации, это сообщение будет ему переправлено.

Если возможно, ICQ пытается установить между переговаривающимися сторонами прямое TCP-соединение. В результате следующие сообщения могут идти по уже установленному TCP-соединению, что более надежно, чем UDP, и достаточно быстро.

Почему для работы ICQ в локальной сети используется Socks5-сервер

Если компьютеры в ЛС не имеют "настоящего" (доступного из Internet) IP-адреса, то они не могут устанавливать непосредственных соединений с другими компьютерами в Internet. Им нужен посредник. Для ICQ этот посредник должен уметь передавать UDP пакеты, устанавливать TCP-соединения с другими компьютерами и принимать TCP-соединения от других компьютеров. Как раз эти задачи решают прокси, работающие по протоколам Socks. На компьютере, имеющем настоящий IP-адрес, устанавливается программа, реализующая функции Socks-сервера. ICQ "просит" его устанавливать соединения и передавать пакеты.

Настройка DNS

ICQ, к сожалению, не использует возможность сервера Socks5 принимать имена компьютеров в качестве параметров Socks5-команд. Во всех командах он использует IP-адреса вместо имен. ICQ использует DNS для получения IP-адресов по именам компьютеров. Поэтому в локальных сетях, где используется ICQ, должен работать локальный DNS-сервер, хотя для нормальной работы в Internet через HTTP-прокси этого не требуется. Установка локального DNS-сервера не всегда оправдана, и не всегда возможна (особенно в сетях на Windows95). Есть более простые варианты.

  1. Универсальный. Он даст каждому компьютеру доступ к провайдерскому DNS, если хотя бы один компьютер в ЛС подключен к Internet и имеет доступ к провайдерскому DNS. На этом компьютере устанавливается отображение провайдерского DNS на локальный порт. Настоящий DNS сервер работает следующим образом: он получает UDP-пакеты, приходящие на 53й порт, выполнят заданные в этих пакетах запросы - преобразовать имя компьютера в IP-адрес или наоборот и возвращает результаты преобразований в ответных UDP-пакетах. Отображение устанавливает на одном из локальных компьютеров программу-сервер, которая тоже принимает запросы на 53м порту, но не обрабатывает их сама, а пересылает провайдерскому DNS, получает ответы и возвращает локальному клиенту. Со стороны клиента отображение неотличимо от настоящего DNS-сервера. Для установки такого отображения в Eserv.ini напишите команду:
    UDPMAP: 53 dns 53
    где вместо слова dns напишите IP-адрес DNS-сервера провайдера, например: 194.87.234.6.
    После этого на каждом компьютере в ЛС в свойствах протокола TCP/IP, связанного с сетевой картой, укажите в качестве DNS-сервера локальный IP-адрес компьютера в ЛС, на котором установлено отображение.
  2. Простейший, не требующий специальной программы вообще. Windows для преобразования имен в IP-адреса может использовать файл hosts. В Windows95 он находится в каталоге windows, в WindowsNT в каталоге windows\system32\drivers\etc. В файле hosts в простом текстовом формате указывается соответствие имен компьютеров и IP-адресов. Для ICQ надо написать в этом файле icq.mirabils.com и его IP-адрес.

Если ICQ не может получить IP-адреса своих серверов, то он не будет соединяться с Socks-сервером тоже (т.к. не будет знать, какие адреса вставлять в Socks-запросы).

Настройка Socks5

Дополнительная настройка сервера Socks5 не требовалась бы, если бы ICQ использовал возможности сервера корректно. К сожалению, это не так. ICQ часто использует методы bind до методов connect, хотя в описании протокола Socks5 (RFC1928) специально указано, что так делать нельзя (т.к. из-за этого bind может вернуть в ответе неверный IP-адрес, особенно в multihomed-системах). При этом ICQ использует в дальнейшей работе полученный от bind IP-адрес, и не сможет принимать входящие соединения. Поэтому требуется настроить Socks5-сервер так, чтобы он эту ситуацию обрабатывал корректно. В Socks5 из пакета Eserv/2.0 в файле настройки Eserv.ini можно явно указать, какой IP-адрес возвращать в ответе на запрос bind. Это должен быть один из ваших IP-адресов, доступных из Internet, т.е. адрес, назначенный вам провайдером. Этот адрес указывается в параметре "ExternIP" файла Eserv.ini. Если адрес статический, то впишите его цифрами. Если назначается динамически при подключении через модем, то напишите доменное имя, назначаемое вашему компьютеру при подключении, Socks сам получит цифровой адрес по имени. Если и имя динамическое, то не используйте параметр ExternIP.

Кроме этого на этапе отладки поставьте LogLevel: 6, чтобы видеть в журналах возможные ошибки.

Настройка ICQ

ICQ для работы через Socks5-сервер требуется знать только имя компьютера, на котором установлен Socks5-сервер и номер порта сервера. Эти параметры указываются в меню ICQ/Preferences/Connection/FirewallSettings. В поле "Socks5 host" укажите сетевое имя компьютера, на котором работает Socks-сервер. В поле "Socks5 host" номер порта 1080. Имя и пароль для подключения к Socks не нужен.

Проверка, возможные проблемы

После проведения всех настроек, соединитесь с Internet и в ICQ на клиенских станциях нажмите "Check my firewall settings". Если ICQ сообщает о проблемах, проверьте следующее:

  1. Появились ли какие-либо записи в udpmap.log? (Если вы использовали UDPMAP для отображения DNS). Если журнал пуст, то запросов к DNS не поступало. Проверьте настройки DNS.
  2. Если в журнале есть записи вида "Packet Q from...", но нет записей вида "Packet R from...", то это значит что DNS сервер, отображение которого производится, либо недоступен, либо не отвечает.
  3. Если в журнале есть записи обоих видов, и в дампах пакетов присутствуют адреса mirabilis.com, то DNS отрабатывает нормально. Далее смотрите журнал socks.log. Если там есть записи "Connection from:...", "Command...", то ICQ нормально обращается к Socks-серверу и выдает команды. Далее нужно более детально разбираться в том, как Socks обрабатывает эти запросы, может ли выполнить требуемые команды. Об этом сервер пишет в socks.log.

Андрей Черезов

 Настройка ICQ для работы через Socks5 сервер.
Лента новостей


2006 (c) Copyright Hardline.ru