"Быстрый
<br />
<strong>Proxy ARP на MikroTik через VPN туннель — три рабочих метода:</strong></p>
<ul>
<li><strong>Метод 1 (L3 VPN + proxy-arp):</strong> включить <code>arp=proxy-arp</code> на LAN-bridge обоих роутеров. Роутер отвечает на <a class="wpil_keyword_link" href="https://it-apteka.com/tag/arp/" target="_blank" rel="noopener" title="arp" data-wpil-keyword-link="linked" data-wpil-monitor-id="2721">ARP</a> своим MAC, трафик идёт через туннель. Подходит для WireGuard, L2TP, IPsec.</li>
<li><strong>Метод 2 (EoIP bridge):</strong> создать EoIP-туннель поверх IP-соединения, добавить в bridge с локалкой — получаешь прозрачный L2 сегмент с нативной передачей ARP. Только MikroTik-MikroTik.</li>
<li><strong>Метод 3 (WireGuard + EoIP):</strong> WireGuard как зашифрованный underlay, EoIP поверх него для L2. Самый безопасный вариант для production.</li>
<li><strong>Когда proxy-arp не поможет:</strong> если нужны broadcast-домены <a class="wpil_keyword_link" href="https://it-apteka.com/category/windows-server/" target="_blank" rel="noopener" title="Windows Server" data-wpil-keyword-link="linked" data-wpil-monitor-id="2720">Windows</a> (NetBIOS, mDNS) — только EoIP или VXLAN.</li>
</ul>
<p>
<h2>1. Почему ARP не работает через VPN — диагноз</h2>
<p>Знакомая история: поднял VPN между двумя офисами, маршруты прописаны, ping идёт. Всё отлично. Но <strong>сетевое окружение Windows не видит соседей</strong>, умный TV не находит медиасервер в другой <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="2733">сети</a>, приложение «Пульт ДУ» не обнаруживает телевизор за туннелем. Proxy ARP <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mikrotik/" target="_blank" rel="noopener" title="mikrotik" data-wpil-keyword-link="linked" data-wpil-monitor-id="2719">MikroTik</a> — именно та тема, которая решает эту проблему.</p>
<p>Причина в природе VPN. Любой L3-туннель (WireGuard, L2TP, IPsec, PPTP) — это <strong>соединение точка-точка</strong>. Он передаёт IP-пакеты. ARP — это широковещательный запрос канального уровня (L2), а broadcast в L3-туннель физически не попадает.</p>
<p><a href="https://it-apteka.com/kakoj-vpn-server-ustanovit-na-ubuntu-dlja-nativnogo-podkljuchenija/" title="Настройка IKEv2 VPN сервера на Ubuntu 24.04: StrongSwan без лишних клиентов" target="_blank" rel="noopener" data-wpil-monitor-id="2746">Клиент из сети</a> 192.168.1.0/24 хочет достучаться до 192.168.1.100, который физически находится за VPN у другого роутера. Клиент отправляет ARP broadcast: «кто имеет 192.168.1.100?» Этот пакет разлетается по локальной сети, доходит до роутера — и там умирает. В туннель он не пойдёт. Ответа нет, MAC неизвестен, соединение не устанавливается.</p>
<p>За 25 лет я видел три версии этой проблемы: IT-директор требует «единую сеть» между офисами, разработчики хотят discovery сервисов без <a class="wpil_keyword_link" href="https://it-apteka.com/tag/dns/" target="_blank" rel="noopener" title="DNS" data-wpil-keyword-link="linked" data-wpil-monitor-id="2718">DNS</a>, и вот моя любимая — IoT-устройство которое умеет только ARP discovery и ничего больше. Подход к решению зависит от задачи, поэтому разберём все три метода.</p>
<p><strong>Что получишь в итоге:</strong> ARP-запросы будут проходить через VPN туннель, устройства в разных офисах увидят друг друга на L2, broadcast-сервисы заработают. Время настройки — 15-30 минут.</p>
<p><strong>Что понадобится:</strong></p>
<ul>
<li>Два роутера <a href="https://it-apteka.com/rezervnoe-kopirovanie-mikrotik-routeros-7-v-telegram-avtomatizacija-za-20-minut/" title="Резервное копирование MikroTik RouterOS 7 в Telegram: рабочий скрипт и разбор ошибок" target="_blank" rel="noopener" data-wpil-monitor-id="2712">MikroTik с RouterOS</a> 7.x (методы работают и на 6.x, но синтаксис CLI чуть отличается)</li>
<li>Действующий VPN-туннель между роутерами (WireGuard, L2TP/IPsec, EoIP — разберём все)</li>
<li>Доступ через WinBox или SSH</li>
</ul>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>Значение</th>
</tr>
</thead>
<tbody>
<tr>
<td>RouterOS (рекомендуется)</td>
<td>7.15+ Stable / 7.22.1 (апрель 2026)</td>
</tr>
<tr>
<td>RouterOS (минимум)</td>
<td>6.49 LTS</td>
</tr>
<tr>
<td>WinBox</td>
<td>4.x (или 3.x для ROS 6)</td>
</tr>
<tr>
<td>Оборудование</td>
<td>Любой <a href="https://it-apteka.com/nastrojka-vlan-na-mikrotik-routeros-7-polnyj-gajd-po-bridge-trunk-i-wi-fi/" title="Настройка VLAN на MikroTik RouterOS 7 — полный гайд 2026" target="_blank" rel="noopener" data-wpil-monitor-id="2713">MikroTik с RouterOS</a> (hAP, RB, CCR, CHR)</td>
</tr>
</tbody>
</table>
<p><em>На момент публикации актуальна RouterOS 7.22.1. Перед настройкой проверь свежие релизы на <a href="https://mikrotik.com/download" target="_blank" rel="noopener">mikrotik.com/download</a>.</em></p>
<h2>2. Как работает Proxy ARP в MikroTik — теория за 2 минуты</h2>
<p>ARP (Address Resolution Protocol) — это механизм трансляции IP-адресов в MAC-адреса внутри одного широковещательного домена. Когда хост хочет отправить пакет на IP-адрес, он сначала спрашивает в broadcast: «чей это IP, дай MAC». Обладатель адреса отвечает своим MAC. Дальше всё общение идёт напрямую через Ethernet-фреймы.</p>
<p>Proxy ARP — это когда <strong>роутер сам отвечает на ARP-запросы вместо удалённого хоста</strong>, подставляя свой MAC. Хост думает, что разговаривает с соседом напрямую, а на самом деле пакеты идут через роутер и дальше по туннелю. Роутер при этом знает маршрут к реальному получателю и перенаправляет трафик.</p>
<p>RouterOS поддерживает четыре режима ARP на интерфейсе:</p>
<table>
<thead>
<tr>
<th>Режим</th>
<th>Поведение</th>
<th>Когда использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>enabled</code></td>
<td>Стандартный ARP, записи динамические</td>
<td>По умолчанию, обычная сеть</td>
</tr>
<tr>
<td><code>proxy-arp</code></td>
<td>Роутер отвечает на ARP за хосты из других интерфейсов</td>
<td>VPN-клиенты в той же подсети, что и LAN</td>
</tr>
<tr>
<td><code>local-proxy-arp</code></td>
<td>Proxy ARP только в рамках одного интерфейса</td>
<td>Bridge с изолированными портами, PPPoE</td>
</tr>
<tr>
<td><code>reply-only</code></td>
<td>Отвечает только на <a href="https://it-apteka.com/avtoudalenie-oshibochnyh-arp-zapisej-na-mikrotik/" title="Автоудаление ошибочных ARP записей на mikrotik" target="_blank" rel="noopener" data-wpil-monitor-id="2715">ARP из статических записей</a></td>
<td>Повышенная безопасность, статическая ARP-таблица</td>
</tr>
</tbody>
</table>
<p>Вот тут важно: <code>proxy-arp</code> отвечает на запросы с <em>других</em> интерфейсов, а <code>local-proxy-arp</code> отвечает на запросы, пришедшие с <em>того же</em> интерфейса. Для нашей задачи — проброс через VPN — нужен именно <code>proxy-arp</code>.</p>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
A["Хост A<br/>192.168.1.10"] -->|"ARP: кто 192.168.1.100?"| B["MikroTik R1<br/>proxy-arp"]
B -->|"Я! MAC: R1"| A
B -->|"IP-пакет через VPN"| C["MikroTik R2<br/>proxy-arp"]
C -->|"ARP: кто 192.168.1.100?"| D["Хост B<br/>192.168.1.100"]
D -->|"Ответ MAC"| C
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
</pre>
<h2>3. Метод 1: Proxy-ARP на L3 VPN туннеле (WireGuard, L2TP, IPsec)</h2>
<p>Это самый простой вариант. Работает когда хосты в обоих офисах находятся в <strong>одной IP-подсети</strong> (например, везде 192.168.1.0/24), но физически разделены L3-туннелем. Роутер отвечает на ARP-запросы от имени удалённых хостов.</p>
<p>Ограничение метода: broadcast трафик (NetBIOS, mDNS, DHCP discovery) всё равно не пройдёт. Если нужен полноценный L2 broadcast-домен — смотри Метод 2.</p>
<h3>3.1. Схема сети для примера</h3>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>MikroTik R1 (офис 1)</th>
<th>MikroTik R2 (офис 2)</th>
</tr>
</thead>
<tbody>
<tr>
<td>WAN IP</td>
<td>1.2.3.4</td>
<td>5.6.7.8</td>
</tr>
<tr>
<td>LAN подсеть</td>
<td>192.168.1.0/24</td>
<td>192.168.1.0/24</td>
</tr>
<tr>
<td>LAN интерфейс</td>
<td>bridge-local</td>
<td>bridge-local</td>
</tr>
<tr>
<td>VPN адрес (WireGuard)</td>
<td>10.0.0.1/30</td>
<td>10.0.0.2/30</td>
</tr>
</tbody>
</table>
<h3>3.2. Включение proxy-arp на LAN-интерфейсе</h3>
<p>Выполни на обоих роутерах. Если локальная сеть висит на bridge (обычная история) — ставь proxy-arp именно на bridge, не на физические порты.</p>
"На
<br />
Включаем proxy-arp на интерфейсе, к которому подключена локальная сеть. Подставь своё имя bridge вместо bridge-local.<br />
<pre><code class="language-bash">
# Включить proxy-arp на bridge (LAN-интерфейс)
/interface bridge set bridge-local arp=proxy-arp
# Проверить что применилось
/interface bridge print detail where name=bridge-local
</code></pre>
<p>Через WinBox: Interfaces — Bridge — выбрать свой bridge — вкладка Bridge — поле <a href="https://it-apteka.com/arp-v-mikrotik-tablica-arp-reply-only-proxy-arp-i-reshenie-konfliktov/" title="ARP в MikroTik: таблица ARP, reply-only, proxy-arp и решение конфликтов" target="_blank" rel="noopener" data-wpil-monitor-id="2716">ARP — выбрать proxy-arp</a>.</p>
"Важно:
<br />
Proxy-arp отвечает на ARP-запросы только для тех IP, к которым у роутера есть маршрут. Если маршрут к удалённой сети не прописан — proxy-arp промолчит. Убедись что маршруты между сетями настроены корректно.<br />
<pre><code class="language-bash">
# Проверить таблицу маршрутизации на R1
/ip route print
# Должен быть маршрут к подсети второго офиса через VPN
# Например: 192.168.1.0/24 via 10.0.0.2 (WireGuard peer)
# Добавить маршрут если его нет (для WireGuard)
/ip route add dst-address=192.168.2.0/24 gateway=10.0.0.2
</code></pre>
<h3>3.3. Добавить VPN-адрес в ARP-таблицу (для PPP-туннелей)</h3>
<p>Для WireGuard это не нужно — маршрутизация работает через allowed-address. Для L2TP, PPTP и других PPP-туннелей может потребоваться явная статическая запись.</p>
<pre><code class="language-bash">
# Добавить статическую ARP-запись для удалённого хоста (если нужно)
/ip arp add address=192.168.1.100 mac-address=AA:BB:CC:DD:EE:FF interface=bridge-local
# Посмотреть ARP-таблицу
/ip arp print
</code></pre>
<h2>4. Метод 2: EoIP bridge — настоящий L2 через L3</h2>
<p>EoIP (Ethernet over IP) — проприетарный протокол MikroTik. Инкапсулирует Ethernet-фреймы целиком в GRE (IP protocol 47). Это значит: ARP, NetBIOS, mDNS, DHCP broadcast — всё проходит насквозь как по обычному кабелю. Хосты в двух офисах оказываются в одном broadcast-домене.</p>
<p>Минус один, и он настоящий: EoIP гоняет весь broadcast через интернет-канал. В большой сети это заметно. В офисе на 20-50 человек — терпимо.</p>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Хост A (LAN1)"] --> B["bridge-local R1"]
B --> C["EoIP интерфейс R1"]
C -->|"GRE туннель (IP proto 47)"| D["EoIP интерфейс R2"]
D --> E["bridge-local R2"]
E --> F["Хост B (LAN2)"]
G["ARP broadcast"] --> B
G --> C
G --> D
G --> E
G --> F
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style F fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style G fill:#fef3c7,stroke:#f59e0b,stroke-width:2px,color:#92400e
</pre>
<h3>4.1. Схема сети для EoIP</h3>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>R1 (офис 1)</th>
<th>R2 (офис 2)</th>
</tr>
</thead>
<tbody>
<tr>
<td>WAN IP</td>
<td>1.2.3.4</td>
<td>5.6.7.8</td>
</tr>
<tr>
<td>LAN подсеть (единая)</td>
<td>192.168.33.0/24</td>
<td>192.168.33.0/24</td>
</tr>
<tr>
<td>IP R1 в LAN</td>
<td>192.168.33.1/24</td>
<td>—</td>
</tr>
<tr>
<td>IP R2 в LAN</td>
<td>—</td>
<td>192.168.33.2/24</td>
</tr>
<tr>
<td>EoIP tunnel-id</td>
<td>100</td>
<td>100 (должен совпадать)</td>
</tr>
</tbody>
</table>
<h3>4.2. Настройка EoIP на R1</h3>
<pre><code class="language-bash">
# Создать EoIP-туннель на R1
# remote-address - WAN IP второго роутера
/interface eoip add \
name=eoip-office2 \
remote-address=5.6.7.8 \
tunnel-id=100 \
mtu=1500
# Добавить EoIP в bridge с локальной сетью
# Если bridge уже есть - просто добавь порт
/interface bridge add name=bridge-local arp=enabled
/interface bridge port add \
bridge=bridge-local \
interface=ether1
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office2
# Назначить IP на bridge
/ip address add \
address=192.168.33.1/24 \
interface=bridge-local \
network=192.168.33.0
</code></pre>
<h3>4.3. Настройка EoIP на R2</h3>
<pre><code class="language-bash">
# Создать EoIP-туннель на R2
# remote-address - WAN IP первого роутера
/interface eoip add \
name=eoip-office1 \
remote-address=1.2.3.4 \
tunnel-id=100 \
mtu=1500
# Добавить в bridge
/interface bridge add name=bridge-local arp=enabled
/interface bridge port add \
bridge=bridge-local \
interface=ether1
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office1
# IP на bridge
/ip address add \
address=192.168.33.2/24 \
interface=bridge-local \
network=192.168.33.0
</code></pre>
"MTU:
<br />
EoIP добавляет 42 байта оверхед (8 GRE + 14 Ethernet + 20 IP). Если канал идёт через PPPoE (провайдер), добавляется ещё 8 байт. Итого стандартные 1500 байт в туннеле — это уже фрагментация снаружи. Ставь mtu=1452 для EoIP поверх PPPoE, mtu=1480 для прямого Ethernet.<br />
<pre><code class="language-bash">
# Проверить реальный MTU туннеля
/interface eoip print detail where name=eoip-office2
# Смотри поле actual-mtu
# Установить корректный MTU
/interface eoip set eoip-office2 mtu=1452
</code></pre>
<h2>5. Метод 3: WireGuard + EoIP — шифрование + L2</h2>
<p>Голый EoIP не шифруется. Гонять его по открытому интернету — плохая идея. Правильный production-вариант: WireGuard как зашифрованный L3-транспорт, EoIP поверх него для L2.</p>
<p>Это не overengineering. WireGuard даёт тебе шифрование, аутентификацию и дырку в NAT. EoIP даёт L2-прозрачность. Каждый делает своё дело.</p>
<h3>5.1. Шаг 1: настроить WireGuard туннель</h3>
<pre><code class="language-bash">
# === R1 ===
# Создать WireGuard интерфейс
/interface wireguard add \
name=wg-office \
listen-port=13231 \
mtu=1420
# Показать публичный ключ R1 (скопировать для R2)
/interface wireguard print
# Назначить IP туннелю
/ip address add \
address=10.99.0.1/30 \
interface=wg-office
# Добавить пир R2
# public-key - ключ R2 из /interface wireguard print на R2
/interface wireguard peers add \
interface=wg-office \
public-key="КЛЮЧ_R2_ВСТАВИТЬ_СЮДА=" \
endpoint-address=5.6.7.8 \
endpoint-port=13231 \
allowed-address=10.99.0.2/32 \
persistent-keepalive=25s
</code></pre>
<pre><code class="language-bash">
# === R2 ===
/interface wireguard add \
name=wg-office \
listen-port=13231 \
mtu=1420
/ip address add \
address=10.99.0.2/30 \
interface=wg-office
/interface wireguard peers add \
interface=wg-office \
public-key="КЛЮЧ_R1_ВСТАВИТЬ_СЮДА=" \
endpoint-address=1.2.3.4 \
endpoint-port=13231 \
allowed-address=10.99.0.1/32 \
persistent-keepalive=25s
</code></pre>
<h3>5.2. Шаг 2: EoIP поверх WireGuard</h3>
"EoIP
<br />
В remote-address EoIP туннеля указывай не WAN IP, а IP WireGuard-интерфейса противоположного роутера. Трафик пойдёт через зашифрованный WireGuard, а не напрямую.<br />
<pre><code class="language-bash">
# === R1: EoIP поверх WireGuard ===
# remote-address = IP WireGuard-интерфейса R2
/interface eoip add \
name=eoip-office2 \
local-address=10.99.0.1 \
remote-address=10.99.0.2 \
tunnel-id=100 \
mtu=1400
# MTU=1400: 1420 (WireGuard) - 42 (EoIP overhead) - запас
</code></pre>
<pre><code class="language-bash">
# === R2: EoIP поверх WireGuard ===
/interface eoip add \
name=eoip-office1 \
local-address=10.99.0.2 \
remote-address=10.99.0.1 \
tunnel-id=100 \
mtu=1400
</code></pre>
<h3>5.3. Шаг 3: добавить EoIP в bridge на обоих роутерах</h3>
<pre><code class="language-bash">
# === R1 ===
# Если bridge-local уже есть - только добавить порт
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office2
# === R2 ===
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office1
</code></pre>
<p>После этих шагов WireGuard-пир в allowed-address нужно расширить — добавить LAN-подсеть. Это разрешит прохождение трафика от хостов через WireGuard.</p>
<pre><code class="language-bash">
# === R1: добавить LAN R2 в allowed-address пира ===
/interface wireguard peers set \
[find public-key="КЛЮЧ_R2_ВСТАВИТЬ_СЮДА="] \
allowed-address=10.99.0.2/32,192.168.33.0/24
# === R2: добавить LAN R1 в allowed-address пира ===
/interface wireguard peers set \
[find public-key="КЛЮЧ_R1_ВСТАВИТЬ_СЮДА="] \
allowed-address=10.99.0.1/32,192.168.33.0/24
</code></pre>
<h2>6. Таблица портов и firewall</h2>
<table>
<thead>
<tr>
<th>Протокол</th>
<th>Порт / Proto</th>
<th>Назначение</th>
<th>Открыть снаружи?</th>
</tr>
</thead>
<tbody>
<tr>
<td>WireGuard</td>
<td>UDP 13231</td>
<td>VPN-туннель</td>
<td>Да (на сервере)</td>
</tr>
<tr>
<td>EoIP (GRE)</td>
<td>IP proto 47</td>
<td>L2 туннель</td>
<td>Да (если без WireGuard)</td>
</tr>
<tr>
<td>L2TP</td>
<td>UDP 1701</td>
<td>VPN для PPP</td>
<td>Да</td>
</tr>
<tr>
<td>IPsec IKE</td>
<td>UDP 500, 4500</td>
<td>Согласование ключей</td>
<td>Да</td>
</tr>
</tbody>
</table>
"Firewall:
<br />
Если EoIP идёт напрямую (без WireGuard), на обоих роутерах нужно разрешить входящий GRE от IP партнёра.<br />
<pre><code class="language-bash">
# Разрешить GRE от второго роутера (только если EoIP без WireGuard)
/ip firewall filter add \
chain=input \
protocol=gre \
src-address=5.6.7.8 \
action=accept \
comment="Allow GRE from office2" \
place-before=0
</code></pre>
<h2>7. Проверка — убедись что ARP работает</h2>
<p>Поднял туннель — не верь на слово. Проверяй. Инженеры которые не проверяют — это будущие клиенты 3-часовых ночных инцидентов. Я знаю, о чём говорю.</p>
<h3>7.1. Проверить состояние туннеля</h3>
<pre><code class="language-bash">
# Статус EoIP туннеля (должен быть флаг R - running)
/interface eoip print
# Статус WireGuard (last-handshake не должен быть "never")
/interface wireguard peers print
# ARP-таблица - удалённые хосты должны появиться
/ip arp print
</code></pre>
<h3>7.2. Проверить ARP-трафик через Torch</h3>
<pre><code class="language-bash">
# Запустить Torch на LAN-интерфейсе
# Видим ARP-трафик в реальном времени
/tool torch interface=bridge-local
# Запустить Torch на EoIP/WireGuard интерфейсе
# Проверить что пакеты идут через туннель
/tool torch interface=eoip-office2
</code></pre>
<h3>7.3. Packet Sniffer для детального анализа</h3>
<pre><code class="language-bash">
# Сниффить ARP-пакеты на LAN-интерфейсе
/tool sniffer start interface=bridge-local filter-ip-protocol=arp
# Через несколько секунд остановить и посмотреть
/tool sniffer stop
/tool sniffer packet print
</code></pre>
<h3>7.4. Ping и ARP с хоста</h3>
<pre><code class="language-bash">
# Ping с роутера до хоста в другом офисе
/ping 192.168.33.100 count=4
# ARP-ping (проверка именно ARP-уровня)
/ping 192.168.33.100 arp-ping=yes count=4
# Посмотреть ARP-таблицу после ping
/ip arp print where interface=bridge-local
</code></pre>
<h2>8. Осложнения и что с ними делать</h2>
<h3>Ошибка: EoIP поднялся, но ARP не проходит</h3>
"Причина:
<br />
Частая ошибка — туннель создан, но не добавлен в bridge с локальной сетью. Проверь список портов bridge.<br />
<pre><code class="language-bash">
# Проверить порты bridge
/interface bridge port print
# Должен быть EoIP в том же bridge, что и LAN-порт
# Если нет - добавить
/interface bridge port add bridge=bridge-local interface=eoip-office2
</code></pre>
<h3>Ошибка: proxy-arp включён, но хосты не видят друг друга</h3>
<pre><code class="language-bash">
# Проверить маршрут к удалённой подсети
/ip route print where dst-address~"192.168"
# Проверить ARP-таблицу - есть ли записи с proxy-arp
/ip arp print
# Флаг P в ARP-таблице означает proxy-запись
# Если записей нет - роутер не знает маршрут к этим хостам
</code></pre>
<h3>Ошибка: туннель поднялся, но пинг не идёт — проблема MTU</h3>
<pre><code class="language-bash">
# Тест MTU - пинг с запретом фрагментации
# С роутера
/ping 192.168.33.100 size=1400 do-not-fragment=yes count=2
/ping 192.168.33.100 size=1450 do-not-fragment=yes count=2
/ping 192.168.33.100 size=1480 do-not-fragment=yes count=2
# Если большой пакет не проходит - уменьши MTU EoIP
/interface eoip set eoip-office2 mtu=1400
# Или включи clamp-tcp-mss (автоматическая коррекция MSS)
/interface eoip set eoip-office2 clamp-tcp-mss=yes
</code></pre>
<h3>Ошибка: WireGuard подключился, EoIP не поднимается</h3>
<pre><code class="language-bash">
# Проверить что WireGuard peer жив
/interface wireguard peers print detail
# Смотри last-handshake - должно быть недавнее время
# Проверить что allowed-address разрешает адрес EoIP
# В allowed-address должен быть IP WireGuard-интерфейса партнёра
/interface wireguard peers print where interface=wg-office
# Пинг по IP WireGuard-туннеля
/ping 10.99.0.2 count=4
</code></pre>
<h3>Ошибка: broadcast проходит, но приложение всё равно не находит устройство</h3>
<p>Это не ARP. Скорее всего приложение использует mDNS (порт 5353 UDP multicast 224.0.0.251) или SSDP (1900 UDP multicast 239.255.255.250). Multicast через bridge тоже должен работать, но его могут блокировать firewall-правила.</p>
<pre><code class="language-bash">
# Посмотреть multicast в Torch
/tool torch interface=bridge-local ip-protocol=udp
# Разрешить multicast через firewall если блокируется
/ip firewall filter add \
chain=forward \
dst-address=224.0.0.0/4 \
action=accept \
comment="Allow multicast" \
place-before=0
</code></pre>
<h2>9. Альтернативные решения</h2>
<p>Proxy-arp и EoIP — не единственные варианты. Смотри что ещё есть и почему я выбрал именно эти методы.</p>
<table>
<thead>
<tr>
<th>Метод</th>
<th>Уровень</th>
<th>ARP/broadcast</th>
<th>Шифрование</th>
<th>Только MikroTik?</th>
<th>Сложность</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>proxy-arp</strong></td>
<td>L3</td>
<td>Частично</td>
<td>Зависит от VPN</td>
<td>Нет</td>
<td>Низкая</td>
</tr>
<tr>
<td><strong>EoIP bridge</strong></td>
<td>L2</td>
<td>Полностью</td>
<td>Нет (само)</td>
<td>Да</td>
<td>Средняя</td>
</tr>
<tr>
<td><strong>WireGuard + EoIP</strong></td>
<td>L2</td>
<td>Полностью</td>
<td>Да</td>
<td>Да</td>
<td>Средняя</td>
</tr>
<tr>
<td>OpenVPN tap (L2)</td>
<td>L2</td>
<td>Полностью</td>
<td>Да</td>
<td>Нет</td>
<td>Высокая</td>
</tr>
<tr>
<td>VXLAN</td>
<td>L2 поверх L3</td>
<td>Полностью</td>
<td>Нет (само)</td>
<td>Нет</td>
<td>Высокая</td>
</tr>
<tr>
<td>MPLS L2VPN</td>
<td>L2</td>
<td>Полностью</td>
<td>Нет (само)</td>
<td>Нет</td>
<td>Очень высокая</td>
</tr>
</tbody>
</table>
<p><strong>Почему EoIP а не OpenVPN tap:</strong> OpenVPN в режиме tap (L2) технически возможен на MikroTik, но реализован через user-space, работает медленно и нестабильно. EoIP — ядерный модуль RouterOS, быстрее и надёжнее. Единственный минус — только между MikroTik.</p>
<p><strong>Почему не VXLAN:</strong> VXLAN в RouterOS 7 есть и работает. Но для двух роутеров это оверкилл — больше настроек, нужен понимание VTEP и underlay. EoIP проще и быстрее настраивается для задачи site-to-site.</p>
<h2>10. Профилактика и мониторинг</h2>
<h3>10.1. Автозапуск туннеля</h3>
<p>EoIP поднимается автоматически при старте RouterOS, если не стоит флаг disabled. WireGuard — аналогично. Проверь что интерфейсы не выключены.</p>
<pre><code class="language-bash">
# Проверить что интерфейсы не disabled
/interface print where disabled=yes
# Включить если выключен
/interface enable eoip-office2
/interface enable wg-office
</code></pre>
<h3>10.2. Keepalive для EoIP</h3>
<pre><code class="language-bash">
# Включить keepalive - EoIP будет пинговать партнёра
# и пересоздавать туннель при падении
/interface eoip set eoip-office2 keepalive=10s,10
# 10s - интервал keepalive
# 10 - количество попыток до объявления туннеля упавшим
</code></pre>
<h3>10.3. Мониторинг ARP-таблицы</h3>
<pre><code class="language-bash">
# Посмотреть количество ARP-записей
/ip arp print count-only
# Настроить лимит ARP-записей (защита от ARP flood)
/ip settings set max-neighbor-entries=8192
# Включить логирование ARP-изменений
/ip arp set [find] comment=""
</code></pre>
<h3>10.4. Резервное копирование конфига</h3>
<pre><code class="language-bash">
# Экспортировать конфигурацию (читаемый текст)
/export file=config-backup
# Бэкап включая ключи (бинарный)
/system backup save name=full-backup
# Скачать через FTP или SCP
# scp admin@192.168.33.1:/config-backup.rsc ./
</code></pre>
<h3>10.5. Обновление RouterOS</h3>
<pre><code class="language-bash">
# Проверить текущую версию
/system resource print
# Проверить доступные обновления
/system package update check-for-updates
# Скачать и установить (роутер перезагрузится)
/system package update install
# ВАЖНО: всегда делай backup перед обновлением
# Откатиться можно через /system routerboard upgrade и downgrade-пакет
</code></pre>
<h2>11. FAQ — вопросы которые задают чаще всего</h2>
<h3>Почему proxy ARP не работает после настройки на MikroTik?</h3>
<p>Три самые частые причины. Первая: proxy-arp включён на физическом порту, а не на bridge — ставь на bridge. Вторая: нет маршрута к удалённой сети — роутер не знает, за кого отвечать ARP. Проверь <code>/ip route print</code>. Третья: firewall блокирует ARP или GRE трафик — проверь <code>/ip firewall filter print</code> и правило forward.</p>
<h3>Как проверить что ARP через VPN работает правильно?</h3>
<p>Запусти <code>/ping IP_УДАЛЁННОГО_ХОСТА arp-ping=yes</code> с роутера. Если пинг идёт — ARP работает. Дополнительно: <code>/ip arp print</code> — в таблице должны появиться записи с флагом P (proxy) для адресов из удалённой сети. Через Torch на bridge-интерфейсе видно ARP-трафик в реальном времени.</p>
<h3>Что делать если EoIP туннель поднялся но широковещательный трафик не проходит?</h3>
<p>Проверь что EoIP-интерфейс добавлен в bridge с локальной сетью — это обязательное условие. Без этого туннель работает как L3 и Ethernet-фреймы не передаются. Также проверь MTU: если пакеты фрагментируются, broadcast может теряться. Команда: <code>/interface bridge port print</code>.</p>
<h3>Чем EoIP отличается от proxy-arp для передачи ARP через VPN?</h3>
<p>proxy-arp — это L3 механизм: роутер отвечает на ARP своим MAC, трафик маршрутизируется через туннель. Broadcast всё равно не передаётся, только unicast ARP responses. EoIP — это L2 туннель: весь Ethernet передаётся целиком, включая broadcast-фреймы. Хосты оказываются в одном broadcast-домене, как будто подключены к одному коммутатору через кабель длиной в интернет.</p>
<h3>Работает ли proxy-arp с WireGuard на MikroTik?</h3>
<p>Да, работает. WireGuard — L3 туннель, proxy-arp включается на LAN-интерфейсе (bridge). Роутер будет отвечать на ARP-запросы своим MAC для адресов из WireGuard-пиров. Для полноценного L2 через WireGuard — добавляй EoIP поверх WireGuard и включай EoIP в bridge.</p>
<h3>Можно ли использовать EoIP через IPsec без WireGuard?</h3>
<p>Да. EoIP поддерживает встроенный IPsec-параметр <code>ipsec-secret</code>. Укажи общий ключ — RouterOS автоматически создаст IPsec SA для шифрования GRE-трафика. Это удобнее чем отдельный WireGuard, но менее гибко в настройке. Команда: <code>/interface eoip set eoip-office2 ipsec-secret="твой_пароль"</code>.</p>
<h2>12. Итог</h2>
<p>Разобрали три рабочих способа пробросить <a href="https://it-apteka.com/arp-mikrotik-nastrojka-tablica-proxy-arp-i-reply-only-polnyj-razbor/" title="ARP MikroTik: настройка, таблица, proxy-arp и reply-only — полный разбор" target="_blank" rel="noopener" data-wpil-monitor-id="2714">ARP через VPN туннель на MikroTik</a>. Для большинства задач достаточно proxy-arp на bridge — включается одной командой, работает с любым L3 VPN. Если нужен полноценный L2 с broadcast — EoIP bridge, желательно поверх WireGuard для шифрования.</p>
<p>Производительность EoIP съедает 10-15% канала на broadcast-трафик. В офисе до 50 человек это некритично. Если сеть больше — думай про VXLAN с фильтрацией broadcast или mDNS-репликатор вместо честного L2.</p>
"Не
<br />
Если после настройки что-то не работает — опиши в комментариях: тип VPN, RouterOS версия, что видит /ip arp print и что показывает Torch. Разберёмся.<br />
Быстрый ответ
Proxy ARP на MikroTik через VPN туннель — три рабочих метода:
- Метод 1 (L3 VPN + proxy-arp): включить
arp=proxy-arp на LAN-bridge обоих роутеров. Роутер отвечает на ARP своим MAC, трафик идёт через туннель. Подходит для WireGuard, L2TP, IPsec.
- Метод 2 (EoIP bridge): создать EoIP-туннель поверх IP-соединения, добавить в bridge с локалкой — получаешь прозрачный L2 сегмент с нативной передачей ARP. Только MikroTik-MikroTik.
- Метод 3 (WireGuard + EoIP): WireGuard как зашифрованный underlay, EoIP поверх него для L2. Самый безопасный вариант для production.
- Когда proxy-arp не поможет: если нужны broadcast-домены Windows (NetBIOS, mDNS) — только EoIP или VXLAN.
1. Почему ARP не работает через VPN — диагноз
Знакомая история: поднял VPN между двумя офисами, маршруты прописаны, ping идёт. Всё отлично. Но сетевое окружение Windows не видит соседей, умный TV не находит медиасервер в другой сети, приложение «Пульт ДУ» не обнаруживает телевизор за туннелем. Proxy ARP MikroTik — именно та тема, которая решает эту проблему.
Причина в природе VPN. Любой L3-туннель (WireGuard, L2TP, IPsec, PPTP) — это соединение точка-точка. Он передаёт IP-пакеты. ARP — это широковещательный запрос канального уровня (L2), а broadcast в L3-туннель физически не попадает.
Клиент из сети 192.168.1.0/24 хочет достучаться до 192.168.1.100, который физически находится за VPN у другого роутера. Клиент отправляет ARP broadcast: «кто имеет 192.168.1.100?» Этот пакет разлетается по локальной сети, доходит до роутера — и там умирает. В туннель он не пойдёт. Ответа нет, MAC неизвестен, соединение не устанавливается.
За 25 лет я видел три версии этой проблемы: IT-директор требует «единую сеть» между офисами, разработчики хотят discovery сервисов без DNS, и вот моя любимая — IoT-устройство которое умеет только ARP discovery и ничего больше. Подход к решению зависит от задачи, поэтому разберём все три метода.
Что получишь в итоге: ARP-запросы будут проходить через VPN туннель, устройства в разных офисах увидят друг друга на L2, broadcast-сервисы заработают. Время настройки — 15-30 минут.
Что понадобится:
- Два роутера MikroTik с RouterOS 7.x (методы работают и на 6.x, но синтаксис CLI чуть отличается)
- Действующий VPN-туннель между роутерами (WireGuard, L2TP/IPsec, EoIP — разберём все)
- Доступ через WinBox или SSH
| Параметр |
Значение |
| RouterOS (рекомендуется) |
7.15+ Stable / 7.22.1 (апрель 2026) |
| RouterOS (минимум) |
6.49 LTS |
| WinBox |
4.x (или 3.x для ROS 6) |
| Оборудование |
Любой MikroTik с RouterOS (hAP, RB, CCR, CHR) |
На момент публикации актуальна RouterOS 7.22.1. Перед настройкой проверь свежие релизы на mikrotik.com/download.
2. Как работает Proxy ARP в MikroTik — теория за 2 минуты
ARP (Address Resolution Protocol) — это механизм трансляции IP-адресов в MAC-адреса внутри одного широковещательного домена. Когда хост хочет отправить пакет на IP-адрес, он сначала спрашивает в broadcast: «чей это IP, дай MAC». Обладатель адреса отвечает своим MAC. Дальше всё общение идёт напрямую через Ethernet-фреймы.
Proxy ARP — это когда роутер сам отвечает на ARP-запросы вместо удалённого хоста, подставляя свой MAC. Хост думает, что разговаривает с соседом напрямую, а на самом деле пакеты идут через роутер и дальше по туннелю. Роутер при этом знает маршрут к реальному получателю и перенаправляет трафик.
RouterOS поддерживает четыре режима ARP на интерфейсе:
| Режим |
Поведение |
Когда использовать |
enabled |
Стандартный ARP, записи динамические |
По умолчанию, обычная сеть |
proxy-arp |
Роутер отвечает на ARP за хосты из других интерфейсов |
VPN-клиенты в той же подсети, что и LAN |
local-proxy-arp |
Proxy ARP только в рамках одного интерфейса |
Bridge с изолированными портами, PPPoE |
reply-only |
Отвечает только на ARP из статических записей |
Повышенная безопасность, статическая ARP-таблица |
Вот тут важно: proxy-arp отвечает на запросы с других интерфейсов, а local-proxy-arp отвечает на запросы, пришедшие с того же интерфейса. Для нашей задачи — проброс через VPN — нужен именно proxy-arp.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
A["Хост A
192.168.1.10"] -->|"ARP: кто 192.168.1.100?"| B["MikroTik R1
proxy-arp"]
B -->|"Я! MAC: R1"| A
B -->|"IP-пакет через VPN"| C["MikroTik R2
proxy-arp"]
C -->|"ARP: кто 192.168.1.100?"| D["Хост B
192.168.1.100"]
D -->|"Ответ MAC"| C
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
3. Метод 1: Proxy-ARP на L3 VPN туннеле (WireGuard, L2TP, IPsec)
Это самый простой вариант. Работает когда хосты в обоих офисах находятся в одной IP-подсети (например, везде 192.168.1.0/24), но физически разделены L3-туннелем. Роутер отвечает на ARP-запросы от имени удалённых хостов.
Ограничение метода: broadcast трафик (NetBIOS, mDNS, DHCP discovery) всё равно не пройдёт. Если нужен полноценный L2 broadcast-домен — смотри Метод 2.
3.1. Схема сети для примера
| Параметр |
MikroTik R1 (офис 1) |
MikroTik R2 (офис 2) |
| WAN IP |
1.2.3.4 |
5.6.7.8 |
| LAN подсеть |
192.168.1.0/24 |
192.168.1.0/24 |
| LAN интерфейс |
bridge-local |
bridge-local |
| VPN адрес (WireGuard) |
10.0.0.1/30 |
10.0.0.2/30 |
3.2. Включение proxy-arp на LAN-интерфейсе
Выполни на обоих роутерах. Если локальная сеть висит на bridge (обычная история) — ставь proxy-arp именно на bridge, не на физические порты.
На R1 и R2: включаем proxy-arp на LAN-bridge
Включаем proxy-arp на интерфейсе, к которому подключена локальная сеть. Подставь своё имя bridge вместо bridge-local.
# Включить proxy-arp на bridge (LAN-интерфейс)
/interface bridge set bridge-local arp=proxy-arp
# Проверить что применилось
/interface bridge print detail where name=bridge-local
Через WinBox: Interfaces — Bridge — выбрать свой bridge — вкладка Bridge — поле ARP — выбрать proxy-arp.
Важно: маршруты тоже нужны
Proxy-arp отвечает на ARP-запросы только для тех IP, к которым у роутера есть маршрут. Если маршрут к удалённой сети не прописан — proxy-arp промолчит. Убедись что маршруты между сетями настроены корректно.
# Проверить таблицу маршрутизации на R1
/ip route print
# Должен быть маршрут к подсети второго офиса через VPN
# Например: 192.168.1.0/24 via 10.0.0.2 (WireGuard peer)
# Добавить маршрут если его нет (для WireGuard)
/ip route add dst-address=192.168.2.0/24 gateway=10.0.0.2
3.3. Добавить VPN-адрес в ARP-таблицу (для PPP-туннелей)
Для WireGuard это не нужно — маршрутизация работает через allowed-address. Для L2TP, PPTP и других PPP-туннелей может потребоваться явная статическая запись.
# Добавить статическую ARP-запись для удалённого хоста (если нужно)
/ip arp add address=192.168.1.100 mac-address=AA:BB:CC:DD:EE:FF interface=bridge-local
# Посмотреть ARP-таблицу
/ip arp print
4. Метод 2: EoIP bridge — настоящий L2 через L3
EoIP (Ethernet over IP) — проприетарный протокол MikroTik. Инкапсулирует Ethernet-фреймы целиком в GRE (IP protocol 47). Это значит: ARP, NetBIOS, mDNS, DHCP broadcast — всё проходит насквозь как по обычному кабелю. Хосты в двух офисах оказываются в одном broadcast-домене.
Минус один, и он настоящий: EoIP гоняет весь broadcast через интернет-канал. В большой сети это заметно. В офисе на 20-50 человек — терпимо.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Хост A (LAN1)"] --> B["bridge-local R1"]
B --> C["EoIP интерфейс R1"]
C -->|"GRE туннель (IP proto 47)"| D["EoIP интерфейс R2"]
D --> E["bridge-local R2"]
E --> F["Хост B (LAN2)"]
G["ARP broadcast"] --> B
G --> C
G --> D
G --> E
G --> F
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style F fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style G fill:#fef3c7,stroke:#f59e0b,stroke-width:2px,color:#92400e
4.1. Схема сети для EoIP
| Параметр |
R1 (офис 1) |
R2 (офис 2) |
| WAN IP |
1.2.3.4 |
5.6.7.8 |
| LAN подсеть (единая) |
192.168.33.0/24 |
192.168.33.0/24 |
| IP R1 в LAN |
192.168.33.1/24 |
— |
| IP R2 в LAN |
— |
192.168.33.2/24 |
| EoIP tunnel-id |
100 |
100 (должен совпадать) |
4.2. Настройка EoIP на R1
# Создать EoIP-туннель на R1
# remote-address - WAN IP второго роутера
/interface eoip add \
name=eoip-office2 \
remote-address=5.6.7.8 \
tunnel-id=100 \
mtu=1500
# Добавить EoIP в bridge с локальной сетью
# Если bridge уже есть - просто добавь порт
/interface bridge add name=bridge-local arp=enabled
/interface bridge port add \
bridge=bridge-local \
interface=ether1
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office2
# Назначить IP на bridge
/ip address add \
address=192.168.33.1/24 \
interface=bridge-local \
network=192.168.33.0
4.3. Настройка EoIP на R2
# Создать EoIP-туннель на R2
# remote-address - WAN IP первого роутера
/interface eoip add \
name=eoip-office1 \
remote-address=1.2.3.4 \
tunnel-id=100 \
mtu=1500
# Добавить в bridge
/interface bridge add name=bridge-local arp=enabled
/interface bridge port add \
bridge=bridge-local \
interface=ether1
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office1
# IP на bridge
/ip address add \
address=192.168.33.2/24 \
interface=bridge-local \
network=192.168.33.0
MTU: главная ловушка EoIP
EoIP добавляет 42 байта оверхед (8 GRE + 14 Ethernet + 20 IP). Если канал идёт через PPPoE (провайдер), добавляется ещё 8 байт. Итого стандартные 1500 байт в туннеле — это уже фрагментация снаружи. Ставь mtu=1452 для EoIP поверх PPPoE, mtu=1480 для прямого Ethernet.
# Проверить реальный MTU туннеля
/interface eoip print detail where name=eoip-office2
# Смотри поле actual-mtu
# Установить корректный MTU
/interface eoip set eoip-office2 mtu=1452
5. Метод 3: WireGuard + EoIP — шифрование + L2
Голый EoIP не шифруется. Гонять его по открытому интернету — плохая идея. Правильный production-вариант: WireGuard как зашифрованный L3-транспорт, EoIP поверх него для L2.
Это не overengineering. WireGuard даёт тебе шифрование, аутентификацию и дырку в NAT. EoIP даёт L2-прозрачность. Каждый делает своё дело.
5.1. Шаг 1: настроить WireGuard туннель
# === R1 ===
# Создать WireGuard интерфейс
/interface wireguard add \
name=wg-office \
listen-port=13231 \
mtu=1420
# Показать публичный ключ R1 (скопировать для R2)
/interface wireguard print
# Назначить IP туннелю
/ip address add \
address=10.99.0.1/30 \
interface=wg-office
# Добавить пир R2
# public-key - ключ R2 из /interface wireguard print на R2
/interface wireguard peers add \
interface=wg-office \
public-key="КЛЮЧ_R2_ВСТАВИТЬ_СЮДА=" \
endpoint-address=5.6.7.8 \
endpoint-port=13231 \
allowed-address=10.99.0.2/32 \
persistent-keepalive=25s
# === R2 ===
/interface wireguard add \
name=wg-office \
listen-port=13231 \
mtu=1420
/ip address add \
address=10.99.0.2/30 \
interface=wg-office
/interface wireguard peers add \
interface=wg-office \
public-key="КЛЮЧ_R1_ВСТАВИТЬ_СЮДА=" \
endpoint-address=1.2.3.4 \
endpoint-port=13231 \
allowed-address=10.99.0.1/32 \
persistent-keepalive=25s
5.2. Шаг 2: EoIP поверх WireGuard
EoIP поверх WireGuard: адреса туннеля
В remote-address EoIP туннеля указывай не WAN IP, а IP WireGuard-интерфейса противоположного роутера. Трафик пойдёт через зашифрованный WireGuard, а не напрямую.
# === R1: EoIP поверх WireGuard ===
# remote-address = IP WireGuard-интерфейса R2
/interface eoip add \
name=eoip-office2 \
local-address=10.99.0.1 \
remote-address=10.99.0.2 \
tunnel-id=100 \
mtu=1400
# MTU=1400: 1420 (WireGuard) - 42 (EoIP overhead) - запас
# === R2: EoIP поверх WireGuard ===
/interface eoip add \
name=eoip-office1 \
local-address=10.99.0.2 \
remote-address=10.99.0.1 \
tunnel-id=100 \
mtu=1400
5.3. Шаг 3: добавить EoIP в bridge на обоих роутерах
# === R1 ===
# Если bridge-local уже есть - только добавить порт
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office2
# === R2 ===
/interface bridge port add \
bridge=bridge-local \
interface=eoip-office1
После этих шагов WireGuard-пир в allowed-address нужно расширить — добавить LAN-подсеть. Это разрешит прохождение трафика от хостов через WireGuard.
# === R1: добавить LAN R2 в allowed-address пира ===
/interface wireguard peers set \
[find public-key="КЛЮЧ_R2_ВСТАВИТЬ_СЮДА="] \
allowed-address=10.99.0.2/32,192.168.33.0/24
# === R2: добавить LAN R1 в allowed-address пира ===
/interface wireguard peers set \
[find public-key="КЛЮЧ_R1_ВСТАВИТЬ_СЮДА="] \
allowed-address=10.99.0.1/32,192.168.33.0/24
6. Таблица портов и firewall
| Протокол |
Порт / Proto |
Назначение |
Открыть снаружи? |
| WireGuard |
UDP 13231 |
VPN-туннель |
Да (на сервере) |
| EoIP (GRE) |
IP proto 47 |
L2 туннель |
Да (если без WireGuard) |
| L2TP |
UDP 1701 |
VPN для PPP |
Да |
| IPsec IKE |
UDP 500, 4500 |
Согласование ключей |
Да |
Firewall: открыть GRE для EoIP без WireGuard
Если EoIP идёт напрямую (без WireGuard), на обоих роутерах нужно разрешить входящий GRE от IP партнёра.
# Разрешить GRE от второго роутера (только если EoIP без WireGuard)
/ip firewall filter add \
chain=input \
protocol=gre \
src-address=5.6.7.8 \
action=accept \
comment="Allow GRE from office2" \
place-before=0
7. Проверка — убедись что ARP работает
Поднял туннель — не верь на слово. Проверяй. Инженеры которые не проверяют — это будущие клиенты 3-часовых ночных инцидентов. Я знаю, о чём говорю.
7.1. Проверить состояние туннеля
# Статус EoIP туннеля (должен быть флаг R - running)
/interface eoip print
# Статус WireGuard (last-handshake не должен быть "never")
/interface wireguard peers print
# ARP-таблица - удалённые хосты должны появиться
/ip arp print
7.2. Проверить ARP-трафик через Torch
# Запустить Torch на LAN-интерфейсе
# Видим ARP-трафик в реальном времени
/tool torch interface=bridge-local
# Запустить Torch на EoIP/WireGuard интерфейсе
# Проверить что пакеты идут через туннель
/tool torch interface=eoip-office2
7.3. Packet Sniffer для детального анализа
# Сниффить ARP-пакеты на LAN-интерфейсе
/tool sniffer start interface=bridge-local filter-ip-protocol=arp
# Через несколько секунд остановить и посмотреть
/tool sniffer stop
/tool sniffer packet print
7.4. Ping и ARP с хоста
# Ping с роутера до хоста в другом офисе
/ping 192.168.33.100 count=4
# ARP-ping (проверка именно ARP-уровня)
/ping 192.168.33.100 arp-ping=yes count=4
# Посмотреть ARP-таблицу после ping
/ip arp print where interface=bridge-local
8. Осложнения и что с ними делать
Ошибка: EoIP поднялся, но ARP не проходит
Причина: EoIP не добавлен в bridge
Частая ошибка — туннель создан, но не добавлен в bridge с локальной сетью. Проверь список портов bridge.
# Проверить порты bridge
/interface bridge port print
# Должен быть EoIP в том же bridge, что и LAN-порт
# Если нет - добавить
/interface bridge port add bridge=bridge-local interface=eoip-office2
Ошибка: proxy-arp включён, но хосты не видят друг друга
# Проверить маршрут к удалённой подсети
/ip route print where dst-address~"192.168"
# Проверить ARP-таблицу - есть ли записи с proxy-arp
/ip arp print
# Флаг P в ARP-таблице означает proxy-запись
# Если записей нет - роутер не знает маршрут к этим хостам
Ошибка: туннель поднялся, но пинг не идёт — проблема MTU
# Тест MTU - пинг с запретом фрагментации
# С роутера
/ping 192.168.33.100 size=1400 do-not-fragment=yes count=2
/ping 192.168.33.100 size=1450 do-not-fragment=yes count=2
/ping 192.168.33.100 size=1480 do-not-fragment=yes count=2
# Если большой пакет не проходит - уменьши MTU EoIP
/interface eoip set eoip-office2 mtu=1400
# Или включи clamp-tcp-mss (автоматическая коррекция MSS)
/interface eoip set eoip-office2 clamp-tcp-mss=yes
Ошибка: WireGuard подключился, EoIP не поднимается
# Проверить что WireGuard peer жив
/interface wireguard peers print detail
# Смотри last-handshake - должно быть недавнее время
# Проверить что allowed-address разрешает адрес EoIP
# В allowed-address должен быть IP WireGuard-интерфейса партнёра
/interface wireguard peers print where interface=wg-office
# Пинг по IP WireGuard-туннеля
/ping 10.99.0.2 count=4
Ошибка: broadcast проходит, но приложение всё равно не находит устройство
Это не ARP. Скорее всего приложение использует mDNS (порт 5353 UDP multicast 224.0.0.251) или SSDP (1900 UDP multicast 239.255.255.250). Multicast через bridge тоже должен работать, но его могут блокировать firewall-правила.
# Посмотреть multicast в Torch
/tool torch interface=bridge-local ip-protocol=udp
# Разрешить multicast через firewall если блокируется
/ip firewall filter add \
chain=forward \
dst-address=224.0.0.0/4 \
action=accept \
comment="Allow multicast" \
place-before=0
9. Альтернативные решения
Proxy-arp и EoIP — не единственные варианты. Смотри что ещё есть и почему я выбрал именно эти методы.
| Метод |
Уровень |
ARP/broadcast |
Шифрование |
Только MikroTik? |
Сложность |
| proxy-arp |
L3 |
Частично |
Зависит от VPN |
Нет |
Низкая |
| EoIP bridge |
L2 |
Полностью |
Нет (само) |
Да |
Средняя |
| WireGuard + EoIP |
L2 |
Полностью |
Да |
Да |
Средняя |
| OpenVPN tap (L2) |
L2 |
Полностью |
Да |
Нет |
Высокая |
| VXLAN |
L2 поверх L3 |
Полностью |
Нет (само) |
Нет |
Высокая |
| MPLS L2VPN |
L2 |
Полностью |
Нет (само) |
Нет |
Очень высокая |
Почему EoIP а не OpenVPN tap: OpenVPN в режиме tap (L2) технически возможен на MikroTik, но реализован через user-space, работает медленно и нестабильно. EoIP — ядерный модуль RouterOS, быстрее и надёжнее. Единственный минус — только между MikroTik.
Почему не VXLAN: VXLAN в RouterOS 7 есть и работает. Но для двух роутеров это оверкилл — больше настроек, нужен понимание VTEP и underlay. EoIP проще и быстрее настраивается для задачи site-to-site.
10. Профилактика и мониторинг
10.1. Автозапуск туннеля
EoIP поднимается автоматически при старте RouterOS, если не стоит флаг disabled. WireGuard — аналогично. Проверь что интерфейсы не выключены.
# Проверить что интерфейсы не disabled
/interface print where disabled=yes
# Включить если выключен
/interface enable eoip-office2
/interface enable wg-office
10.2. Keepalive для EoIP
# Включить keepalive - EoIP будет пинговать партнёра
# и пересоздавать туннель при падении
/interface eoip set eoip-office2 keepalive=10s,10
# 10s - интервал keepalive
# 10 - количество попыток до объявления туннеля упавшим
10.3. Мониторинг ARP-таблицы
# Посмотреть количество ARP-записей
/ip arp print count-only
# Настроить лимит ARP-записей (защита от ARP flood)
/ip settings set max-neighbor-entries=8192
# Включить логирование ARP-изменений
/ip arp set [find] comment=""
10.4. Резервное копирование конфига
# Экспортировать конфигурацию (читаемый текст)
/export file=config-backup
# Бэкап включая ключи (бинарный)
/system backup save name=full-backup
# Скачать через FTP или SCP
# scp admin@192.168.33.1:/config-backup.rsc ./
10.5. Обновление RouterOS
# Проверить текущую версию
/system resource print
# Проверить доступные обновления
/system package update check-for-updates
# Скачать и установить (роутер перезагрузится)
/system package update install
# ВАЖНО: всегда делай backup перед обновлением
# Откатиться можно через /system routerboard upgrade и downgrade-пакет
11. FAQ — вопросы которые задают чаще всего
Почему proxy ARP не работает после настройки на MikroTik?
Три самые частые причины. Первая: proxy-arp включён на физическом порту, а не на bridge — ставь на bridge. Вторая: нет маршрута к удалённой сети — роутер не знает, за кого отвечать ARP. Проверь /ip route print. Третья: firewall блокирует ARP или GRE трафик — проверь /ip firewall filter print и правило forward.
Как проверить что ARP через VPN работает правильно?
Запусти /ping IP_УДАЛЁННОГО_ХОСТА arp-ping=yes с роутера. Если пинг идёт — ARP работает. Дополнительно: /ip arp print — в таблице должны появиться записи с флагом P (proxy) для адресов из удалённой сети. Через Torch на bridge-интерфейсе видно ARP-трафик в реальном времени.
Что делать если EoIP туннель поднялся но широковещательный трафик не проходит?
Проверь что EoIP-интерфейс добавлен в bridge с локальной сетью — это обязательное условие. Без этого туннель работает как L3 и Ethernet-фреймы не передаются. Также проверь MTU: если пакеты фрагментируются, broadcast может теряться. Команда: /interface bridge port print.
Чем EoIP отличается от proxy-arp для передачи ARP через VPN?
proxy-arp — это L3 механизм: роутер отвечает на ARP своим MAC, трафик маршрутизируется через туннель. Broadcast всё равно не передаётся, только unicast ARP responses. EoIP — это L2 туннель: весь Ethernet передаётся целиком, включая broadcast-фреймы. Хосты оказываются в одном broadcast-домене, как будто подключены к одному коммутатору через кабель длиной в интернет.
Работает ли proxy-arp с WireGuard на MikroTik?
Да, работает. WireGuard — L3 туннель, proxy-arp включается на LAN-интерфейсе (bridge). Роутер будет отвечать на ARP-запросы своим MAC для адресов из WireGuard-пиров. Для полноценного L2 через WireGuard — добавляй EoIP поверх WireGuard и включай EoIP в bridge.
Можно ли использовать EoIP через IPsec без WireGuard?
Да. EoIP поддерживает встроенный IPsec-параметр ipsec-secret. Укажи общий ключ — RouterOS автоматически создаст IPsec SA для шифрования GRE-трафика. Это удобнее чем отдельный WireGuard, но менее гибко в настройке. Команда: /interface eoip set eoip-office2 ipsec-secret="твой_пароль".
12. Итог
Разобрали три рабочих способа пробросить ARP через VPN туннель на MikroTik. Для большинства задач достаточно proxy-arp на bridge — включается одной командой, работает с любым L3 VPN. Если нужен полноценный L2 с broadcast — EoIP bridge, желательно поверх WireGuard для шифрования.
Производительность EoIP съедает 10-15% канала на broadcast-трафик. В офисе до 50 человек это некритично. Если сеть больше — думай про VXLAN с фильтрацией broadcast или mDNS-репликатор вместо честного L2.
Не заработало? Пиши в комментарии
Если после настройки что-то не работает — опиши в комментариях: тип VPN, RouterOS версия, что видит /ip arp print и что показывает Torch. Разберёмся.