Как подружить Skype и прокси

yfl0s31i25jnspaavgwqwhc3ct4.jpeg

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

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

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

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

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

fhg9mwf6vnl5r2puly6lbjadcpi.png

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 0×90, 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 0×90 — то, что надо. Видно что с клиента пришел пакет с нужным флагом. Вот только скайп по прежнему не работает.

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

Фишка в том, что 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. Подробности здесь.

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

© Habrahabr.ru