Собственно есть сервер, на котором стоит wireguard. Есть 3 аплинка. В таблице маршрутизации следующее:
default
nexthop dev eth1 weight 1
nexthop dev eth2 weight 1
nexthop dev ppp0 weight 1
и есть несколько клиентов. И тут возникает проблема при подключении «клиентов» к «серверу». Если условный клиент1 подключается к «серверу» через интерфейс eth1, то ответ на рукопожатие может уйти через eth2 или ppp0. И наоборот. То есть wireguard случайным образом выбирает интерфейс для ответа на рукопожатие. Канал в итоге не поднимается. Маркировка и добавление правил в таблицу маршрутизации в зависимости от метки не работают. Не работают именно с wireguard, с другими сервисами нет проблем. У того же openvpn есть схожая проблема, которая решается добавлением параметра multihomed. Тут подобного нет. Нашел на гитхабе issue в openwrt с такой же проблемой, но там обсуждение заглохло с прошлого года. Неужели нельзя заставить работать wireguard корректно и отправлять ответный пакет на хендшейк с того же интерфейса? Только начал переводить клиентов с опенвпн на wireguard, и тут такой облом.
Есть запасной вариант с использованием namespace/docker-wireguard. При такой схеме проблем нет. Оно и понятно, там wireguard не видит сами шлюзы хоста, а через шлюз контейнера отправляет. Но он мне не подходит, так как без нат сложно все там настроить. Мне не только клиенты на видеть, но и сети за ними. Тоже самое с клиентами, они должны видеть сеть на «сервером». И сильно хочу избежать использование NAT.