Другое

Настройка IPv6 маршрутизации MikroTik-OpenWRT через WireGuard

Решение проблемы с IPv6 маршрутизацией между MikroTik и OpenWRT через WireGuard туннель. Настройка маскарадинга и правил межсетевого экрана для выхода в интернет.

Как настроить маршрутизацию IPv6 между роутером MikroTik (только IPv4) и роутером OpenWRT (IPv4 и IPv6) через WireGuard туннель?

Подробности настройки:

  • На MikroTik настроен только IPv4
  • На OpenWRT есть поддержка IPv4 и IPv6
  • Между роутерами поднят WireGuard туннель
  • IPv4 трафик работает корректно с двусторонней маршрутизацией
  • На интерфейсах WireGuard добавлены IPv6 адреса:
    • MikroTik: fd02:0:0:1::1/64
    • OpenWRT: fd02:0:0:1::2/64
  • Разрешен трафик ::/0, ping6 успешно работает между интерфейсами
  • На MikroTik настроена внутренняя сеть для клиентов: fd03:0:0:1::1/64
  • Прописаны маршруты для IPv6 трафика
  • На MikroTik настроен маскарадинг для трафика в сторону OpenWRT

Проблема:
IPv6 трафик с MikroTik успешно пингует внутреннюю сеть OpenWRT (2001:fd65:4423:0145::/64), но не выходит во внешний интернет. Необходимо определить, где именно блокируется IPv6 трафик на OpenWRT.

Настройка маршрутизации IPv6 между MikroTik и OpenWRT через WireGuard требует правильной конфигурации маскарадинга и правил межсетевого экрана на OpenWRT, а также корректной настройки маршрутизации на MikroTik для направления всего IPv6 трафика через туннель.

Содержание


Анализ текущей конфигурации

Исходя из предоставленных данных, проблема заключается в том, что IPv6 трафик с MikroTik успешно достигает внутренней сети OpenWRT, но не может выйти во внешний интернет. Это указывает на то, что маршрутизация между внутренними сетями работает, но отсутствует правильный механизм преобразования адресов (NAT/masquerading) для выхода в глобальную IPv6 сеть.

Как показывают исследования, MikroTik WireGuard IPv6 имеет особенности работы с IPv6, особенно в версиях RouterOS после 7.1rc4, где могут возникать проблемы с одновременными IPv6 подключениями для пиров WireGuard [источник 1].


Настройка IPv6 маршрутизации на MikroTik

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

1. Добавление маршрутов IPv6

В MikroTik нужно добавить маршрут для всего IPv6 трафика через WireGuard интерфейс:

/ip route add gateway=fd02:0:0:1::2 distance=1
/ip route add gateway=fd02:0:0:1::2 dst-address=2000::/3

2. Настройка маскарадинга

Как указано в исследованиях, необходимо настроить маскарадинг для IPv6 трафика:

/ip firewall nat add action=masquerade chain=srcnat out-interface=WireGuard0 protocol=ipv6

3. Проверка конфигурации

Важно убедиться, что на MikroTik включена поддержка IPv6 и что маршруты корректно добавлены:

/ip route print
/ip firewall nat print

Согласно документации MikroTik, необходимо добавить IPv6 адрес пира в список “Allowed address” и настроить межсетевой экран для разрешения IPv6 трафика.


Конфигурация маскарадинга IPv6 на OpenWRT

На OpenWRT настройка IPv6 маскарадинга имеет свои особенности и требует внимания к деталям:

1. Включение IPv6 маскарадинга

В интерфейсе OpenWRT нужно включить IPv6 маскарадинг для WireGuard интерфейса:

bash
uci set firewall.@zone[2].masq6='1'
uci commit firewall
/etc/init.d/firewall restart

2. Отключение IPv6 source routing

Как показывают исследования из OpenWRT форума, часто требуется отключить опцию “IPv6 source routing”:

bash
uci set network.wan6.ip6source='0'
uci commit network
/etc/init.d/network restart

3. Ручное добавление правил NAT

Если автоматическая настройка не работает, может потребоваться ручное добавление правил:

bash
ip6tables -t nat -I POSTROUTING -s fd02:0:0:1::/64 -o wan -j MASQUERADE

Исследования показывают, что NAT6/masquerading может не работать из-за различных проблем с маршрутизацией и межсетевым экраном.


Правила межсетевого экрана на OpenWRT

Межсетевой экран OpenWRT требует специальной настройки для IPv6 трафика:

1. Разрешение форвардинга IPv6

Убедитесь, что в зоне OpenWRT разрешен форвардинг IPv6:

bash
uci set firewall.@zone[1].forward='accept'
uci set firewall.@zone[1].input='accept'
uci set firewall.@zone[1].output='accept'
uci set firewall.@zone[1].masq6='1'
uci commit firewall

2. Конкретные правила для WireGuard

Добавьте правила для разрешения IPv6 трафика через WireGuard:

bash
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-WireGuard-IPv6'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='wireguard'
uci set firewall.@rule[-1].proto='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall

3. Проверка состояния межсетевого экрана

Проверьте текущие правила межсетевого экрана:

bash
iptables -L -v -n
ip6tables -L -v -n

