<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Софт on DevOps, Productivity, Career // etogeek blog</title>
    <link>https://etogeek.dev/tags/%D1%81%D0%BE%D1%84%D1%82/</link>
    <description>Recent content in Софт on DevOps, Productivity, Career // etogeek blog</description>
    <generator>Hugo</generator>
    <language>ru</language>
    <lastBuildDate>Thu, 30 Mar 2023 18:30:12 +0000</lastBuildDate>
    <atom:link href="https://etogeek.dev/tags/%D1%81%D0%BE%D1%84%D1%82/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Сканер открытых портов в Raycast</title>
      <link>https://etogeek.dev/posts/raycast-open-ports-scanner/</link>
      <pubDate>Thu, 30 Mar 2023 18:30:12 +0000</pubDate>
      <guid>https://etogeek.dev/posts/raycast-open-ports-scanner/</guid>
      <description>&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/feature.jpg&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;В этой статьей я покажу, как можно добавить свой скрипт в Raycast на примере проверки открытых портов на серверах.&lt;/p&gt;&#xA;&lt;p&gt;Я очень часто пользуюсь сервисами для проверки открытых портов на серверах, чтобы быстро понять закрыт ли у меня определенный порт на сервере или нет. Для этого в закладках держал вот этот сайт &lt;a href=&#34;https://www.yougetsignal.com/tools/open-ports/&#34;   target=&#34;_blank&#34;&gt;&#xA;    https://www.yougetsignal.com/tools/open-ports/&lt;/a&gt; (один из многих, на которых можно проверять порты)&lt;/p&gt;&#xA;&lt;p&gt;Не так давно &lt;a href=&#34;https://t.me/etogeek/156&#34;   target=&#34;_blank&#34;&gt;&#xA;    писал про Raycast&lt;/a&gt; как замену для Alfred, и про то, что я довольно быстро разобрался как добавить свой скрипт в быстрый запуск. Собственно, даже упоминал этот скрипт в том посте, но хочу рассказать чуть подробнее.&lt;/p&gt;&#xA;&lt;p&gt;В общем, так как мне нравится &lt;a href=&#34;https://www.yougetsignal.com/tools/open-ports/&#34;   target=&#34;_blank&#34;&gt;&#xA;    тот&lt;/a&gt; сайт, я посмотрел через «консоль разработчика» какой запрос делается в момент нажатия на кнопку Check.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Создаем скрипт &#xA;    &lt;div id=&#34;%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Оставалось только немного поэкспериментировать с параметрами curl запроса и получился такой:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s -X POST https://ports.yougetsignal.com/check-port.php&lt;span class=&#34;se&#34;&gt;\?&lt;/span&gt;remoteAddress&lt;span class=&#34;se&#34;&gt;\=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;amp;&lt;/span&gt;portNumber&lt;span class=&#34;se&#34;&gt;\=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$1&lt;/code&gt; и &lt;code&gt;$2&lt;/code&gt; это аргументы, которые были переданы .sh скрипту при запуске (например &lt;code&gt;scripts.sh foo bar&lt;/code&gt;. &lt;code&gt;$1 = foo&lt;/code&gt;, &lt;code&gt;$2 = bar&lt;/code&gt; и так далее. &lt;code&gt;$0&lt;/code&gt; это всегда название файла)&lt;/p&gt;&#xA;&lt;p&gt;Нам остается только «выцепить» Open или Closed из ответа. Делаю через &lt;code&gt;grep -o &amp;quot;Open\|Closed&amp;quot;&lt;/code&gt;. Параметр &lt;code&gt;-o&lt;/code&gt; выведет только ту строку, которая матчится с регуляркой, а у нас там «или Open или Closed».&lt;/p&gt;&#xA;&lt;p&gt;Объединяю две команды (&lt;code&gt;curl&lt;/code&gt; и &lt;code&gt;grep&lt;/code&gt;)  через пайп (символ &lt;code&gt;|&lt;/code&gt;). Пайп (&lt;em&gt;pipeline&lt;/em&gt;) переводит &lt;strong&gt;стандартный вывод&lt;/strong&gt; (&lt;em&gt;stdout&lt;/em&gt;) первой команды на &lt;strong&gt;стандартный ввод&lt;/strong&gt; (&lt;em&gt;stdin&lt;/em&gt;) второй.&lt;/p&gt;&#xA;&lt;p&gt;Добавляем эту команду в наш &lt;code&gt;.sh&lt;/code&gt; файл, не забывая &lt;a href=&#34;https://ru.wikipedia.org/wiki/%d0%a8%d0%b5%d0%b1%d0%b0%d0%bd%d0%b3_%28Unix%29&#34;   target=&#34;_blank&#34;&gt;&#xA;    шебанг&lt;/a&gt;  &lt;code&gt;#!/bin/bash&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Добавляем скрипт в Raycast &#xA;    &lt;div id=&#34;%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82-%D0%B2-raycast&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82-%D0%B2-raycast&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Но, что сделать, чтобы Raycast «увидел» наш скрипт?&lt;/p&gt;&#xA;&lt;p&gt;Нужно добавить некоторую мета-информацию — &lt;strong&gt;название&lt;/strong&gt;, &lt;strong&gt;поля для интерактивного ввода&lt;/strong&gt;, &lt;strong&gt;документацию&lt;/strong&gt;&amp;hellip; Внимательнее можно посмотреть на нее в &lt;a href=&#34;https://github.com/etoosamoe/raycast-scripts/blob/master/check-open-port.sh&#34;   target=&#34;_blank&#34;&gt;&#xA;    моем скрипте&lt;/a&gt;, должно быть все понятно. Или в официальных &lt;a href=&#34;https://www.raycast.com/blog/getting-started-with-script-commands&#34;   target=&#34;_blank&#34;&gt;&#xA;    примерах&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/image-4.png&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Затем заходим в &lt;strong&gt;настройки Raycast&lt;/strong&gt; (&lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;,&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Открываем вкладку &lt;strong&gt;Extensions&lt;/strong&gt;, ищем там пункт &lt;strong&gt;Script Command&lt;/strong&gt; (&lt;em&gt;через поиск почему-то не находится&lt;/em&gt;) и нажимаем на него. Справа будет &lt;strong&gt;Add directories&lt;/strong&gt;, в ней и добавляем директорию с нашим скриптом.&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/raycast1.jpg&#34;&#xA;        alt=&#34;dsadsa&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/raycast2.jpg&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Сразу вешаем на него какой-нибудь короткий &lt;strong&gt;Alias&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/image-5.png&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Если добавить новые скрипты в эту директорию, то они автоматически появятся в Raycast. Максимум — нужно будет запустить команду &lt;strong&gt;Reload Script Directories&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Теперь пробуем запустить:&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/raycast-open-ports-scanner/image-6.png&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Единственное с чем я не заморачивался — это цвет «лампочки» внизу — он базируется на коде ответа скрипта, поэтому всегда зеленый, если curl был успешен.&lt;/p&gt;&#xA;&lt;p&gt;Как видишь, добавить свой скрипт в Raycast совсем не сложно. Главное, чтобы была фантазия.&lt;/p&gt;&#xA;&lt;p&gt;Ты можешь скачать мой репозиторий со скриптами и добавить его по инструкции из README. Вот ссылка 👉 &lt;a href=&#34;https://github.com/etoosamoe/raycast-scripts&#34;   target=&#34;_blank&#34;&gt;&#xA;    https://github.com/etoosamoe/raycast-scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;А подписавшись на &lt;a href=&#34;https://t.me/etogeek&#34;   target=&#34;_blank&#34;&gt;&#xA;    мой телеграм-канал&lt;/a&gt; ты точно не пропустишь новые статьи и интересности из интернета ✌️&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Split DNS в MacOS, OpenVPN и Tunnelblick</title>
      <link>https://etogeek.dev/posts/split-dns-macos-openvpn-tunnelblick/</link>
      <pubDate>Wed, 29 Mar 2023 08:34:18 +0000</pubDate>
      <guid>https://etogeek.dev/posts/split-dns-macos-openvpn-tunnelblick/</guid>
      <description>&#xA;  &#xA;&#xA;&#xA;&#xA;&lt;div&#xA;  &#xA;    class=&#34;flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900&#34;&#xA;  &gt;&#xA;&#xA;  &lt;span&#xA;    &#xA;      class=&#34;text-primary-400 ltr:pr-3 rtl:pl-3 flex items-center&#34;&#xA;    &gt;&#xA;&#xA;    &#xA;&#xA;  &lt;span class=&#34;relative block icon&#34;&gt;&#xA;    &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path fill=&#34;currentColor&#34; d=&#34;M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z&#34;/&gt;&lt;/svg&gt;&#xA;&#xA;  &lt;/span&gt;&#xA;&#xA;&#xA;  &lt;/span&gt;&#xA;&#xA;  &lt;span&#xA;    &#xA;      class=&#34;dark:text-neutral-300&#34;&#xA;    &gt;В этой статье речь идет исключительно о настройке доступа к внутреннему рабочему защищенному сетевому контуру инфрастркутуры.&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;В этой статье я покажу как можно настроить &lt;strong&gt;Split DNS в MacOS&lt;/strong&gt;, и как изменить конфигурацию &lt;strong&gt;Tunnelblick&lt;/strong&gt;, чтобы &lt;strong&gt;автоматически включать Split DNS при подключении к OpenVPN серверу&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Split DNS&lt;/strong&gt; — это возможность отправлять DNS запросы для определенной зоны на определенные DNS серверы.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;👉 Пример использования, с которым столкнулся я &#xA;    &lt;div id=&#34;-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%81-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%BC-%D1%81%D1%82%D0%BE%D0%BB%D0%BA%D0%BD%D1%83%D0%BB%D1%81%D1%8F-%D1%8F&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%81-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%BC-%D1%81%D1%82%D0%BE%D0%BB%D0%BA%D0%BD%D1%83%D0%BB%D1%81%D1%8F-%D1%8F&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Есть OpenVPN сервер и есть DNS серверы во внутреннем сетевом контуре, которые обслуживают две доменные зоны &lt;code&gt;foobar.com&lt;/code&gt; и &lt;code&gt;.bar&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Зона &lt;code&gt;foobar.com&lt;/code&gt; обслуживается как внутренними DNS-серверами, так и внешними (Cloudflare). Это сделано, чтобы иметь “внутри” приватные DNS записи, но с “реальными” доменными именами.&lt;/p&gt;&#xA;&lt;p&gt;Мы хотим при подключении VPN начинать использовать внутренние  DNS, а при отключении возвращаться обратно. Но мы не хотим при подключенном VPN отправлять все DNS запросы на внутренние серверы.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;❗ Изменение настроек OpenVPN сервера &#xA;    &lt;div id=&#34;-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA-openvpn-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA-openvpn-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Так как мы будем управлять «раздачей» DNS серверов с помощью Tunnelblick, то нам нужно убрать (убедиться, что этого нет) push DNS серверов из конфигурации OpenVPN сервера.&lt;/p&gt;&#xA;&lt;p&gt;За это отвечают следующие инструкции в конфигурации, проверяем, что их нет:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@server01.bar /home/admin &lt;span class=&#34;c1&#34;&gt;# cat /etc/openvpn/openvpn.conf | grep dhcp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;push &lt;span class=&#34;s2&#34;&gt;&amp;#34;dhcp-option DNS 35.36.37.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;push &lt;span class=&#34;s2&#34;&gt;&amp;#34;dhcp-option DNS 35.36.37.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;push &lt;span class=&#34;s2&#34;&gt;&amp;#34;dhcp-option DOMAIN bar&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;🌐 Настройка resolvers в MacOS &#xA;    &lt;div id=&#34;-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-resolvers-%D0%B2-macos&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-resolvers-%D0%B2-macos&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Введя команду &lt;code&gt;scutil --dns&lt;/code&gt; мы можем увидеть список текущих резолверов:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ scutil --dns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;resolver &lt;span class=&#34;c1&#34;&gt;#1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  nameserver&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; : 192.168.31.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  if_index : &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;en0&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  flags    : Request A records&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  reach    : 0x00020002 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Reachable,Directly Reachable Address&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это основной текущий резолвер, которой отправляет все DNS запросы на один DNS сервер (мой маршрутизатор).&lt;/p&gt;&#xA;&lt;p&gt;Мы можем насоздавать своих резолверов путем создания файла &lt;code&gt;/etc/resolver/foobar.com&lt;/code&gt;, с точным именем доменной зоны и адресами DNS серверов внутри:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ cat /etc/resolver/foobar.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nameserver 35.36.37.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nameserver 35.36.37.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Снова проверяем резолверы. Теперь все DNS запросы для этой зоны пойдут на внутренние серверы, а остальные — как и было раньше через основной резолвер:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ scutil --dns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;resolver &lt;span class=&#34;c1&#34;&gt;#8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  domain   : foobar.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  nameserver&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; : 35.36.37.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  nameserver&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; : 35.36.37.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  flags    : Request A records&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  reach    : 0x00000002 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Reachable&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;🌀 Настройка Tunnelblick &#xA;    &lt;div id=&#34;-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-tunnelblick&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-tunnelblick&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Чтобы добавлять резолверы автоматически при подключении VPN и удалять при отключении, нам нужно добавить скрипты в конфигурацию Tunnelblick.&lt;/p&gt;&#xA;&lt;p&gt;🔹 Создаем отдельную директорию &lt;code&gt;mkdir vpn&lt;/code&gt;, а в ней файл скрипта, который будет запускаться при подключении VPN&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nano connected.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/bash -e&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /etc/resolver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF &amp;gt; /etc/resolver/foobar.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;nameserver 35.36.37.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;nameserver 35.36.37.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF &amp;gt; /etc/resolver/bar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;nameserver 35.36.37.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;nameserver 35.36.37.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;🔹 Создаем скрипт, который будет запускаться при отключении VPN &lt;code&gt;nano post-disconnect.sh&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm /etc/resolver/foobar.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm /etc/resolver/bar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Эти скрипты будут запускаться от пользователя root, если не указано обратное в конфигурации. Документация по скриптам &lt;a href=&#34;https://tunnelblick.net/cUsingScripts.html&#34;   target=&#34;_blank&#34;&gt;&#xA;    есть на оф. сайте&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🔹 Добавляем в директорию файл с &lt;code&gt;.ovpn&lt;/code&gt; конфигурацией. Предполагается, что мы ее уже имеем.&lt;/p&gt;&#xA;&lt;p&gt;🔹 Делаем скрипты исполняемыми:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;chmod +x connected.sh post-disconnect.sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;🔹 Переименовываем, а точнее добавляем к названию директории расширение &lt;code&gt;.tblk&lt;/code&gt;. У нас получается файл &lt;code&gt;vpn.tblk&lt;/code&gt;, на который можно нажать правым кликом и посмотреть содержимое &lt;strong&gt;Show Package Contents&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🔹 Перетаскиваем файл &lt;code&gt;vpn.tblk&lt;/code&gt; мышкой на иконку Tunnelblick в Menu Bar (наверху). Таким образом мы добавляем новую конфигурацию в Tunnelblick. Разработчики обращают внимание именно на этот способ — им виднее.&lt;/p&gt;&#xA;&lt;p&gt;🔹 Подтверждаем несколько раз, что готовы к вероятности наличия &lt;a href=&#34;https://ru.wikipedia.org/wiki/Fork-%D0%B1%D0%BE%D0%BC%D0%B1%D0%B0&#34;   target=&#34;_blank&#34;&gt;&#xA;    fork-бомбы&lt;/a&gt; или &lt;code&gt;rm -rf&lt;/code&gt; в скриптах, и пробуем подключиться. После успешного подключения проверяем наличие новых резолверов, а так же успешные ping до внутренних DNS.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Важно: проверка DNS записи через &lt;code&gt;dig&lt;/code&gt; выдаст ошибку NXDOMAIN, потому что &lt;code&gt;dig&lt;/code&gt; использует другой механизм резолва адресов.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;🙌 Дополнительно &#xA;    &lt;div id=&#34;-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;&#xA;        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;&#xA;            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE&#34; aria-label=&#34;Якорь&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;        &#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Обычно я в настройках Tunnelblick-а дополнительно включаю перезапуск сетевых интерфейсов, для большей стабильности работы интернета при засыпании ноутбука и отключениях VPN:&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;  &#xA;  &#xA;    &lt;figure&gt;&#xA;      &#xA;      &lt;img&#xA;        class=&#34;my-0 rounded-md&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        src=&#34;https://etogeek.dev/posts/split-dns-macos-openvpn-tunnelblick/image-3.png&#34;&#xA;        alt=&#34;&#34;&#xA;      /&gt;&#xA;      &#xA;      &#xA;    &lt;/figure&gt;&#xA;  &#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;На этом всё 🤝 Если тебе понравилась статья, рекомендую подписаться на телеграм-канал, где анонсятся все новые статьи, а так же выходят интересные посты. Ссылка ниже:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://t.me/etogeek&#34;   target=&#34;_blank&#34;&gt;&#xA;    @etogeek&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Перенос git репозитория</title>
      <link>https://etogeek.dev/posts/transfer-git-repo/</link>
      <pubDate>Thu, 18 Aug 2022 06:55:30 +0000</pubDate>
      <guid>https://etogeek.dev/posts/transfer-git-repo/</guid>
      <description>&lt;p&gt;Небольшой набор команд для переноса одного git репозитория в другой. Я, например, пользовался при переносе из Github в Gitlab.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --bare git@git.test.com:my-repo-a.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-repo-a.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add new-origin git@git.test.com:my-repo-b.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push --mirror new-origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote rm origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote rename new-origin origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Давай разберем команды:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git clone --bare&lt;/code&gt; — клонируем не сам репозиторий, а директорию .git&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git fetch origin&lt;/code&gt; — убеждаемся, что у нас все изменения присутствуют&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git remote add&lt;/code&gt; — добавляем новый remote репозиторий&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git push --mirror new-origin&lt;/code&gt; — загружаем весь наш репозиторий в новый. mirror передает все refs — тэги, бранчи&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git remote rm&lt;/code&gt; — удаляем старый origin локально&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git remote rename&lt;/code&gt; — переименовываем new-origin в origin, чтобы было проще работать&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Комментарии можно оставить в уютном чате 👉 &lt;a href=&#34;https://t.me/etogeekchat&#34;   target=&#34;_blank&#34;&gt;&#xA;    https://t.me/etogeekchat&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;А больше гайдов и новостей выходит в канале 👉 &lt;a href=&#34;https://t.me/etogeek&#34;   target=&#34;_blank&#34;&gt;&#xA;    https://t.me/etogeek&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>