Схема сети:
сервер-1 сервер-2 сервер-3
eth0 tun0 --tinc-- tun0 tun1 ---fastd--- tun1 eth0
На сервере-1 приходится делать маркировку пакета на основе GID (и запускается все как sg xxx firefox например), потом через ip-rule он роутится на айпишник tun1 у сервера-3. И на выходе из tun0 приходится делать SNAT с адресом tun0.
На сервере-2 приходится добавлять два ip-route правила: для роутинга всго связанного с tun0 собственно в tun0 (как было бы без второго правила идущего следом) и второе правило – роутинг всего на адрес tun1 у сервера-3.
На сервере-3 делается SNAT на выходе в инет.
В чём вопрос. Больно сложный/запутанный набор правил для ip-route, еще iptables. Можно ли как-то проще? Можно ли посадить сеть tinc и сеть fastd как-то в одну подсеть? Одна плоская сеть более удобна, чем две подсети. Можно ли обойтись без ip-route? Кажется нет (нужен source-based routing).
Увы но заменить tinc на fastd или fastd на tinc не представляется возможным. Кажется можно порты tinc посредством iptables пробросить на tun1 адрес сервера-3 и там запустить еще один tinc, траффик которого будет бегать внутри tun1.
Но вообще хотелось бы, чтоб на сервере-1 можно было выбирать, траффик пойдет через инет, через сервер-2 или через сервер-3. И кажется сделать это можно только используя раздельные подсети. И опять ip-route. :-/