valery1707 ([info]valery1707) wrote in [info]life_in_code,

NAT vs Proxy

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


И тот и другой метод предназначен для одного и тоже действия: позволяет другим компьютерам получить доступ к сети интернет не имея отдельного подключения к интернету на каждом компьютере.

Proxy

Отдельное приложение которое позволяет другим компьютерам подключаясь на определенные порты одного компьютера, с использованием определенного протокола "проксирования" получить доступ к сети интернет.
Имеется довольно большой выбор программ-proxy, как бесплатных, так и платных и вообще кучу разновидностей лицензирования (в плоть до ограничения в бесплатной версии количества фильтров/пользователей).

Большинство программ поддерживает следующие протоколы: HTTP(S)-Proxy, Socks v4, Socks v5.
HTTP-Proxy - это самый первый протокол (на сколько я знаю). Не предназначен для работы с цепочкой прокси, и не во всех случаях отрабатывает корректно.
Socks - тут могу сказать только то что данный протокол стал бинарным, в отличии от текстового HTTP-proxy, что усложняет его использование (чаще проверку) утилитами командной строки, типа telnet, но ускоряет его работу в целом. Он так же предназначен для работы с цепочками прокси, и в целом работает более надежно.
Виды прокси хорошо расписаны в [04].

Плюсы
:

  1. Простая установка, чаще всего и настройка тоже простая.
  2. Множество моделей авторизации пользователей:
    1. по логину и паролю (plain text, список логинов и паролей храниться где-тов  настройках прокси)
    2. по IP-адресу
    3. NTLM/ActiveDirectory
    4. специальным клиентским приложением, которое в отдельных случаях, может туннелировать клиентские запросы через прокси
  3. При наличии возможности кеширования данных в прокси, есть возможность экономить внешний траффик и ускорить отдачу контента пользователям.
  4. Возможность установки на машине без интернета для реализации доступа к внешним ресурсам с использованием прокси верхнего уровня. Например для переброски портов 110, 25 и т.п. с локальной машины на внешний сервер, для доступа почтовых програм к серверу почты. Вообще в установке прокси на локальной машине есть свои плюсы (нет необходимости при изменении настроек прокси верхнего уровня перенастраивать эти параметры в куче мест, достаточно изменить параметры локального прокси) и минусы (Firewall-ы такие коннекты не очень отлавливают, значит он не сможет определить наличие вируса, и не сможет заблокировать приложение которому не хотелось бы давать выход в инет).
  5. Можно контролировать кто куда ходил (по логам), а так же заблокировать доступ к определенным сайтам (по именам, IP, или по более сложным правилам, в зависимости от возможностей прокси).
  6. Обеспечение безопасности внутренней сети от атак извне, за счет того что с наружи видна только машина на которой размещен прокси, хотя в случае получения административного доступа на машине с прокси взломщик получит доступ и к компьютерам во внутренней сети.
  7. Повышение анонимности в сети, так как внутри HTTP-запроса чаще всего содержится информация об оригинальном расположении пользователя (IP) и об его окружении (OS, версия браузера). Прокси сервер может информацию подменять или указывать информацию о своем положении.
  8. Использование цепочек прокси для повышения анонимности (за счет снижения скорости).
  9. Большинство программ имеет возможность шейпинга запросов пользователей (разделение скорости канала по приоритетам, без единоличного захвата всей пропускной способности канала одним пользователем).
Минусы:
  1. Все программы использующие прокси должна уметь работать через прокси. Многие программы этого не умеют (почтовые программы, игры и так далее)
  2. Необходимость явно указывать прокси в тех программах которые умеют использовать прокси
  3. Необходимость использовать Соксификаторы (программы перехватывающие вызову WinSock API и перенаправляющие их вызовы через прокси) для тех программ которые не умеют работать нативно с прокси, но это помогает не во всех случаях.
  4. Создавать отдельные правила для Port Mapping-а для тех программ для которых не помог пункт 3. При этом, например, для доступа на pop.mail.ru:110 и pop.list.ru:110, нужно прописать на прокси два правила на разные порты, которые будут разруливать потоками данных на разные конечные сервера.

NAT

