Всем добра, хабровчане! В статье расскажу как победить этот долбаный Skype и заставить его работать с Squid, но применимо к любому http(s) прокси. Будем использовать последний скайп. На данный момент это 7.40 и конечно, с упором на то, что очередной апдейт ничего не сломает, а если и сломает то надо будет чуток докрутить, а не откатывать версию. Сразу скажу, по сути описанный метод — это хак, т.к. актуальный скайп со сквидом работать не умеет, ну или мне не удалось победить, да и в интернете я не нашел решения, которое бы для меня взлетело. В общем, обо всём по-порядку и .

tl;dr
Включить QoS через GPO на клиентах для процессов Skype.exe и SkypeBrowserHost.exe, сказать iptables`у чтобы пропускал отмаркированный ToS`ом трафик, сказать сквиду, чтобы пускал всех на apps.skypeassets.com и mscrl.microsoft.com

Итак, мой расклад: все клиенты на Win7x64, AD DS 2008R2, Skype 7.40 x32, squid 2.7, настройки прокси в IE прилетают через GPO. Для начала расскажу зачем мне этот проклятый скайп стал так нужен. Где-то с полгода-год назад скайп 6й версии приказал долго жить, обновление на 7ку не помогло, ну ок, пересадил юзеров в веб-версию. Да, она глючная, но просто текст там вполне работает, а голос/видео можно и на личном смартфоне при надобности. Не так давно назрела необходимость брать и записывать интервью по скайпу и юзеры меня достали. Пришлось дать ноут с вафлей и начать разбираться. Оказалось, что слету «оно», т.е. скайп (эвфемизм) нигде не работает, если есть прокси, да еще и NAT полный хочет. Естественно, такого не бывает, всё настраивается, тут же прикинул я и решил вновь поднять тему. Разворачиваю, в надежде (чем черт не шутит), последний 7.40, запускаю скайп и опять вижу эту чертову рожу с КДПВ. Достаточно продолжительная война со сквидом и гуглеж привел на интересный комментарий в котором автор предлагает использовать QoS. Идея однозначно хороша, вот только у меня не взлетела из коробки и пришлось допиливать. В итоге порядок действий ниже.

Включаем QoS для клиентов


Маркируем пакеты скайпа. Открываем Групповые политики и идем Конфигурация компьютераПолитикиКонфигурация WindowsQoS oна основе политики. Нужна пара правил для процессов Skype.exe и SkypeBrowserHost.exe. Думаю, из скрина ниже всё понятно.



DSCP 36 я взял, фактически, от фонаря, достаточно высокий, но не слишком, всё же у нас цель не в максимальной приоретизации трафика для скайпа, а его маркировка. Далее делаем gpupdate на клиенте или перезагружаемся. Проверить корректность настройки можно так:
gpresult.exe /H d:\gpresult.html

В полученном отчете ищите упоминание про QoS

Говорим iptables чтобы пускал отмаркированный трафик


