Настройка MikroTik для связи двух удаленных сетей. Имеет хорошую производительность, даже hAP lite может выдать около 40 Мбит/сек. на TCP трафике.
Преимущества:
- Работает в Kernel Space и как следствие высокая производительность;
- Хорошо проходит NAT, достаточно белого IP-адреса с одной стороны туннеля;
- Хорошо проходит firewall т.к. можно задать для прослушивания любой udp-порт;
- Современная криптография, небольшая кодовая база порядка 3771 LoC;
- Прост в настройке, аутентификация похожа на ssh с использованием публичных и приватных ключей;
- Кросплатформенный, имеются клиенты для всех современных мобильных и десктопных ОС;
Недостатки:
- Работает только поверх L3 и поэтому нет возможности передать через WG L2;
- Нет аппаратного разгрузки шифрования;
- Ручное планирование сети, нет возможности задать пул для автоматической раздачи IP-адресов клиентам.
Адресация:
- R1: ISP - white_public_ip, LAN - 172.16.5.0/24, VPN - 172.16.255.17/29
- R2: ISP - grey_ip за NAT, LAN - 172.17.5.0/27, VPN - 172.16.255.18/29
- Mobile: ISP - grey_ip за NAT, LAN - -, VPN - 172.16.255.19/29
Настройка Interface: R1,R2
Чтобы разрешить автоматическую генерацию "private" и "public" ключей. "Приватный" ключ нужен - для локального устройства, "публичный" - для удаленного.
- listen-port: Порт для службы WireGuard для прослушивания входящих соединений;
/interface/wireguard/
add listen-port=13231 name=wireguard1
- Теперь можно вывести информацию о сгенерированных private и public ключах;
/interface/wireguard/print
Настройка Peer:
Определяет кто может использовать интерфейс WG и какой трафик можно через него отправлять. Для идентификации удаленного узла необходимо указать его открытый ключ вместе с созданным интерфейсом WG. Чтобы был пинг между VPN-интерфейсами, в "allowed-address" также указываем их адреса.
- endpoint-address: Конечный адрес или имя узла с которого разрешено удаленное подключение. Если не установлено, то разрешено с любого адреса.
- endpoint-port: Порт конечного узла можно оставить пустым, чтобы разрешить удаленное подключение с любого порта.
- allowed-address: На выход - работает как таблица маршрутизации, на вход - как фильтр. Список IPv4/6 адресов с масками CIDR с которых разрешен входящий трафик для данного узла и на который направлен исходящий трафик для этого узла. Для сопоставления всех адресов можно указать: для IPv4 0.0.0.0/0, для IPv6 ::/0.
- persistent-keepalive: Интервал в секундах от 1 до 65535 указывающий как часто следует отправлять пиру пустой пакет с аутентификацией для поддержания уже установленного соединения. Необходимо указывать, когда удаленная сторона находится за NAT.
- R1:
/interface/wireguard/peers/
add interface=wireguard1 public-key="R2" allowed-address=172.17.5.0/27,172.16.255.18/32
- R2:
/interface/wireguard/peers/
add interface=wireguard1 public-key="R1" endpoint-address=white_public_ip endpoint-port=13231 allowed-address=172.16.5.0/24,172.16.255.17/32 persistent-keepalive=00:00:25
QR-Code:
Особенность! Работает только в CLI. Для подключения мобильных устройств по QR-Коду, необходимо, чтобы автоматически сгенерировался "Private Key", который автоматически добавляется в "Client Config".
/interface/wireguard/peers/add interface=wireguard1 private-key=auto allowed-address=172.16.255.19/32
Настройка адресации и маршрутизации:
В "gateway" можно указать как адрес шлюза, так и сам интерфейс.
- R1:
/ip/address/
add interface=wireguard1 address=172.16.255.17/29
/ip/route/
add dst-address=172.17.5.0/27 gateway=172.16.255.18
- R2:
/ip/address/
add interface=wireguard1 address=172.16.255.18/29
/ip/route/
add dst-address=172.16.5.0/24 gateway=172.16.255.17
Настройка Firefall:
Необходимо на R1 разрешить INPUT трафик на порт udp:13231 и in. Interface - ISP, а также, на R1,R2 разрешить FORWARD между сетями LAN.
Заметки:
- Интерфейс можно привязать как к отдельному пользователю (пиру), так и к группе пользователей;
- Когда создается второй интерфейс, то один и тот же порт мы использовать не можем;
- Ключи генерируются в base64. Публичный ключ создается на базе приватного ключа;