LINUX.ORG.RU
решено ФорумAdmin

openvpn прокси или как скопировать маршруты одного соединения в другое

 


0

1
           _______________________________
          |                               | 
клиент1 ---openvpn - наш_сервер - openvpn - сумрачный_сервер
клиент2 --/ server                 client
          |_______________________________|

Суть такова, что есть сумрачный_сервер (чужой), к нему наш_сервер коннектится как opnevpn-клиент. На наш_сервере поднят opnevpn-сервер к которому цепляются юзеры. Всё настроено так чтобы трафик от клиентов шел к сумрачный_сервер. И работает, но для одного маршрута, а их там несколько сотен.

Вопрос: как вычислить все маршруты конкретного соединения и перенести их другому? Дальше там детали вида поменять их шлюз скриптами на наш_сервер, но это фигня.

ответ:

ip route show dev tun1

и

--client-connect cmd

Deleted

Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

ну тогда форкнуть openvpn и запилить нужную функциональность копирования маршрутов от клиента через сервер к другим клиентам! :)

Harald ★★★★★
()

ну или динамическую маршрутизацию поднять и гонять внутри VPN, RIP, OSPF, BGP - вот эти вот все страшные слова

Harald ★★★★★
()

Решение (добавляется как --client-connect скрипт):

внямание, могут быть баги! потому юзать на свой страх и риск

#!/bin/bash

# take last arg of script, see `--client-connect cmd` in openvpn manpage
CONFIG=${@: -1}
if [[ -z "$CONFIG" ]]; then
    exit
fi
# clear config
echo -n > $CONFIG
# list added routes
# NOTE! if you change 'show' arguments it affect command output,
#       and may require change parser code!
ROUTES=$(ip route show dev tun1|grep -Po '[\d\.]{8,}/\d+')
cdr2mask ()
{
   # see https://stackoverflow.com/questions/20762575/ for explanation how it works
   set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
   [ $1 -gt 1 ] && shift $1 || shift
   echo ${1-0}.${2-0}.${3-0}.${4-0}
}

for ROUTE in $ROUTES; do
    IP=${ROUTE%/*}
    NET=$(cdr2mask ${ROUTE#*/})
    echo "push \"route $IP $NET\"" >> $CONFIG
done
Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.