<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Компы и автомобили (Posts about Администрирование)</title><link>https://at-hacker.in/</link><description></description><atom:link href="https://at-hacker.in/categories/administrirovanie.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:"&gt;at-hacker&lt;/a&gt; </copyright><lastBuildDate>Sat, 16 May 2026 20:41:17 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Зависание инсталлятора VMware tools</title><link>https://at-hacker.in/posts/zavisanie-installyatora-vmware-tools/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Попытался сейчас на одной виртуалке с Ubuntu заапргейдить VMware tools в «non-interactive mode». Это когда оно, по идее, должно само подключиться к виртуалке, и само всё сделать. Но операция «Initiated VMware tools install or upgrade» зависла на 0%, и больше ничего нельзя было с виртуалкой сделать — ни отмонтировать диск с VMware tools, ни мигрировать виртуалку, ни отменить операцию установки. При попытке выбрать «End Install/upgrade VMware tools» выскакивала ошибка «Call „VirtualMachine.UnmountToolsInstaller“ for object „Usergate-Webfilter“ on vCenter Server „vcenter.vsphere.local“ failed», а в логах появлялось сообщение: «The operation is not allowed in the current state».&lt;/p&gt;
&lt;p&gt;В общем, оставался вариант только попробовать потушить машину, чего делать очень не хотелось — машина в продакшене, и ею пользуются клиенты.&lt;/p&gt;
&lt;p&gt;В итоге на просторах отыскался рецепт:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Включить SSH на том хосте, на котором работает виртуалка;&lt;/li&gt;
&lt;li&gt;Зайти в консоль хоста и выполнить там команду &lt;em&gt;vim-cmd vmsvc/getallvms&lt;/em&gt;. Эта команда покажет список работающих виртуалок. В левой колонке будет ID соответствующей виртуалки. Ищем в списке виртуалку, на которой завис инсталлятор VMware tools, и определяем её ID;. Эта команда покажет список работающих виртуалок. В левой колонке будет ID соответствующей виртуалки. Ищем в списке виртуалку, на которой завис инсталлятор VMware tools, и определяем её ID;&lt;/li&gt;
&lt;li&gt;Выполняем команду &lt;em&gt;vim-cmd vmsvc/tools.cancelinstall &lt;/em&gt;, где VM_ID — идентификатор виртуалки, определённый на шаге 2. После этого операция установки VMware tools завершается с ошибкой и освобождает виртуалку;, где VM_ID — идентификатор виртуалки, определённый на шаге 2. После этого операция установки VMware tools завершается с ошибкой и освобождает виртуалку;&lt;/li&gt;
&lt;li&gt;Не забываем снова отключить службу SSH на хосте.&lt;/li&gt;
&lt;/ol&gt;</description><category>Troubleshooting</category><category>VMware</category><category>Администрирование</category><guid>https://at-hacker.in/posts/zavisanie-installyatora-vmware-tools/</guid><pubDate>Fri, 06 Nov 2015 09:51:00 GMT</pubDate></item><item><title>Время, вперёд!</title><link>https://at-hacker.in/posts/vremya-vperyod/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Коллега недавно наткнулся на забавный косяк. Прописывает он задание в кроне, а оно не отрабатывает. Он уже и так, и так, и всё проверил — в логах запись об очередном запуске других (периодических) заданий крона есть, а его задание не отрабатывает.&lt;/p&gt;
&lt;p&gt;Полезли смотреть всей толпой. Выявили, что в логах факт отработки крона логируется с указанием времени, на час опережающем текущее. Т. е. если, например, выполнить &lt;em&gt;date&lt;/em&gt;, то получаем 17 часов, а крон в лог пишет, что запустился в 18 часов. Вспомнили, что мы этот сервак не перезагружали после обновления time zone data. Я сделал , то получаем 17 часов, а крон в лог пишет, что запустился в 18 часов. Вспомнили, что мы этот сервак не перезагружали после обновления time zone data. Я сделал &lt;em&gt;service syslogd restart&lt;/em&gt;. Смотрю в логи — ну, вроде как факт очередного редактирования crontab записался с правильным временем . Должно задание отработать. Однако нифига :-) В логах стало вот так:. Смотрю в логи — ну, вроде как факт очередного редактирования crontab записался с правильным временем . Должно задание отработать. Однако нифига :-) В логах стало вот так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lesnoy&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63631&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;BEGIN&lt;/span&gt; &lt;span class="n"&gt;EDIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63631&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;REPLACE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63631&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;END&lt;/span&gt; &lt;span class="n"&gt;EDIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63646&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;BEGIN&lt;/span&gt; &lt;span class="n"&gt;EDIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63646&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;END&lt;/span&gt; &lt;span class="n"&gt;EDIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;992&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;RELOAD&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tabs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="n"&gt;crontab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63677&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;LIST&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63721&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;CMD&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;libexec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;entropy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="n"&gt;vpn2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;63763&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;CMD&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;libexec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;atrun&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Т. е. время скачет очень внезапно :-) Перезапуск крона этот вопрос решил, и время везде синхронизировалось. Т. е. задание не отрабатывало потому, что коллега устанавливал срабатывание задания на 17 часов, а крон считал, что уже 18 часов.&lt;/p&gt;</description><category>FreeBSD</category><category>Troubleshooting</category><category>Администрирование</category><guid>https://at-hacker.in/posts/vremya-vperyod/</guid><pubDate>Fri, 23 Oct 2015 18:31:00 GMT</pubDate></item><item><title>Баг в файрволе pf</title><link>https://at-hacker.in/posts/bag-v-fayrvole-pf/</link><dc:creator>at-hacker</dc:creator><description>&lt;h3&gt;Предисловие&lt;/h3&gt;
&lt;p&gt;В конторе мы вынужденно используем FreeBSD 9.3 на BRAS'ах. Вызвано это тем, что на 10-ой фре есть какой-то косяк с mpd (у нас с его помощью PPPoE-соединения от клиентов обслуживаются). И mpd периодически виснет при значительном изменении числа подключений. Т. е. когда много клиентов одновременно подключается или отключается, &lt;a href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186114"&gt;mpd зависает в состоянии umtxn&lt;/a&gt;. Я писал по этому поводу в уже открытый PR, но движухи по нему нет.. Я писал по этому поводу в уже открытый PR, но движухи по нему нет.&lt;/p&gt;
&lt;h3&gt;О проблеме&lt;/h3&gt;
&lt;p&gt;Но речь не об этом. В общем, на фре 9.3 в файрволе pf обнаружился занятный баг. Баг относится к работе NAT на pf. Проявляется так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Клиент шлёт через NAT запрос на какой-то сервер в интернете;&lt;/li&gt;
&lt;li&gt;Сервер ему отвечает;&lt;/li&gt;
&lt;li&gt;Но за время ответа у клиента этот порт, с которого он отправлял свой запрос, почему-то закрылся;&lt;/li&gt;
&lt;li&gt;Клиент примет пакет от сервера и ответит серверу ICMP пакетом с типом &lt;em&gt;port unreachable&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Тут-то и проявляется баг — pf'овский NAT некорректно натит этот ответный ICMP-пакет, и в итоге с внешнего интерфейса улетает ICMP-пакет с серым SRC IP клиента и белым DST IP того сервера, куда этот пакет должен быть доставлен.&lt;/p&gt;
&lt;p&gt;Т. е. допустим, у вас адрес NAT-интерфейса — 1.1.1.1, адрес сервера в интернете 2.2.2.2. И адрес клиента 192.168.0.1. В итоге с ВНЕШНЕГО интерфейса NAT'a улетит пакет с адреса 192.168.0.1 на адрес 2.2.2.2. Т. е. трансляции адреса клиента во внешний адрес NAT (1.1.1.1) не произойдёт.&lt;/p&gt;
&lt;h3&gt;Кровавые подробности&lt;/h3&gt;
&lt;p&gt;Если быть совсем точным, то трансляция ICMP-пакета таки происходит. Но не везде и не до конца :-)&lt;/p&gt;
&lt;h4&gt;Немного теории&lt;/h4&gt;
&lt;p&gt;ICMP-пакеты подразделяются на несколько типов. Причём в каждом типе есть ещё несколько подтипов. В данном случае клиент генерирует пакет типа 3 «destination unreachable». И подтипа тоже 3 — «port unreacable». Подробности можно почитать в man icmp, там есть табличка с типами и подтипами (подтипы называются codes, коды). В пакет типа port unreacahble клиент вкладывает заголовок того пакета, который вызвал генерацию сообщения ICMP «port unrecahable» (назовём для краткости такой пакет «пакетом-инициатором»). Ну, чтобы сервер, получивший от клиента ICMP destination unreachable понимал, на какой конкретно его пакет клиент ответил, что порт недоступен. И вот расследование показало, что как раз этот заголовок, пакета-инициатора транслируется файрволом нормально. Но сам ICMP-пакет — нет.&lt;/p&gt;
&lt;h4&gt;Суровая практическая реальность&lt;/h4&gt;
&lt;p&gt;Итак, мы приняли, что локальный IP клиента у нас 192.168.0.1, а внешний IP, в который NAT'ится клиентский трафик — 1.1.1.1. Таким образом, получается примерно такой формат ICMP-пакета от клиента обратно на сервер 2.2.2.2 (до трансляции):&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок ICMP&lt;/td&gt;
&lt;td&gt;SRC IP: 192.168.0.1&lt;/td&gt;
&lt;td&gt;DST IP: 2.2.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок пакета-инициатора&lt;/td&gt;
&lt;td&gt;SRC IP: 2.2.2.2 port 80&lt;/td&gt;
&lt;td&gt;DST IP: 192.168.0.1 port 12345&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;То есть, клиент со своего адреса 192.168.0.1 оповещает сервер 2.2.2.2, что типа, «бро, ты мне отправил пакет со своего IP 2.2.2.2 и порта 80 на мой адрес 192.168.0.1 и порт 12345. Ну так вот, довожу до твоего сведения, что этот порт у меня закрыт».&lt;/p&gt;
&lt;p&gt;После трансляции через NAT пакет должен модифицироваться следующим образом:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок ICMP&lt;/td&gt;
&lt;td&gt;SRC IP: 1.1.1.1&lt;/td&gt;
&lt;td&gt;DST IP: 2.2.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок пакета-инициатора&lt;/td&gt;
&lt;td&gt;SRC IP: 2.2.2.2 port 80&lt;/td&gt;
&lt;td&gt;DST IP: 1.1.1.1 port 54321&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;То есть, NAT уже от своего имени проговаривает серверу 2.2.2.2: «бро, ты мне отправил пакет со своего IP 2.2.2.2 и порта 80 на мой адрес 1.1.1.1 и порт 54321. Ну так вот, довожу до твоего сведения, что этот порт у меня закрыт».&lt;/p&gt;
&lt;p&gt;Обращаю внимание, что порт на клиентской стороне ДО и ПОСЛЕ трансляции могут отличаться. Т. е. то, что у клиента слушает на порту 12345, на NAT'е будет на порту 54321 (ну, или на любом другой, который будет свободен на момент установки соединения клиентом, и который NAT выберет для трансляции). Ну это так, для сведения, сейчас это роли не играет.&lt;/p&gt;
&lt;p&gt;Так вот, из-за бага в pf пакет транслируется следующим образом:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок ICMP&lt;/td&gt;
&lt;td&gt;SRC IP: 192.168.0.1&lt;/td&gt;
&lt;td&gt;DST IP: 2.2.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Заголовок пакета-инициатора&lt;/td&gt;
&lt;td&gt;SRC IP: 2.2.2.2 port 80&lt;/td&gt;
&lt;td&gt;DST IP: 1.1.1.1 port 54321&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Т. е. NAT в pf транслирует только заголовок пакета-инициатора, идущий нагрузкой в ICMP-пакете типа «destination unreachable», но не транслирует заголовок самого ICMP-пакета.&lt;/p&gt;
&lt;h3&gt;Заключение&lt;/h3&gt;
&lt;p&gt;Написал сообщение в рассылку freebsd-net. Там товарищ Kristof Provost попросил проверить, есть ли такое же поведение в -CURRENT, и если да, то он посмотрит, в чём там проблема. Ну, соберу -CURRENT на досуге, попробую.&lt;/p&gt;
&lt;p&gt;А, кстати, ещё один момент. pf не только некорректно натит такие пакеты, но и также не может блокировать этот трафик. Т. е. правило вида&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;block out quick inet proto icmp from 192.168.0.0/24 to any
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;тоже не работает для таких пакетов. Похоже, pf анализирует только содержащийся в нагрузке заголовок пакета-инициатора, а не самого ICMP-пакета.&lt;/p&gt;
&lt;h3&gt;UPDATE&lt;/h3&gt;
&lt;p&gt;Собрал -CURRENT, проверил. Это поведение полностью повторяется и в -CURRENT. Нарисовал багрепорт по этому поводу, авось когда-нибудь починят. На текущий момент подобный пытающийся улететь наружу трафик блокируется с помощью IPFW.&lt;/p&gt;</description><category>FreeBSD</category><category>Troubleshooting</category><category>Администрирование</category><guid>https://at-hacker.in/posts/bag-v-fayrvole-pf/</guid><pubDate>Wed, 08 Jul 2015 11:25:00 GMT</pubDate></item><item><title>Часовой пояс во FreeBSD</title><link>https://at-hacker.in/posts/chasovoy-poyas-vo-freebsd/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Запилил тут на Амазоне сервер на фре, и возник вопрос — а как выставить часовой пояс? Раньше как-то на этапе установки системы в инсталляторе выставлял, и всё. И поэтому не в курсе, как это физически реализуется. Оказывается, нужно выбрать файл со своим часовым поясом в /usr/share/zoneinfo и скопировать его в /etc. То есть, для Москвы нужно выполнить команду:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;/em&gt;&lt;/p&gt;</description><category>FreeBSD</category><category>Администрирование</category><guid>https://at-hacker.in/posts/chasovoy-poyas-vo-freebsd/</guid><pubDate>Tue, 08 Apr 2014 14:33:00 GMT</pubDate></item><item><title>Как рулить инсталляциями server core</title><link>https://at-hacker.in/posts/kak-rulit-installyaciyami-server-core/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Нашёл мега-полезную &lt;a href="http://blogs.technet.com/b/bruce_adamczak/archive/2013/01/15/2012-core-survival-guide.aspx"&gt;ссылку&lt;/a&gt; про то, как можно жить с server core. Прямо так и называется: «Сore 2012: Руководство по выживанию». Много всяких полезных штук — как настраивать сетку, как просматривать логи и так далее, через powershell. про то, как можно жить с server core. Прямо так и называется: «Сore 2012: Руководство по выживанию». Много всяких полезных штук — как настраивать сетку, как просматривать логи и так далее, через powershell.&lt;/p&gt;</description><category>Windows</category><category>Администрирование</category><category>Скрипты</category><guid>https://at-hacker.in/posts/kak-rulit-installyaciyami-server-core/</guid><pubDate>Mon, 02 Dec 2013 13:18:00 GMT</pubDate></item><item><title>Минимальное ядро и загрузка с ZFS</title><link>https://at-hacker.in/posts/minimalnoe-yadro-i-zagruzka-s-zfs/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Попытался тут оторвать все модули и жёстко впаять необходимое в ядро. Система грузится с ZFS, а также используется AIO для самбы, ибо сильно увеличивает скорость работы самбовых шар. Проверил как-то ради шутки — без AIO гиговый файл копировался 9 минут 10 секунд, с включенным AIO — 1 минуту 45 секунд. Разница примерно 6 раз.&lt;/p&gt;
&lt;p&gt;В общем, пока (на момент версии FreeBSD 9.2) выясняется, что &lt;em&gt;zfs.ko&lt;/em&gt; и  и &lt;em&gt;opensolaris.ko&lt;/em&gt; в ядро не включить, можно только модулями ядра грузить. Добавил в ядро только AIO: в ядро не включить, можно только модулями ядра грузить. Добавил в ядро только AIO:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;options VFS_AIO
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;И прописал в make.conf:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;MODULES_OVERRIDE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;zfs&lt;/span&gt; &lt;span class="n"&gt;opensolaris&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Собрал ядро, установил, попытался перезагрузиться и получил облом. При загрузке система стала утверждать, что не знает, откуда смонтировать root. Оказывается, нужен ещё модуль &lt;em&gt;krpc.ko&lt;/em&gt;, отвечающий за реализацию RPC в солярке (откуда и портирована ZFS). Причём судя по обрывочным сведениям, нужен он только на 64-битной фре, на 32-битной вроде как нет. Проверять, честно говоря, влом :-), отвечающий за реализацию RPC в солярке (откуда и портирована ZFS). Причём судя по обрывочным сведениям, нужен он только на 64-битной фре, на 32-битной вроде как нет. Проверять, честно говоря, влом :-)&lt;/p&gt;
&lt;p&gt;Правим make.conf:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;MODULES_OVERRIDE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;zfs&lt;/span&gt; &lt;span class="n"&gt;opensolaris&lt;/span&gt; &lt;span class="n"&gt;krpc&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Пересобираем ядро, ставим, перезагружаемся — и всё взлетает нормально.&lt;/p&gt;</description><category>FreeBSD</category><category>Tips&amp;Tricks</category><category>Troubleshooting</category><category>Администрирование</category><guid>https://at-hacker.in/posts/minimalnoe-yadro-i-zagruzka-s-zfs/</guid><pubDate>Fri, 22 Nov 2013 14:06:00 GMT</pubDate></item><item><title>Удалённое выполнение команд по ssh</title><link>https://at-hacker.in/posts/udalyonnoe-vypolnenie-komand-po-ssh/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;В свете полученных знаний из ссылок в предыдущем посте решил начать жить по-новому. А именно — бэкапные файлы с фри на фрю складывать не по SMB или FTP, как раньше, а по scp или ssh. Подумал, и решил, что удобнее будет через ssh — туда загоняется поток через pipe, а на удалённой стороне из pipe складывается в локальнный (для удалённого сервера-хранилища бэкапов) файл. Проверил даже скорость — в конкретной сети гиговый файл через SMB скопировался за  1 минуту 48 секунд, а то же самое, но через ssh — за 1 минуту 35 секунд. Профит налицо :-)&lt;/p&gt;
&lt;p&gt;Запустил mcedit и начал ваять. Со скриптом бэкапа системы проблем не возникло:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="c1"&gt;# cat system_backup.sh&lt;/span&gt;
&lt;span class="c1"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="n"&gt;backup_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/backup_operator/backups/os/buhserver-ttr"&lt;/span&gt;
&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/gateway/service/keyfile.ppk"&lt;/span&gt;
&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"backup_operator@backup-ttr"&lt;/span&gt;

