2015-01-23

Ассиметричный роутинг

Есть локальный роутер "mine". Обеспечивает выход по ADSL до "интернета".
Есть внешний VPS сервер "sam". На ооочень жирном канале.
Есть "внутренний" VPN сервер в сети прова "bridge" - до которого трафик бесплатен - а с него уже практически бесплатен наружу - но канал чуток мелковат.

Схема подключений по впн:
mine --> bridge --> sam
   \------(<$$$)--------^

В обратном направлении от sam к mine трафик Сильно Платный - остальные каналы бесплатны в любых направлениях.

В первом приближении захотелось чтобы то, чтобы mine->sam шло "прямо" а обратно по пути sam->bridge->mine. Поддержание туннеля vpn идёт через udp на порт ХХХ, ip-адрес sam: SAM.

Sam знает роутинг до "внутренних" адресов сети mine через br.

Неплохие ссылки с картинкой по iptables:
http://www.iptables.info/en/structure-of-iptables.html
http://www.iptables.info/files/tables_traverse.jpg

Итак, правила роутинга:

ip -4 rule add from SAM fwmark 8/8 table 8
ip -4 rule add to   SAM fwmark 8/8 table 8
ip -4 route add default dev ppp0 table 8

("нормальный" дефолтный роутинг идёт через br/tap0)

iptables -A PREROUTING -t mangle -s SAM -p udp --sport XXX -j MARK --set-mark 8/8
iptables -A OUTPUT -t mangle -d SAM -p udp --dport XXX -j MARK --set-mark 8/8

А, ну и чтобы не было проблем с "марсианами" - делаем:

for i in /proc/sys/net/ipv4/conf/tap*/rp_filter;do echo 0 | sudo tee $i;echo $i;done