Эта технология гораздо проще с точки зрения пользователей.
Но сами программы реализующие данный алгоритм более сложны с точки зрения понимания (ИМХО), и вообще менее распространены (по крайней мере под платформу Windows). Как выяснилось это из-за того что этот протокол вообще не очень-то хорош, для программ, и вообще является временной мерой после выполнения разграничения IP-адресов на группы, часть из которых относиться к внутренним (например, 192.168.*.* и 172.16.*.*), так как пакеты направленные на IP-относящийся к группе внутренних не может быть туда доставлен так как этот адес может использоваться (и используется) в очень многих сетях [03].
Это тоже отдельное приложение-сервис на компьютере подключенном к интернету, но схема работы тут уже другая и в простых случаях не требует установки дополнительного ПО или дополнительной конфигурации на стороне пользователя.
В протоколе TCP/IP есть понятие "шлюза по умолчанию", которы используется если система не не может передать указанный пакет ни по одному из локальных сетевых интерфейсов. В этом случае этот пакет отправляется на затребованный IP, но при этом у него указывается мак-адрес шлюза.
Таким образом этот пакет обрабатывается сетевым интерфейсом на компьютере с NAT, специальной программой которая знает куда шел пакет (поле IP из пришедшего пакета) и знает кто его отправлял, он перенаправляет пакет на указанный адрес и ответ возвращает обратно пользователю.
Таким образом на компьютере пользователя достаточно настроить "шлюз по умолчанию" и адрес DNS-сервера.

Плюсы
:

  1. Очень простая настройка на компьютере пользователя: достаточно настроить "шлюз по умолчанию" и адрес DNS-сервера.
  2. Большинство программ (использующих простой протокол) без проблем работают в интернете, без дополнительных настроек, так как преобразование DNS-имени в IP-адрес и отправку пакета через шлюз осуществляет сама Windows
Минусы:
  1. Необходимость установки и настройки DNS-сервера, так как компьютер пользователя должен сначала разрешить DNS-мя в IP адрес, а после этого понять что он не может его отправить с текущими сетевыми интерфейсами.
  2. Практически полная не возможность работы программ в протоколах которых используется обратное подключение от сервера к клиенту, по переданному в запросе IP адресу, или просто порту, так как подмена адреса на машине с NAT не подзволяется (в общем случае) подменить этот IP в самом пакете, так как NAT не знает специфики протокола (опять же в общем случае, для некоторых простых протоколов, например FTP, NAT может изменять содержимое, в большинстве случаем, например Oracle, это не возможно).
  3. Авторизация по клиентов только IP.
  4. Бесплатные программы найти очень сложно, пока я вообще не смог найти нормальной программы под Windows, кроме какой-то древней, которую нормально поставить на XP не смог.

Выводы

Как выяснилось, в инете и так довольно много статей по этому поводу, причем довольно качественных. Но не смотря на это мне хочеться открыть эту информацию для граждан нашего сообщества.
Надеюсь что что-то полезное из этого поста вы все таки узнали :)
Я например понял что переходить с Proxy на NAT не имеет смысла, так как внем тоже не все столь радужно, и по большому счету хорошо только то что ничего настраивать на клиенте не нужно, все типа и так работает,но с кучей ограничений :(, хотя для работы HTTP(S), POP, SMTP, ICQ (ну может передача файлов может не работать) проблем вроде как ни каких, но вот игры в Интернете в таком случае могут и не работать.
Так что будем думать в сторону программ перенаправляющих запросы через прокси, таких как Permeo Security Driver.

Если что где не так или не понятно - пишите, я исправлю/поведу до ума :)
Есть идея написать пост по стеку TCP/IP и потому как вообще пашут приложения в сети и инет вообще. Есть идеи как это все оформить? :)

Источники

Википедия:

Статьи:

Дополнительно:

Tags: безопасность, заметки, интересные факты, интернет, компьютеры, ликбез

  • Post a new comment

    Error

  • 20 comments

[info]nornad

February 3 2008, 11:29:52 UTC 4 years ago

Большинство программ имеет возможность шейпинга

ужос! А крестиком они вышивать почему не умеют? :)
Sharing - шаринг тогда уж :)

[info]valery1707

February 3 2008, 12:55:50 UTC 4 years ago

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

