Все записи автора KulMaks

NEC VMWar VMware IDE CDR10 ATA Device или нерабочий CD-ROM в виртуальной машине

Возникла у меня как-то необходимость сконвертировать виртуальную машину с Windows 7 из формата VMWare Workstation в VMWare Infrastructure. После конвертации, естественно, очень желательно проапдейтить VMWare Tools. Вот с этим-то, внезапно, и возниклки проблемы. Дело в том, что виртуальный CD-ROM (NEC VMWar VMware IDE CDR10 ATA Device), на который монтируется образ с VMWare Tools по команде Install/Upgrade VMWare Tools, отказался работать и стартовать в системе. Удаление/добавление текущего привода, простое добавление еще одного CD-ROM никакого эффекта не возымели. На всех приводах в диспетчере устройств горел желтый восклицательный знак, а в свойствах светилась ошибка:

Windows cannot start this hardware device because its configuration information (in the registry) is incomplete or damaged. (Code 19)

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}

и удалить оттуда ключ с именем UpperFilters или LowerFilters (в зависимости от того, что там есть). После этого простое «обновление драйвера» для устройства моментально решает проблему и CD-ROM снова работает!

Конечно, можно было бы просто закинуть VMWare Tools в гостевую систему и обновить их без привода. Но это не спортивно — проблему необходимо решать, а не обходить ;)

Policy-based routing на Cisco ASA 5510, или как мы переходили на Cisco ASA — часть 1.

Жила-была одна небольшая аутсорсинговая компания. И был у нее шлюз на debian. И было хорошо. На одном из собраний с руководством для повышения стабильности и доступности интернета и серверов компании снаружи, было решено перейти на cisco. Причем не просто на cisco, а сразу на 2 cisco ASA 5510 в режиме Active/Passive. Сказано — сделано: две циски были куплены. Осталось дело за малым — изучить, настроить и внедрить. Так уж получилось, что задача эта была возложена на меня.

Для начала, была составлена примерная схема того, что мы должны получить на выходе:

1. Разделение трафика по каналам;

2. Ограничение скорости интернета каждому пользователю;

3. Приоритезация трафика ip-телефонов, а также трафика skype из переговорных комнат;

4. DMZ-подсеть;

5. Немаленькая кучка NAT-ов (если быть точнее, то PAT-ов) внутрь сети;

6. Failover cluster;

7. Site-to-site IPSEC VPN с одним из заказчиков;

Было решено не тратить драгоценное время на полное изучение всех возможностей Cisco ASA, а сразу приступать к выполнению конкретных подзадач, изучая все по ходу действий — знания, полученные на практике, всегда лучше усваиваются и запоминаются дольше.

В дальнейшем тексте предполагается, что у нас есть интерфейсы LOCAL (локальная сеть), ISP1 (интернет-провайдер 1), ISP2 (интернет-провайдер 2) и DMZ.

У тех, кто хорошо знаком с официальными возможностями Cisco ASA, первый пункт списка вызовет некоторое недоумение: в Cisco ASA в один момент времени может быть активен только один маршрут в одном направлении. То есть маршрутов по умолчанию вида

route ISP1 0.0.0.0 0.0.0.0 xxx.xxx.xxx.xxx Y

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

Однако, несмотря на все ограничения, есть способ частично разделить трафик. Конечно, это будет не полноценный PBR, но на безрыбье и рак рыба. «Фишка» в том, что asa имеет свой алгоритм выбора канала для любого пакета. В мануале он описан так:

Egress Interface Selection Process 

 1. If destination IP translating XLATE already exists, the egress interface for the packet is determined from the XLATE table, but not from the routing table. 

 2. If destination IP translating XLATE does not exist, but a matching static translation exists, then the egress interface is determined from the static route and an XLATE is created, and the routing table is not used. 

 3. If destination IP translating XLATE does not exist and no matching static translation exists, the packet is not destination IP translated. The ASA processes this packet by looking up the route to select egress interface, then source IP translation is performed (if necessary).