&lt;span class="n"&gt;DATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+%&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;.%&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;.%&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;

&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cat &amp;gt; ${backup_dir}/${DATE}_root.dump.gz"&lt;/span&gt;
&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cat &amp;gt; ${backup_dir}/${DATE}_usr.dump.gz"&lt;/span&gt;
&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cat &amp;gt; ${backup_dir}/${DATE}_var.dump.gz"&lt;/span&gt;
&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cat &amp;gt; ${backup_dir}/${DATE}_home.dump."&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;keyfile — это private key для авторизации на удалённом сервере, backup_operator — имя пользователя на том сервере, а backup-ttr — имя самого сервера, где у нас бэкапы хранятся. Получается следующее — dump дампит раздел в stdout, откуда это перегоняется в gzip через pipe, откуда перегоняется вот в эту конструкцию:&lt;/p&gt;
&lt;p&gt;ssh -q -i ${keyfile} ${username} "cat &amp;gt; ${backup_dir}/${DATE}_root.dump.gz"
Т. е. мы подключаемся к серверу backup-ttr, и выполняем там команду "&lt;em&gt;cat &amp;gt; {backup_dir}/${DATE}_root.dump.gz&lt;/em&gt;". Которая читает из stdin сжатый gzip'ом и прокинутый по сети поток и сохраняет его в файл {backup_dir}/${DATE}_root.dump.gz.". Которая читает из stdin сжатый gzip'ом и прокинутый по сети поток и сохраняет его в файл {backup_dir}/${DATE}_root.dump.gz.&lt;/p&gt;
&lt;p&gt;В общем, тут всё просто. А вот с бэкапом почты пришлось повозиться. Было принято решение не просто каждый день сваливать полный бэкап почтовой базы и удалять старые копии, а сделать инкрементный бэкап. А для этого нужно производить определённые манипуляции на стороне хранилища бэкапов. Можно, конечно, сделать второй скрипт, и запускать его по крону на стороне хранилища. Но «Шурик, это же не наш метод!». Это придётся контролировать две точки выполнения одной операции — бэкапа почты, так как задействованы будут два скрипта, два крона, два компа и т. д.&lt;/p&gt;
&lt;p&gt;Суть задачи такова. Допустим, у нас в день 1 выполняется полный бэкап почтовой базы. В день 2 — только то, что изменилось или добавилось со времени исполнения 1-го бэкапа, отработавшего в день 1. В день 3 — только изменения с момента бэкапа в день 2, и так далее до конца недели. Допустим, за первую неделю у нас сделано 7 архивов, с именами, соответственно, mail1.tgz, mail2.tgz, ... mail7.tgz. Где mail1.tgz — это полная копия базы, а остальные — дельты изменений. Неделя закончилась, надо как-то сделать ротацию бэкапов. То есть, куда-то деть эти 7 архивов. Можно их тупо удалить. Но как-то хочется, чтобы у нас хотя бы двухнедельная история бэкапов хранилась. Самое простое — эти архивы переименовать. Например, по схеме mail1.tgz.bak, mail2.tgz.bak и так далее. Тут-то и началось самое интересное.&lt;/p&gt;
&lt;p&gt;Сначала решил сделать как-нибудь так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;for&lt;span class="w"&gt; &lt;/span&gt;i&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;`ssh&lt;span class="w"&gt; &lt;/span&gt;-q&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;"ls&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;backup_dir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/*.gz"`
do
&lt;span class="w"&gt;    &lt;/span&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;-q&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;keyfile&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;"mv&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;.bak"
done
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Но это получается 1 вызов ssh для получения списка файлов, и потом ещё в цикле 7 раз запускается ssh, чтобы переименовать каждый отдельный файл. Касичок кагбэ, неоптимальненко.&lt;/p&gt;
&lt;p&gt;Камрады в интернете посоветовали сделать как-нибудь так:&lt;/p&gt;
&lt;p&gt;ssh -q user@remoteserver 'ls -f /path/*.tgz | while read f; do "$"» };done'
Я попробовал, не прокатило. Полез искать точный синтаксис однострочного оформления циклов в shell. Нашёл несколько примеров, подставил, но ни один не прокатил. Я так понял, что приведённые примеры — в основном для линуксового bash, а у меня фрёвая /bin/sh, поэтому и не прокатывает. Потом нашёл обрывочные сведения, что циклы типа for, foreach, while — «is not single-line friendly». Но коллективный разум мне сурово возразил, что я не прав.&lt;/p&gt;
&lt;p&gt;Копаясь дальше, я обнаружил, что реально, однострочные конструкции типа&lt;/p&gt;
&lt;p&gt;ls | while read f;do echo ${f};done
работают, будучи запущены в /bin/sh и локально. Но не работают удалённо. Потом до меня дошло, что локально-то я запустил /bin/sh, и в ней пускаю все эти конструкции. Но по дефолту у пользователя backup_operator оболочка прописана /bin/csh, и синтаксис там может отличаться.&lt;/p&gt;
&lt;p&gt;Не вопрос, топаем на удалённый сервер и делаем там:&lt;/p&gt;
&lt;p&gt;pw usermod backup_operator -s /bin/sh
Меняем, иными словами, ему оболочку на sh вместо csh. После этого конструкция&lt;/p&gt;
&lt;p&gt;ssh -i keyfile.ppk backup_operator@backup-ttr "ls /home/ | while read f; do echo ${f}; done;"
просто обязана была заработать. Но не заработала... А написала, что &lt;em&gt;f: Undefined variable.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;В процессе дальнейшего общения с коллективным разумом выяснилось следующее:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The shell will expand variables in double-quotes, but not in single-quotes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;что если команду для удалённого исполнения заключать в двойные кавычки, то оболочка подставляет значение переменной вместо имени переменной. А в этой ситуации нужно, чтобы имя переменной передавалось как есть на дальнюю сторону, и значение вычислялось и использовалось уже там. Поэтому эту команду нужно заключать в ОДИНАРНЫЕ кавычки. То есть, вот так:&lt;/p&gt;
&lt;p&gt;ssh -i keyfile.ppk backup_operator@backup-ttr 'ls /home/ | while read f; do echo ${f}; done;'
Но есть и другой путь — просто ставить backslash перед символом переменной. То есть, можно сделать вот так:&lt;/p&gt;
&lt;p&gt;ssh -i keyfile.ppk backup_operator@backup-ttr "ls /home/ | while read f; do echo \${f}; done;'
Мне так пришлось сделать, потому что по итогу потребовалось, чтобы в одной команде были и локальные и удалённые переменные. Т. е. финальная рабочая конструкция выглядит вот так:&lt;/p&gt;
&lt;p&gt;ssh -i keyfile.ppk backup_operator@backup-ttr "cd ${backup_dir}; ls ./ | while read f; do mv \${f} \${f}.bak; done"&lt;/p&gt;</description><category>FreeBSD</category><category>Tips&amp;Tricks</category><category>Администрирование</category><category>Скрипты</category><guid>https://at-hacker.in/posts/udalyonnoe-vypolnenie-komand-po-ssh/</guid><pubDate>Wed, 20 Nov 2013 12:57:00 GMT</pubDate></item><item><title>SSH tips&amp;tricks</title><link>https://at-hacker.in/posts/ssh-tips-tricks/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Обнаружил тут ряд интересных статей про использование ssh и screen. Оказывается, SSH умеет сильно больше, чем я подозревал.&lt;/p&gt;
&lt;p&gt;Про SSH: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://habrahabr.ru/post/122445/"&gt;http://habrahabr.ru/post/122445/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://matt.might.net/articles/ssh-hacks/"&gt;http://matt.might.net/articles/ssh-hacks/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Про screen: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://rus-linux.net/kos.php?name=MyLDP/consol/screen.html"&gt;http://rus-linux.net/kos.php?name=MyLDP/consol/screen.html&lt;/a&gt;&lt;/p&gt;</description><category>FreeBSD</category><category>Tips&amp;Tricks</category><category>Администрирование</category><guid>https://at-hacker.in/posts/ssh-tips-tricks/</guid><pubDate>Tue, 12 Nov 2013 19:24:00 GMT</pubDate></item><item><title>Бьётся файл при передаче по http</title><link>https://at-hacker.in/posts/2012-10-23-1/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;Мерял тут скорость внутри конторских VPN-каналов, путём передачи 100-мегабайтного файла по http, с Apache22 на FreeBSD. Обнаружил необъяснимое — при передаче файла на винду качается кусок файла случайного размера (от 2.5 до 18 мегабайт) и потом передача рвётся. Клиент считает, что файл скачан полностью, в логах апача никаких ошибок. При этом перед началом закачки размер файла определяется правильно.  &lt;/p&gt;
&lt;p&gt;Начал рыть. Включение максимально подробных логов показало, что в момент обрыва передачи появляется запись:  &lt;/p&gt;
&lt;p&gt;[Thu Sep 27 12:31:48 2012] [info] [client 10.0.7.1] (12)Cannot allocate memory: core_output_filter: writing data to the network  &lt;/p&gt;
&lt;p&gt;Беглый поиск привёл на сайт Apache, где нашёлся такой текст:  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*Invalid argument: core_output_filter: writing data to the network&lt;/strong&gt;&lt;br&gt;
Apache uses the sendfile syscall on platforms where it is available in order to speed sending of responses. Unfortunately, on some systems, Apache will detect the presence of sendfile at compile-time, even when it does not work properly. This happens most frequently when using network or other non-standard file-system.Apache uses the sendfile syscall on platforms where it is available in order to speed sending of responses. Unfortunately, on some systems, Apache will detect the presence of sendfile at compile-time, even when it does not work properly. This happens most frequently when using network or other non-standard file-system.  &lt;/p&gt;
&lt;p&gt;Symptoms of this problem include the above message in the error log and zero-length responses to non-zero-sized files. The problem generally occurs only for static files, since dynamic content usually does not make use of sendfile.Symptoms of this problem include the above message in the error log and zero-length responses to non-zero-sized files. The problem generally occurs only for static files, since dynamic content usually does not make use of sendfile.  &lt;/p&gt;
&lt;p&gt;To fix this problem, simply use the EnableSendfile directive to disable sendfile for all or part of your server. Also see the EnableMMAP, which can help with similar problems.To fix this problem, simply use the EnableSendfile directive to disable sendfile for all or part of your server. Also see the EnableMMAP, which can help with similar problems.*  &lt;/p&gt;
&lt;p&gt;Что в переводе означает, что Apache используется системный вызов sendfile на тех платформах, где он доступен, чтобы увеличить скорость ответа клиенту. К сожалению, на некоторых система апач определяет наличие этого вызова во время компиляции (т. е. сборки самого апача) даже если этот вызов в системе реально не работает надлежащим образом. Обычно это происходит при использовании сетевых или иных нестандартных файловых систем. Симптомы этой проблемы включают в себя вышеприведённый текст в логах и нулевой ответ на запрос файлов ненулевой длины. Проблема обычно возникает при передаче статических файлов, динамический контент не использует sendfile. Чтобы решить эту проблему, используйте директиву EnableSendfile, чтобы выключить использование вызова SendFile. Также почитайте про EnableMMAP, которая может помочь при сходных проблемах.  &lt;/p&gt;
&lt;p&gt;Выключил в итоге в конфиге апача EnableSendfile и EnableMMAP. Это помогло, но осадочек остался... Потому как файло лежит на обычном локальном разделе диска. Или UFS считается для апача недостаточно стандартной?&lt;/p&gt;</description><category>Apache</category><category>FreeBSD</category><category>Troubleshooting</category><category>Администрирование</category><guid>https://at-hacker.in/posts/2012-10-23-1/</guid><pubDate>Tue, 23 Oct 2012 16:51:00 GMT</pubDate></item><item><title>Управление Hyper-V из-под обычного пользователя</title><link>https://at-hacker.in/posts/2012-01-13-1/</link><dc:creator>at-hacker</dc:creator><description>&lt;p&gt;&lt;strong&gt;Локальное управление&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;В &lt;a href="http://blogs.technet.com/b/vm/archive/2008/03/26/delegating-control-rights-for-hyper_2d00_v.aspx"&gt;блоге Алексея Кибкало&lt;/a&gt; вычитал полезную штуку — как позволить простому смертному пользователю, не обладающему администраторскими правами, управлять Hyper-V, создавать и запускать виртуальные машины и так далее.  &lt;/p&gt;
&lt;p&gt;Hyper-V может хранить настройки модели авторизации в Active Directory или в локальном файле в формате XML. По умолчанию после установки роли Hyper-V настройки хранятся в файле, который находится по адресу: &lt;em&gt;%programdata%\Microsoft\Windows\Hyper-V\InitialStore.xml&lt;/em&gt;. Для того, чтобы изменить настройки, вам потребуется:- Запустить приложение MMC. (Для этого выберите пункт Run в Start Menu или нажмите комбинацию клавиш 'Windows Key + R', затем выполните mmc.exe).
- В меню File выбрать &lt;em&gt;Add/Remove Snap-in&lt;/em&gt;..
- Добавить &lt;em&gt;Authorization Manager&lt;/em&gt;..
- В дереве консоли (левой панели ) выбрать &lt;em&gt;Authorization Manager&lt;/em&gt;, затем в меню , затем в меню &lt;em&gt;Action&lt;/em&gt; выбрать пункт выбрать пункт &lt;em&gt;Open Authorization Store&lt;/em&gt;..
- Выбрать &lt;em&gt;XML file&lt;/em&gt; в предлагаемом диалоге в предлагаемом диалоге &lt;em&gt;Select the authorization store type:&lt;/em&gt; и открыть файл по указанному выше пути. (Папка %programdata% является скрытой, так что проще будет скопировать путь целиком). и открыть файл по указанному выше пути. (Папка %programdata% является скрытой, так что проще будет скопировать путь целиком).
- Выберите &lt;em&gt;InitialStore.xml&lt;/em&gt;, затем , затем &lt;em&gt;Microsoft Hyper-V services&lt;/em&gt;, далее , далее &lt;em&gt;Role Assignments&lt;/em&gt; и в конце концов и в конце концов &lt;em&gt;Administrator&lt;/em&gt;..
- В меню &lt;em&gt;Action&lt;/em&gt; выберите выберите &lt;em&gt;Assign Users and Groups&lt;/em&gt;, затем , затем &lt;em&gt;From Windows and Active Directory&lt;/em&gt;, далее выберите пользователя, которому хотите делегировать права на управления Hyper-V. Нажмите OK и закройте окно MMC. (При этом можно сохранить или отменить настройки MMC. Это не повлияет на изменения, внесенные вами в модель авторизации)., далее выберите пользователя, которому хотите делегировать права на управления Hyper-V. Нажмите OK и закройте окно MMC. (При этом можно сохранить или отменить настройки MMC. Это не повлияет на изменения, внесенные вами в модель авторизации).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Удалённое управление&lt;/strong&gt;&lt;br&gt;
Как показала практика, это работает для случая, когда Hyper-V управляется локально. Для того, чтобы подключаться к нему удалённо, нужно проделать ещё &lt;a href="http://blogs.technet.com/b/vm/archive/2008/03/26/managing-hyperv-remotely.aspx"&gt;ряд мероприятий&lt;/a&gt;:  &lt;/p&gt;
&lt;p&gt;Описанные в этой статье шаги применимы к версии RC0 гипервизора Hyper-V и RC0 версии клиентской утилиты управления Hyper-V Manager для Vista SP1 (x86 и x64).  &lt;/p&gt;
&lt;p&gt;Итак, на сервере следует выполнить следующие шаги:  &lt;/p&gt;
&lt;p&gt;Разрешить в Windows Firewall правило «Windows Management Instrumentation (WMI)» следующей командой:&lt;br&gt;
netsh advfirewall firewall set rule group=«windows management instrumentation (wmi)» new enable=yes  &lt;/p&gt;
&lt;p&gt;Внимание: в различных локализованных ОС встроенные правила брандмауэера могут назваться по-разному. Необходимо указать название правила именно так, как оно выглядит в инструментах управления Windows Firewall. Например, в русской версии Windows Server 2008 приведенная выше строка будет выглядеть так:  &lt;/p&gt;
&lt;p&gt;netsh advfirewall firewall set rule group=«Инструментарий управления Windows (WMI — входящий трафик)» new enable=yes  &lt;/p&gt;
&lt;p&gt;Предоставить пользователю права на удаленный запуск (remote launch and activation) в DCOM. Это можно сделать как для конкретного пользователя или группы, так и для всех &lt;strong&gt;AUTHENTICATED USERS&lt;/strong&gt;.&lt;br&gt;
Нажмите &lt;strong&gt;Start&lt;/strong&gt;, выберите &lt;strong&gt;Run&lt;/strong&gt;, запустите &lt;strong&gt;dcomcnfg.exe&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;Component Services&lt;/strong&gt; раскройте &lt;strong&gt;Computers&lt;/strong&gt;, правой кнопкой нажмите на &lt;strong&gt;My Computer&lt;/strong&gt; и выберите в меню пункт &lt;strong&gt;Properties&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;My Computer Properties&lt;/strong&gt; раскройте &lt;strong&gt;COM Security&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;Launch and Activation Permissions&lt;/strong&gt; выберите &lt;strong&gt;Edit Limits&lt;/strong&gt;.&lt;br&gt;
В случае, если пользователь не указан в списке &lt;strong&gt;Groups of user names в окне Launch Permission&lt;/strong&gt;, добавьте его кнопкой &lt;strong&gt;Add&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;Launch Permission&lt;/strong&gt; выберите пользователя или группу и в колонке &lt;strong&gt;Allow в Permissions for user&lt;/strong&gt; укажите &lt;strong&gt;Remote Launch и Remote Activation&lt;/strong&gt;. Нажмите &lt;strong&gt;OK&lt;/strong&gt;.&lt;br&gt;
Предоставить пользователю права на удаленное управление (&lt;strong&gt;remote enable) в пространстве имен (&lt;/strong&gt;namespace&lt;strong&gt;) &lt;/strong&gt;root\CIMv2&lt;strong&gt; и &lt;/strong&gt;root\virtualization&lt;strong&gt;. Это можно сделать как для конкретного пользователя или группы, или для AUTHENTICATED USERS.&lt;br&gt;
В &lt;/strong&gt;Control Panel&lt;strong&gt; зайдите в &lt;/strong&gt;Administrative Tools&lt;strong&gt; и запустите &lt;/strong&gt;Computer Management&lt;strong&gt;.&lt;br&gt;
В &lt;/strong&gt;Computer Management&lt;strong&gt; раскройте &lt;/strong&gt;Services and Applications&lt;strong&gt;, правой кнопкой выберите &lt;/strong&gt;WMI Control&lt;strong&gt; и нажмите &lt;/strong&gt;Properties&lt;strong&gt;.&lt;br&gt;
В закладке &lt;/strong&gt;Security&lt;strong&gt; выберите &lt;/strong&gt;Advanced&lt;strong&gt;.&lt;br&gt;
В случае, если пользователь не указан в списке &lt;/strong&gt;Permission&lt;strong&gt; в окне &lt;/strong&gt;Advanced Security Settings&lt;strong&gt;, добавьте его кнопкой &lt;/strong&gt;Add&lt;strong&gt;.&lt;br&gt;
В &lt;/strong&gt;Advanced Security Settings&lt;strong&gt; выберите имя пользователя и нажмите &lt;/strong&gt;Edit&lt;strong&gt;.&lt;br&gt;
В выпадающем меню &lt;/strong&gt;Apply To&lt;strong&gt; окна &lt;/strong&gt;Permission Entry&lt;strong&gt; выберите &lt;/strong&gt;This namespace and subnamespaces&lt;strong&gt; и укажите &lt;/strong&gt;Remote Enable&lt;strong&gt; в колонке &lt;/strong&gt;Allow&lt;strong&gt;. Нажмите &lt;/strong&gt;OK&lt;strong&gt;.&lt;br&gt;
Предоставьте пользователю права на Hyper-V. Эта процедура описана выше.&lt;br&gt;
Перезагрузите сервер. (Если вы хотите избежать перезагрузки сервера, достаточно перезапустить следующие сервисы: &lt;/strong&gt;winmgmt&lt;strong&gt;, &lt;/strong&gt;vmms&lt;strong&gt;, &lt;/strong&gt;vhdsv&lt;strong&gt;c &amp;amp; &lt;/strong&gt;nvspwmi&lt;strong&gt;).&lt;br&gt;
Внимание: если сервер с установленной ролью Hyper-V, которым вы хотите управлять удаленно, используя локальную запись с правами администратора, не входит в домен, и при этом на сервере включен &lt;/strong&gt;User Account Control (UAC)**, то имейте в виду следующее. По умолчанию к локальным учетным записям при неинтерактивном (в том числе сетевом) доступе применяется UAC Filtering. То есть, даже если вы являетесь администратором сервера, при попытке удалённого подключения UAC предоставит вам права стандартного пользователя. Поэтому в таком случае вам потребуется напрямую предоставить пользователю права на Hyper-V способом, описанным в предыдущей статье.  &lt;/p&gt;
&lt;p&gt;Итак, сервер мы настроили. Теперь ряд настроек потребуется выполнить и на клиентском ПК с Vista SP1.  &lt;/p&gt;
&lt;p&gt;Разрешить на Windows Firewall правило «Windows Management Instrumentation (WMI)» командой&lt;br&gt;
netsh advfirewall firewall set rule group=«windows management instrumentation (wmi)» new enable=yes  &lt;/p&gt;
&lt;p&gt;В русской версии Windows Vista эта же команда выглядит следующим образом:  &lt;/p&gt;
&lt;p&gt;netsh advfirewall firewall set rule group=«Инструментарий управления Windows (WMI — входящий трафик)» new enable=yes  &lt;/p&gt;
&lt;p&gt;А на системах с ОС, предшествующими Windows Vista (Windows XP / 2003), для этого служит команда  &lt;/p&gt;
&lt;p&gt;netsh firewall set service RemoteAdmin enable  &lt;/p&gt;
&lt;p&gt;На системах с ОС, предшествующих Vista (Windows XP / 2003), следует также добавить исключение для исполняемого файла Unsecapp.exe:&lt;br&gt;
netsh firewall add allowedprogram program=%windir%\system32\wbem\unsecapp.exe name=UNSECAPP  &lt;/p&gt;
&lt;p&gt;Добавить в Windows Firewall исключение для исполняемого фалйла mmc.exe:&lt;br&gt;
netsh firewall add allowedprogram program=%windir%\system32\mmc.exe name=«Microsoft Management Console»  &lt;/p&gt;
&lt;p&gt;Если клиент или сервер находятся в рабочей группе или они находятся в разных доменах, между которыми нет доверительных отношений, то соединение от сервера до клиента, устанавливаемое для доставки результирующей информации, происходит анонимно. Анонимное соединение завершается неудачно с кодом ошибки 0x80070005 или 0x8007000e до тех пор, пока анонимному соединнеию не будет дано право &lt;strong&gt;Remote Access&lt;/strong&gt; на DCOM клиента. Дать это право можно, выполнив следующие шаги:&lt;br&gt;
Нажмите &lt;strong&gt;Start&lt;/strong&gt;, выберите &lt;strong&gt;Run&lt;/strong&gt;, запустите &lt;strong&gt;dcomcnfg.exe&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;Component Services&lt;/strong&gt; раскройте &lt;strong&gt;Computers&lt;/strong&gt;, правой кнопкой выберите &lt;strong&gt;My Computer&lt;/strong&gt; и укажите &lt;strong&gt;Properties&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;My Computer Properties&lt;/strong&gt; раскройте &lt;strong&gt;COM Security&lt;/strong&gt;.&lt;br&gt;
В &lt;strong&gt;Launch and Activation Permissions&lt;/strong&gt; выберите &lt;strong&gt;Edit Limits&lt;/strong&gt;.&lt;br&gt;
В окне &lt;strong&gt;Access Permissions&lt;/strong&gt; выберите &lt;strong&gt;ANONYMOUS LOGON&lt;/strong&gt; в списке &lt;strong&gt;Group or user names&lt;/strong&gt;. В колонке &lt;strong&gt;Allow&lt;/strong&gt; в &lt;strong&gt;Permissions for User&lt;/strong&gt; укажите &lt;strong&gt;Remote Access&lt;/strong&gt; и нажмите &lt;strong&gt;OK&lt;/strong&gt;.&lt;br&gt;
После выполнения всех описанных действий вы, наконец, получите возможность удаленно подключаться к серверу и управлять ролью Hyper-V.&lt;/p&gt;</description><category>2008</category><category>Hyper-V</category><category>Tips&amp;Tricks</category><category>Windows</category><category>Администрирование</category><guid>https://at-hacker.in/posts/2012-01-13-1/</guid><pubDate>Fri, 13 Jan 2012 13:12:00 GMT</pubDate></item></channel></rss>