Как указано в исследованиях, иногда требуется перезапустить межсетевой экран после внесения изменений.


Проверка и диагностика маршрутизации

Для диагностики проблемы с выходом в интернет выполните следующие проверки:

1. Проверка маршрутов на OpenWRT

bash
ip -6 route show
ip -6 route show table main

Убедитесь, что есть маршрут по умолчанию для глобального IPv6 трафика.

2. Тестирование connectivity

Проверьте connectivity с разных точек:

bash
# с MikroTik
ping6 2001:4860:4860::8888

# с OpenWRT
ping6 2001:4860:4860::8888
ping6 fd02:0:0:1::1

3. Анализ пакетов

Используйте tcpdump для анализа трафика:

bash
tcpdump -i WireGuard -n icmp6

Исследования показывают, что проблемы с IPv6 WireGuard часто связаны с неправильной настройкой маршрутизации или межсетевого экрана.


Решение проблем с выходом в интернет

Основная проблема заключается в том, что IPv6 трафик не проходит через NAT/masquerading на OpenWRT. Вот пошаговое решение:

1. Проверка настройки WAN интерфейса

Убедитесь, что WAN интерфейс корректно получает IPv6 адрес от провайдера:

bash
uci show network.wan6
ifconfig | grep -i inet6

2. Настройка DHCPv6-PD

Если ваш провайдер поддерживает DHCPv6-PD, настройте префикс делегации:

bash
uci set network.globals.ula_prefix='fd00::/48'
uci set network.wan6.proto='dhcpv6'
uci set network.wan6.reqaddress='try'
uci set network.wan6.reqprefix='auto'
uci commit network
/etc/init.d/network restart

3. Ручная настройка NAT6

Если автоматическая настройка не работает, используйте ручной скрипт:

bash
#!/bin/sh
# /etc/hotplug.d/iface/99-nat6

[ "$ACTION" = ifup ] || exit 0

[ "$INTERFACE" = wan ] || exit 0

# Wait for IPv6 route
sleep 10

# Add NAT6 rule
ip6tables -t nat -I POSTROUTING -s fd02:0:0:1::/64 -o wan -j MASQUERADE

Как показывают исследования, такие скрипты могут помочь решить проблемы с IPv6 маскарадингом.


Полный пример конфигурации

Вот полный пример конфигурации для решения вашей проблемы:

На MikroTik:

# WireGuard интерфейс
/interface wireguard
add name=WireGuard0 private-key=ВАШ_ПРИВАТНЫЙ_КЛЮЧ

# Добавление пира
/interface wireguard peers
add public-key=ПУБЛИЧНЫЙ_КЛЮЧ_OPENWRT allowed-address=::/0,fd02:0:0:1::2/64

# IPv6 адрес на интерфейсе
/ip address add address=fd02:0:0:1::1/64 interface=WireGuard0

# Маршруты IPv6
/ip route add gateway=fd02:0:0:1::2 distance=1
/ip route add gateway=fd02:0:0:1::2 dst-address=2000::/3

# Маскарадинг
/ip firewall nat add action=masquerade chain=srcnat out-interface=WireGuard0 protocol=ipv6

# Разрешение форвардинга
/ip firewall filter add action=accept chain=forward protocol=ipv6

На OpenWRT:

bash
# Включение IPv6 маскарадинга
uci set firewall.@zone[1].masq6='1'
uci set firewall.@zone[1].forward='accept'

# Отключение IPv6 source routing
uci set network.wan6.ip6source='0'

# Добавление правила для WireGuard
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-WireGuard-IPv6'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='wireguard'
uci set firewall.@rule[-1].proto='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'

uci commit firewall
/etc/init.d/firewall restart

Источники

  1. MikroTik Documentation - WireGuard IPv6
  2. OpenWRT Forum - NAT6/masquerading not working
  3. RIPE Labs - Routing IPv6 Through WireGuard With MikroTik and Debian
  4. OpenWRT IPv6 NAT6 and port-forwarding
  5. OpenWRT Guest Network IPv6 Configuration
  6. Manual NAT6 Script for OpenWRT
  7. WireGuard IPv6 Configuration Experience
  8. MikroTik Forum - Wireguard ipv6 doesnt work

Заключение

  • Основная проблема IPv6 трафика с MikroTik, не выходящего в интернет, заключается в неправильной настройке маскарадинга на OpenWRT
  • Необходимо включить IPv6 маскарадинг в настройках межсетевого экрана OpenWRT и отключить IPv6 source routing
  • Требуется добавить корректные правила маршрутизации для направления всего IPv6 трафика через WireGuard туннель
  • Для диагностики используйте проверки маршрутов и анализ пакетов с помощью tcpdump
  • Если автоматическая настройка не работает, примените ручные скрипты добавления правил NAT6
  • Регулярно проверяйте обновления RouterOS и прошивки OpenWRT, так как поддержка IPv6 в WireGuard постоянно улучшается

Для решения вашей проблемы начните с проверки настроек межсетевого экрана на OpenWRT и добавления правил IPv6 маскарадинга, что должно обеспечить корректный выход IPv6 трафика во внешнюю сеть.

Авторы
Проверено модерацией
Модерация