<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Infrastructure on dedinit()</title><link>https://dedinit.ru/tags/infrastructure/</link><description>Recent content in Infrastructure on dedinit()</description><generator>Hugo -- 0.165.0</generator><language>ru-ru</language><lastBuildDate>Thu, 05 Mar 2026 08:47:16 +0300</lastBuildDate><atom:link href="https://dedinit.ru/tags/infrastructure/index.xml" rel="self" type="application/rss+xml"/><item><title>Запуск wireguard для связи серверов</title><link>https://dedinit.ru/2026/%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-wireguard-%D0%B4%D0%BB%D1%8F-%D1%81%D0%B2%D1%8F%D0%B7%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2/</link><pubDate>Thu, 05 Mar 2026 08:47:16 +0300</pubDate><guid>https://dedinit.ru/2026/%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-wireguard-%D0%B4%D0%BB%D1%8F-%D1%81%D0%B2%D1%8F%D0%B7%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2/</guid><description>&lt;p&gt;Привет, товарищ!&lt;/p&gt;
&lt;p&gt;Сейчас я занимаюсь построением инфраструктуры для своей домашней лаборатории. В планах задействовать три сервера: один локальный машину дома и два VPS от разных провайдеров. Соответственно мне нужно организовать между ними защищенный канал связи для взаимодействия без лишних открытых наружу портов. Открыть порты сервисов наружу не хочется, поэтому лучшим решением стала виртуальная частная сеть на базе WireGuard.&lt;/p&gt;
&lt;p&gt;Я пробовал разные варианты, но пришел к выводу, что лучше всего ставить WireGuard нативно прямо на хост-систему Ubuntu. Вариант с Docker тоже возможен, но он добавляет лишнюю сложность с пробросом портов и правами доступа. Нативная установка работает быстрее, управляется через стандартный systemd и проще интегрируется с фаерволом.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Привет, товарищ!</p>
<p>Сейчас я занимаюсь построением инфраструктуры для своей домашней лаборатории. В планах задействовать три сервера: один локальный машину дома и два VPS от разных провайдеров. Соответственно мне нужно организовать между ними защищенный канал связи для взаимодействия без лишних открытых наружу портов. Открыть порты сервисов наружу не хочется, поэтому лучшим решением стала виртуальная частная сеть на базе WireGuard.</p>
<p>Я пробовал разные варианты, но пришел к выводу, что лучше всего ставить WireGuard нативно прямо на хост-систему Ubuntu. Вариант с Docker тоже возможен, но он добавляет лишнюю сложность с пробросом портов и правами доступа. Нативная установка работает быстрее, управляется через стандартный systemd и проще интегрируется с фаерволом.</p>
<p>Начнем с установки. Это нужно сделать на всех машинах, которые будут участвовать в сети. В терминале выполняем обновление пакетов и установку утилит:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update
</span></span><span style="display:flex;"><span>sudo apt install wireguard wireguard-tools -y
</span></span></code></pre></td></tr></table>
</div>
</div><p>После установки проверим, что модуль ядра загружен командой wg. Если увидели справку или пустой список интерфейсов, значит все прошло успешно.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wg
</span></span></code></pre></td></tr></table>
</div>
</div><p>Следующий шаг - генерация ключей. Это нужно делать локально на каждом сервере. Приватный ключ никогда не должен покидать машину, а публичный мы будем передавать партнерам по сети.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd /etc/wireguard
</span></span><span style="display:flex;"><span>umask <span style="color:#a5d6ff">077</span>
</span></span><span style="display:flex;"><span>wg genkey | tee privatekey | wg pubkey &gt; publickey
</span></span></code></pre></td></tr></table>
</div>
</div><p>Сохраните содержимое файлов privatekey и publickey в надежное место. Для примера в статье я буду использовать заглушки вида PRIVATE_KEY_HERE и PUBLIC_KEY_HERE.</p>
<p>Теперь создадим конфигурацию. Допустим, мы выделили под нашу сеть подсеть 10.8.0.0/24. Серверу с белым IP адресом назначим 10.8.0.1, а клиентам адреса вроде 10.8.0.2 и 10.8.0.3.</p>
<p>На сервере с белым IP создаем файл /etc/wireguard/wg0.conf. В секции Interface указываем его приватный ключ и слушаемый порт. В секции Peer добавляем публичные ключи клиентов.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff7b72">[Interface]</span>
</span></span><span style="display:flex;"><span>PrivateKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">SERVER_PRIVATE_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Address <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.1/24</span>
</span></span><span style="display:flex;"><span>ListenPort <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">51820</span>
</span></span><span style="display:flex;"><span>PostUp <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT</span>
</span></span><span style="display:flex;"><span>PostDown <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT1_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.2/32</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT2_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.3/32</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Обратите внимание на строки PostUp и PostDown. Они нужны для того, чтобы при подъеме интерфейса автоматически применялись правила фаервола, разрешающие пересылку пакетов.</p>
<p>На клиенте, который находится за NAT (например, домашний сервер), конфигурация будет проще. Ему нужно знать публичный ключ сервера и его белый IP адрес.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff7b72">[Interface]</span>
</span></span><span style="display:flex;"><span>PrivateKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT1_PRIVATE_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Address <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.2/24</span>
</span></span><span style="display:flex;"><span>DNS <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">1.1.1.1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">SERVER_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Endpoint <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">203.0.113.10:51820</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.0/24</span>
</span></span><span style="display:flex;"><span>PersistentKeepalive <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">25</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Параметр PersistentKeepalive важен для клиентов за натом. Он отправляет служебные пакеты каждые 25 секунд, чтобы роутер не забывал об открытом соединении.</p>
<p>Прежде чем запускать туннель, нужно подготовить сеть. На сервере обязательно включаем пересылку пакетов (IP Forwarding), иначе трафик не будет ходить между интерфейсами.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;net.ipv4.ip_forward=1&#34;</span> | sudo tee -a /etc/sysctl.conf
</span></span><span style="display:flex;"><span>sudo sysctl -p
</span></span></code></pre></td></tr></table>
</div>
</div><p>Также нужно настроить фаервол. Если у вас активен UFW, откройте порт UDP 51820 и разрешите маршрутизацию для интерфейса wg0.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo ufw allow 51820/udp
</span></span><span style="display:flex;"><span>sudo ufw route allow in on wg0 out on wg0
</span></span><span style="display:flex;"><span>sudo ufw route allow in on wg0 out on eth0
</span></span><span style="display:flex;"><span>sudo ufw route allow in on eth0 out on wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>В командах выше замените eth0 на имя вашего основного сетевого интерфейса.</p>
<p>Теперь самый важный момент, на котором я лично споткнулся. После любого изменения файла конфигурации wg0.conf необходимо перезапускать сервис интерфейса. Правила PostUp выполняются только в момент создания интерфейса. Если вы просто отредактировали файл и забыли перезапустить службу, новые правила фаервола не применятся, и соединения не будет.</p>
<p>Правильный порядок действий после правки конфига выглядит так:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo wg-quick down wg0
</span></span><span style="display:flex;"><span>sudo wg-quick up wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Или через системную службу:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl restart wg-quick@wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Не пренебрегайте этим шагом. Именно отсутствие перезагрузки часто приводит к тому, что интерфейс поднят, ключи верны, но пакеты теряются по пути.</p>
<p>Чтобы сеть поднималась автоматически после перезагрузки сервера, включите службу в автозагрузку:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl enable wg-quick@wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Для диагностики состояния туннеля используйте команду wg show. Запустите ее в режиме мониторинга, чтобы видеть изменения в реальном времени:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n <span style="color:#a5d6ff">1</span> wg show
</span></span></code></pre></td></tr></table>
</div>
</div><p>Смотрите на поле latest handshake. Если время там постоянно обновляется (например, 5 seconds ago, 10 seconds ago), значит соединение активно и пакеты ходят. Если время застыло или указано none, значит пакеты не доходят. Проверьте фаерволы и убедитесь, что порт открыт у провайдера VPS.</p>
<p>Также проверяйте счетчики трафика transfer. Если при пинге счетчик received растет, значит пакеты доходят до интерфейса WireGuard. Если пинга нет, но трафик есть, проблема скорее всего в маршрутизации внутри системы или блокировке ICMP фаерволом.</p>
<p>В итоге вы получите безопасную сеть, где серверы видят друг друга по внутренним IP адресам. Сервисы вроде баз данных можно слушать только на интерфейсе туннеля, и они будут недоступны из внешнего интернета.</p>
<p>Удачи в построении вашей лаборатории!</p>
]]></content:encoded></item></channel></rss>