То есть, если этот пакет первый в данном направлении (нет созданного XLATE), то в первую очередь будут проверяться правила static nat/pat. И если при создании этого правила в качестве inside-интерфейса указать интерфейс ISP2, а outside — интерфейс LOCAL, то трафик, соответствующий этим правилам будет отправлен через интерфейс, указанный в правиле. Например:

static (ISP2,LOCAL) tcp 0.0.0.0 80 0.0.0.0 80 netmask 0.0.0.0

Это правило отправит весь http-трафик через интерфейс ISP2 даже если активен маршрут через интерфейс ISP1. Таким образом, можно получить корявенький, костыльный, но хоть как-то работающий PBR на cisco ASA.

При этом, хотелось бы отметить несколько неприятных нюансов:

1. Правила такого вида будут применяться вне зависимости от адреса назначения пакета. То есть при наличии сети DMZ, пакеты на 80 порт, адресованные в эту сеть, без дополнительных правил (о которых я расскажу в части про DMZ), будут уходить через интерфейс ISP2, т.е. фактически теряться.

2. При таком выборе канала для http-трафика, становится невозможным использование wccp — asa выбирает канал для отправки пакета до того, как узнает, что его надо переадресовать на прокси. При этом, она попытается отправить его на прокси (т.к. видит его активный статус), но через внешний канал. Таким образом, http-трафик просто потеряется.

Работа WordPress на nginx + apache (постоянный 301 редирект)

В последнее время связка nginx + apache стала очень популярной среди администраторов веб-серверов. Эта связка довольно эффективна: nginx обеспечивает высокую скорость отдачи статического контента, кэширование, балансировку нагрузки, а apache, в свою очередь, давно признан стандартом де-факто среди веб-серверов за свою многофункциональность.

Ожидаемым было и появление хостинг-провайдеров, работающих с данной связкой. Чаще всего настройка nginx в данной связке ограничивается примерно такой конструкцией:

location / {
     index index.php index.html index.htm;
     try_files $uri $uri/ @proxy;
}
location ~ \.php$ {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://127.0.0.1;
}
location @proxy {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://127.0.0.1;
}

В таком случае установка WordPress вызовет бесконечную переадресацию с кодом 301. Дело в том, что nginx при получении запроса GET / будет подставлять индексный файл index.php и отправлять этот запрос на прокси, в качестве которого выступает apache. Apache, в свою очередь, запустит этот файл и за обработку запроса и формирование страницы примется WordPress. Для пущей красоты WordPress удалит из адресной строки index.php, который туда «дописал» nginx и вернет новый «красивый» урл с редиректом 301 клиенту. Клиент перейдет по нему, nginx допишет index.php и мы будем иметь то, что имели в самом начале.

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

Во избежание такой ситуации можно применить простой фикс: добавить в nginx еще один location, который будет отправлять запросы без указания конкретного файла сразу на apache без дописывания индексного файла. Таким образом, надо добавить примерно такую конструкцию:

location ~[^?]*/$ {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://127.0.0.1;
}

В таком случае запрос вида GET / будет передан на apache без изменений, wordpress его корректно обработает и вернет главную страницу сайта. При этом, естественно, индексный файл index.php должен быть определен и в конфигурации apache.

Skype грузит процессор

С недавним апдейтом скайпа ко многим пришли и проблемы: он начал грузить   процессор на 60-80%. Простая переустановка ничего не решала.

Причины произошедшего остались за кадром, а решение оказалось вполне простым: всего лишь скачать и установить версию Skype для старых компьютеров (Skype SSE). Также, эта версия помогает скайпу «увидеть» камеру, если она есть в системе, но skype наотрез отказывается с ней работать.

UPD: С этой версией не работает конференц-связь. Поиски решения продолжаются. В качестве временной меры можно попробовать установить более старую версию и отключить автоматические обновления. Версия 6.9 подходит. Скачать ее можно здесь: http://download.skype.com/msi/SkypeSetup_6.9.0.106.msi

UPD2: По последним наблюдениям, самая свежая версия (6.14.0.104) не грузит процессор.