В GP указывается DSCP, а iptables оперирует ToS`ом. Подробнее про QoS тут . Но в двух словах, эти значения отличаются ровно в 4 раза. Чтобы получить tos умножаем значение DSCP на 4 и получаем 144. Разрешающее правило для транзита трафика с tos 144 из своей подсети куда угодно будет выглядеть как-то так:
iptables -I FORWARD 2 -s localnet/24 -m tos --tos 144 -j ACCEPT

iptables запишет tos как 0х90, т.е. в hex формате. Выбирем жертву для теста и пытаемся зайти в скайп. На шлюзе можно глянуть, что там идет с клиента, например через tcpdump
tcpdump -i eth0 -v host 192.168.0.71

получим что-то типа
00:00:00.000001 IP (tos 0x90, ttl 128, id 13954, offset 0, flags [none], proto UDP (17), length 62)
192.168.0.71.20344 > 65.55.223.43.40012: UDP, length 34

tos 0x90 — то, что надо. Видно что с клиента пришел пакет с нужным флагом. Вот только скайп по прежнему не работает.

Позволяем ходить на пару сайтов всем


Фишка в том, что Skype смотрит в настройки IE. Отключить использование прокси в этом чудесном мессенджере невозможно (лучи добра тому, кто это придумал). А у нас настройки прокси из определения выше прилетают в IE через GPO. Короче, добавляем разрешающее правило для всех в сквид на сайты apps.skypeassets.com и mscrl.microsoft.com. В противном случае я ловил TCP_DENIED/407 и скайп не подключался. Ну где-то так:
#Options for Skype

acl for_skype dstdomain apps.skypeassets.com mscrl.microsoft.com
http_access allow for_skype

не забудьте reload сквида

Не вздумайте схитрить, обойтись изменением GPO настройки IE «Не использовать прокси сервер с адресов, начинающихся с:» для упомянутых адресов. Отвалится куча сервисов МС. и web skype в первую очередь.

Снова идем тестить на жертве и получаем то, что требовалось. Скайп подключился, работает, можно писать и звонить. Ура, блин :)

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

Как развернуть Skype через WSUS. Постскриптум, до кучи


Не знаю чем думал МС, но скайп через WSUS не обновляется, можно только 1 раз установить с нуля или обновить версию из exe. При чем не то, чтобы штатно не обновляется, а даже через LUP/WPP версия в msi не прилетает. Да, я знаю, что у всех версий скайпа один Product ID, но в итоге несколько часов убил пытаясь колдовать с правилами. В итоге глянул на онлайн-каталог апдейтов и обнаружил только (WAT!?) бизнес-версию, понял, что это фича — сделать скайп в msi, но даже не раздавать его и убрать вообще возможность автоматического деплоя. Да, думаю можно было взять ORCA и наколдовать, но ну его, каждый раз что ли трансформации делать при обновлении версии… Вариант, что только у меня лыжи не едут, но короче, взял на www.skype.com/ru/get-skype классическую версию в exe и развернул через LUP. Подробности здесь.

За сим всё, надеюсь статья была полезной, жду ваших вопросов и дополнений.

Комментарии (30)


  1. gjf
    16.12.2017 15:29

    На самом деле этот гениальный мессенджер использует некую свою логику работы с прокси. И выбор «HTTPS/SOCKS» в параметрах вовсе не означает, что это будет работать.
    Вот эту ссылку можете выкинуть, ничего она не даёт.
    К тому же, похоже, для общего счастья там создаются не-ТСР сокеты:
    image

    Автор молодец, конечно, но я бы просто проблему решил посредством VPN. Меньше метаний.

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


    1. yosemity Автор
      16.12.2017 16:07

      Вот эту ссылку можете выкинуть, ничего она не даёт.

      Я такую ссылку не давал.

      Чем вы смотрите активность по процессам?
      Автор молодец, конечно, но я бы просто проблему решил посредством VPN. Меньше метаний.

      Внутри LAN? у меня и 10G есть, зачем мне лишнее? только 802.1x осваиваю.

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

      Я старался, часа 3 перечитывал и переписывал. Буду стараться, спасибо за критику.


      1. gjf
        17.12.2017 14:02

        1. Ссылка не к Вам, просто при поиске помощи в настройке прокси для Skype она появляется одной из первых. И якобы это официальный ответ Microsoft. Да только ответ нерабочий.
        2. Лог выдаст любой локальный прокси типа AdvOr. Но это — детский лепет на лужайке, если бы было время, я бы сделал исследование посерьёзнее, тем же Wireshark. К сожалению, не до того.


  1. gjf
    16.12.2017 15:31

    Кстати, работоспособность рецепта проверяли для 8-й версии? Вроде как пишут, что там хром с аддоном, должно быть полегче…


    1. yosemity Автор
      16.12.2017 16:01

      7.40 Последняя с офф сайта по ссылке в статье. 8 это «для десктоп», не проверял, но он встает рядом с классик версией.


  1. tbp2k5
    16.12.2017 15:34

    По моему наличие адекватной поддержки прокси в продуктах постепенно становиться экзотикой (виноват IPv6?): у вас прокси стоит по «историческим» причинам или нечто другое?


    1. yosemity Автор
      16.12.2017 16:02

      В первую очередь прокси стоит как инструмент защиты.


      1. Sidoran
        18.12.2017 12:09

        А можно пожалуйста более развернутый ответ? Защита кого и от чего?


        1. yosemity Автор
          18.12.2017 12:11

          Защита в том, чтобы не пускать напрямую через NAT всё, что попало, многие шифровальщики не начинают процесс пока не отправят ключ на сервер. Ну и не только шифровальщики, вообще мало ли какая информация может уйти. Да, прокси — не панацея, но лучше чем ничего.


  1. ivachkin
    16.12.2017 16:02

    Была подобная проблема, решили открытием ip адресов и днс имен на которые ходит скайп на сквиде. Причем открывать необходимо абсолютно для всех, в том числе для неавторизованных пользователей.


    1. yosemity Автор
      16.12.2017 16:03

      В том числе об это в статье сказано. Пару сайтов надо открыть.


  1. AVZlobin
    16.12.2017 16:04

    С обновлением можно сильно проще:
    http://www.skype.com/go/getskype-msi
    Вот родной пакет. Он по wsus нормально ставится и обновляется.


    1. yosemity Автор
      16.12.2017 16:05

      Нет. Попробуйте его развернуть на любую версию, а потом, когда выйдет новая обновиться на неё


      1. AVZlobin
        16.12.2017 18:27

        Именно так и обновляем — 2 года полет нормальный.


        1. yosemity Автор
          18.12.2017 12:33

          Хм, а у меня не взлетело в msi. Уж не знаю тогда с чем связано.


  1. Eldhenn
    16.12.2017 17:17

    Дожили. А когда-то скайп был программой, которая в любую дырку пролезет, даже если эта дырка находится у соседа тремя этажами ниже.


    1. wildlion
      18.12.2017 12:25

      Да, кстати. Когда деревья были зеленее нужно было постараться, чтобы эту гадину придушить. Даже через прокси.


  1. Vitalley
    16.12.2017 18:30

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


    1. navion
      18.12.2017 03:05

      Качество аудиозвонков всё ещё отвратительное и вряд ли видео они сделают лучше.


    1. FreeManOfPeace
      18.12.2017 23:22

      Ещё хуже, Skype хотя бы номер телефона не просит в принудительном порядке


  1. sasa_mi
    16.12.2017 18:33

    Древний сервер (15 лет) с насколько возможно обновленным Centos (5), клиенты с последней верисией скайпа- полет нормальный, давно..


  1. HSerg
    16.12.2017 18:35

    На работе skype работает именно через squid (ещё и с отключенным connect). После какого-то из обновлений, skype действительно перестал выходить в online сразу после запуска, но за 10-15 минут таки подключается и работает уже нормально.


  1. H3xus
    18.12.2017 12:03

    А можно чуть более развернуто пояснить некоторые моменты?
    1. с QOS понятно, трафик по признаку отбираем фаерволом и передаем дальше. Но, нет подмены адреса, то есть просто форвард в мир? Нас не интересует ответ?
    Да, дамп показывает что там UDP, но все же как то странно
    2. в сквиде разрешение на 2 адреса, даже без метода connect. Или это разрешено где то еще?


    1. yosemity Автор
      18.12.2017 12:08

      1.Это обычное разрешение в цепочке FORWARD таблицы filter, естественно есть еще правило в таблице nat, которое маскардит весь транзитный трафик.
      2. Да, есть еще правила. Пока не прописал эти два адреса подключиться было нельзя, сквид в логах писал TCP_DENIED/407.


      1. H3xus
        18.12.2017 12:54

        Раз уж это туториал, может добавите для полноты картины?


        1. yosemity Автор
          18.12.2017 13:44

          Настройка маршрутизации в Linux выходит за рамки данной статьи, но, например так:

          iptables -t nat -A POSTROUTING -s localnet/24 -j MASQUERADE
          .
          Т.е. маскардится абсолютно весь трафик, а вот разрешения уже идут через таблицу filter.


          1. H3xus
            18.12.2017 18:13

            отлично, полный NAT, зачем тогда сквид? его ставят как раз для фильтрации трафика и ограничения доступа. Получается что мы разрешили в сквиде конекты на 2 сайта, все остальное — натится, тоесть не 443 и не 80 порты проходят через нат. Скорее тут обход того что скайп получает прокси из политики. Так как вы специально матчите и пропускаете трафик сгенерированный skype.exe. В итоге для него получается натинг, и сквид тут сбоку, по скольку трафик собственно в него и не попадает.
            Статья познавательна, спасибо.


            1. yosemity Автор
              18.12.2017 19:07

              Скорее тут обход того что скайп получает прокси из политики… сквид тут сбоку, по скольку трафик собственно в него и не попадает.
              Все верно, НАТ нужен для обхода, но одной маркировки недостаточно и часть трафика скайпа как раз попадает на сквид, я об этом упомянул в статье:
              Фишка в том, что Skype смотрит в настройки IE. Отключить использование прокси в этом чудесном мессенджере невозможно (лучи добра тому, кто это придумал). А у нас настройки прокси из определения выше прилетают в IE через GPO.


            1. Shtucer
              18.12.2017 20:44

              отлично, полный NAT, зачем тогда сквид? его ставят как раз для фильтрации трафика и ограничения доступа.

              А какое тут противоречие?


  1. slavius
    18.12.2017 13:54

    Вот млин. Пару месяцев назад мучался с такой-же проблемой, но с прокси Kerio. Не удавался именно первичный вход Скайпа. Решилось путем попытки создания новой учетной записи из Скайпа, а потом возврат ко входу с существующей учеткой. И оно потом работало. Что это такое — так и не понял.