Как пишется оригинальный термин (на английском) я пока не скажу, ибо пока не знаю, но сам термин верен.

[info]valery1707

February 3 2008, 12:58:35 UTC 4 years ago

Очень похоже что термин произошел от английского "shaping - придание формы".

[info]nornad

February 3 2008, 13:28:31 UTC 4 years ago

Ну, тады извиняюсь - не встречал такого термина в айти. :)

Anonymous

February 29 2008, 07:54:36 UTC 4 years ago

статья ужоснах.
1. Через нат все игры отлично работают.
2. Настраивать на клиентах не надо, DHCP помогает :)
3. Прокси тем более не дает возможности играть и если не настроено автоматическое заворачивание 80 и 443 портов на прокси, то бегать по клиентам придется

[info]_pacak_

February 29 2008, 08:41:19 UTC 4 years ago

Почитал. Надо распечатать и на стенку повесить, туда, где коллега повесил "инструкцию по использованию ценного времени системного администратора". С радостью почитаю и статью про tcp/ip стек, наверное узнаю для себя много нового :)

Фактическая неточность - Необходимость установки и настройки DNS-сервера - оно не надо для NAT.

Кстати, а чем отличаются DNAT от SNAT? И как они реализуются в никсах? А то винда для большинства пользователей какая-то сложная, непонятная и нелогичная...

[info]valery1707

February 29 2008, 13:04:00 UTC 4 years ago

Quote:
Фактическая неточность - Необходимость установки и настройки DNS-сервера - оно не надо для NAT.

А кто тогда разрешает имена сайтов в их IP? Со стороны клиентского софта работае идет так (на сколько я это понимаю): Программа собирается соедениться с неким сайтом (www.site.ru) и запрашивает у системы его IP-адрес, этот адрес разрешается системой в IP (тут должен использоваться DNS-сервер), после этого клиентское приложение говорит WinSock соедениться с этим IP, так как система не может соедениться сама, то запрос передается на шлюз по-умолчанию, который NAT-ом разруливает работу.
Может NAT позволяет так же прозрачно обратиться к внешним DNS-серверам, но тут я точно не знаю. Может знаете вы?
Quote:
Кстати, а чем отличаются DNAT от SNAT? И как они реализуются в никсах?

А тут извините, Никсы практически не знаю и помочь не могу.

P.S.
Я еще сам не все знаю, и много почерпнул во время поиска информации :)

[info]_pacak_

February 29 2008, 13:33:52 UTC 4 years ago

NAT позволяет обращаться ко внешним DNS сервисам. NAT это чуточку более чем просто прокся. после этого клиентское приложение говорит WinSock соедениться с этим IP, так как система не может соедениться сама, то запрос передается на шлюз по-умолчанию - чепуха. Курить доки на тему маршрутизации в TCP/IP. И о том что вообще такое TCP/IP. Что такое пакет, марштут... И как работает NAT.

А тут извините, Никсы практически не знаю и помочь не могу.
Да собственно мне и не надо, я как бы сам знаю про сие. И не только про сие :))))))

Я еще сам не все знаю, и много почерпнул во время поиска информации :)

Во-во. Оно и заметно. Прежде чем-нить делиться стоит самому разобраться.

[info]_pacak_

February 29 2008, 08:42:18 UTC 4 years ago

А, да. еще. Хотеть услышать про прозрачное заворачивание в проксю и dhcp.

[info]valery1707

February 29 2008, 13:10:39 UTC 4 years ago

Сам давно ищу как бы прозрачно заворачивать траффик на прокси стандартными средствами ОС Windows.
Но пока кроме продуктов работающих на сетевом уровне и заворачивающих почти весь траффик на прокси пока вариантов не нашел. Из таких приложением на вскидку могу назвать:

1. Microsoft Firewall Client для ISA

2. Permeo Security Driver

3. WideCap

4. UserGate Client для UserGate

Все в общем-то платные (клиенты поставляются с серверной частью и входят в его стоимость).
Варианты 1 и 4 используют специфику работы своей серверной части для авторизации и заворачивания траффика.

[info]_pacak_

February 29 2008, 13:35:40 UTC 4 years ago

