Mikrotik: весь трафик устройства через WireGuard VPN

К началу данной инструкции предполагается, что у вас уже настроен VPN на Mikrotik. В данной статье разобрано, только как завернуть трафик с определенных ip адресов в vpn тоннель, на примере Wireguard.

Настройка

  1. В настройках Wireguard, убедитесь, что у пира allowed-address содержит 0.0.0.0/0:

    1
    2
    
    /interface/wireguard/peers/
    edit number=0 allowed-address

    Проверьте и при необходимости укажите правильный номер пира (number=0)

  2. Создаем отдельную таблицу маршрутизации wg-mark: Она будет использоваться для маршрутизации трафика через WireGuard.

    1
    2
    
    /routing/table/
    add disabled=no fib name=wg-mark
  3. Добавляем IP-адрес устройства в адрес-лист full-wg: Устройства из этого списка будут перенаправляться в VPN тоннель.

    1
    2
    
    /ip/firewall/address-list/
    add list=full-wg address=192.168.10.124/32

    Укажите IP-адрес нужного устройства (192.168.10.124 в примере)

  4. Добавляем правило в Mangle для назначения метки маршрутизации wg-mark трафику с адресов из full-wg:

    1
    2
    
    /ip/firewall/mangle/
    add chain=prerouting src-address-list=full-wg action=mark-routing new-routing-mark=wg-mark passthrough=no
  5. Создаем маршрут по умолчанию через интерфейс wg0 в таблице wg-mark:

    1
    2
    
    /ip/route/
    add dst-address=0.0.0.0/0 gateway=wg0 distance=1 routing-table=wg-mark
  6. Устанавливаем расстояние до маршрута через основной интернет больше, чем у WireGuard: Так для трафика в wg-mark приоритет будет выше именно через интерфейс wg0, но для остального трафика ничего не изменится.

    1
    2
    
    /ip/dhcp-client/
    set ether1 default-route-distance=2

    Если у вас уже были какие-то дополнительные маршруты, то дистанции у вас могут оличаться. Проследите за правильным приоритетом.

  7. Добавляем masquerade для трафика, выходящего через VPN:

    1
    2
    
    /ip/firewall/nat/
    add chain=srcnat out-interface=wg0 action=masquerade
  8. Добавляем правило изменения MSS (Maximum Segment Size), чтобы избежать проблем с фрагментацией TCP-пакетов:

    1
    2
    
    /ip/firewall/mangle/
    add action=change-mss chain=forward new-mss=clamp-to-pmtu out-interface=wg0  protocol=tcp tcp-flags=syn

Источники