Ээээээ... Фу. Винду на проксю ставить это пошло. И уж тем более рулить ей трафик.

Anonymous

February 29 2008, 16:30:37 UTC 4 years ago

Ответ

Первое: NAT появился относительно недавно, как технология. прочие прокси-методы разработаны давно. socks v(4,5) разработанный компанией NEC изначально был закрытым. HTTP-Proxy так и называется потому что в его основе лежит протокол HTTP.

Второе: NAT никак не связан с "внутренними" адресами. Для понимания IP адресации Вам необходимо покурить RFC1918. Шлюз(маршрутизатор) в понимании IP как раз и служит для диспетчером который знает где какие сети находятся. Для функционирования NAT вовсе не обязательно прописывать машину с запущенным сервисом NAT как шлюз по умолчанию на рабочей станции, вполне достаточно того что маршрутизатор будет знать куда отсылать пакеты на неизвестные ему сети.

Третье: "и вообще менее распространены (по крайней мере под платформу Windows)" Наверное ipnathlp.dll вроди как из штатной поставки Windows XP ещё не выкидывали ... Так называемый Internet Connection Sharing был заявлен ещё в Windows 2000 (http://www.smart-soft.ru/?page=ics)

Четвёртое: "Я например понял что переходить с Proxy на NAT не имеет смысла" Ну это если вас всё устраивает то да :) NAT плох не сам по себе, а тем что он убого реализован в Windows :) По одному уроду обо всей семье не судят.

Рассмотренный Вами случай с переадресацией 110 порта давно легко решается во всех OS кроме ... да, да кроме Windows.

P.S.: "Есть идея написать пост по стеку TCP/IP и потому как вообще пашут приложения в сети и инет вообще. Есть идеи как это все оформить? :)"

Да есть одно предложение - бросайте Вы это гиблое дело. Не нужно дезинформировать сообщество своим непониманием. Технический писатель из Вас вышел ... причём давно и далеко.

Жилкин Сергей a.k.a. robot12

[info]boombick

March 1 2008, 06:08:16 UTC 4 years ago

Re: Ответ

+1
Абсолютно безграмотный пост. И эти люди называют себя админами.

[info]valery1707

March 2 2008, 15:31:13 UTC 4 years ago

Re: Ответ

Абсолютно безграмотный ответ - администратором я себя не называл.

[info]boombick

March 2 2008, 15:37:12 UTC 4 years ago

Re: Ответ

Да.. Вас уместнее называть генератором бреда.. Ибо большей чуши я никогда не читал. Вы бы хоть взяли себе за труд ознакомиться с предметом..

[info]valery1707

March 2 2008, 16:08:07 UTC 4 years ago

Re: Ответ

Вы бы хоть взяли себе за труд ознакомиться с предметом
Вникал до написания, и буду вникать еще - по направленям указанным в адекватных ответах.

[info]valery1707

March 2 2008, 15:41:02 UTC 4 years ago

Re: Ответ

NAT появился относительно недавно, как технология
Спецификация NAT была предложена в мае 1994 г., как временное решение. Описана она была в RFC1631.

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

Anonymous

February 29 2008, 16:32:51 UTC 4 years ago

P.P.S.: Вы вообще слышали про 7ми уровневую модель OSI ???

NAT это НЕ proxy :) Они на работают на РАЗНЫХ уровнях.

[info]zm1y

April 9 2008, 04:11:13 UTC 4 years ago

Мсье, курните еще тех замечательных голландских шманов, и убейтесь в биореакторе, с жидким шлакоудалением.

[info]abuse_1982

May 26 2009, 20:44:46 UTC 3 years ago

Proxy
+ Без проблем настраивается билинг
+ Кэширование
+ Квотирование и фильтрация траффика
- Не все приложения имеют возможность работать через прокси

NAT
+ За НАТом сидеть безопасней, если грамотно выставить правила для портов.
+ Легче настроить проброс портов внешнего интерфеса на внутрениие
+ Большое распространение среди бытовых приборов (модемы, роутеры)
- Билинг нормально настраивается только в *nix-ах.
- Меньше возможностей для авторизации пользователей

Прошу сильно не критиковать, т.к. сугубо мое мнение )))
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…