Как пустить часть трафика через VPN?

Возник вопрос, хочу настроить сторонний или свой VPN так что-бы заходить на российские сайты без VPN
а на зарубежные или заблокированные ресурсы чтобы соединение шло через VPN. Грубо говоря не хочется постоянно держать VPN включеным а чтобы он включался когда провайдер не пускает на сайт. Есть такие решения ? или в какую сторону копать. Спасибо.
  • Вопрос задан
  • 22236 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Есть два подхода. В обоих случаях тебе нужен список заблокированных IP, его можно взять на антизапрете, например.
Дальше вопрос, как пускать трафик.
1. На хабре был материал про динамическую подгрузку маршрутов через BGP. Плюс - работает с любыми протоколами, и не требует дополнительной настройки со стороны проксируемого ПО. Минусы - ощутимо сложнее в понимании, на мой взгляд, да и с кроссплатформенностью могут быть проблемы. В статье приведена реализация на роутере Mikrotik.
2. Использовать файл proxy.pac. Его можно сгенерировать скриптом типа такого:
#!/bin/bash
#!/bin/bash
DNS_SERVER=8.8.8.8
BLACKLIST_URL="http://antizapret.prostovpn.org/iplist.txt"
#куда класть файл proxy.pac
PACDIR=/var/www/html
TMPLIST=/tmp/iplist.txt
#домены, которые нужно пускать через прокси независимо от содержимого iplist.txt
DOMAINS=(\
rutracker.org \
facebook.com \
facebook.net \
fbcdn.net \
twitter.com \
twitter.co \
t.co \
twimg.com \
twitpic.com \
periscope.tv \
pscp.tv \
)
#качаем чёрный список
wget -q --tries=10 -O "$TMPLIST" "$BLACKLIST_URL"
# вытаскиваем IP наших прописанных доменов
declare -a EXTRAIPS=()
for domain in "${DOMAINS[@]}"
do
        dig A "$domain" +short @$DNS_SERVER | grep -v '\.$' >>"$TMPLIST"
done
#в чёрном списке есть отдельные IP и есть подсети
#также чёрный список очень длинный, поэтому кодируем его более компактно.
IPLIST=`grep -Ex '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' "$TMPLIST" | awk '/^[0-9]+/ {split($1,b,/\./); printf("0x%02x%02x%02x%02x,", b[1],b[2],b[3],b[4]);}'`
SUBNETLIST=`awk '/[0-9.]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/ {split($1,p,/\//); printf("[\"%s\", %s], ", p[1], p[2]);}' <"$TMPLIST"`
#генерируем proxy.pac по шаблону
#он проверяет домен на вхождение в фиксированные домены, а потом IP по списку.
function templatePAC {
        NAME=$1
        shift
        DMNLIST=("$@")
        cat >"$PACDIR/$NAME" <<EOF
function FindProxyForURL(url, host) {
  var domainblacklist = [
EOF
        for d in "${DMNLIST[@]}"
        do
                echo "  '$d'," >>"$PACDIR/$NAME"
        done
        cat >>"$PACDIR/$NAME" <<EOF
  ];
  var ipblacklist = [ $IPLIST ];
  var subnetblacklist = [ $SUBNETLIST ];

  function endsWith(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
  }
  function numberToMask(n) {
    var m=[0,128,192,224,240,248,252,254,255];
    var r=[];
    for (var i=0; i<4; i++) {
      var p = (n > 8) ? 8 : n;
      r[i] = m[p];
      n -= p;
    }
    return r.join(".");
  }
  function maskMatch(ip, mask) {
    var m = numberToMask(mask[1]);
    return isInNet(ip, mask[0], m);
  }

  var blocked = false;
  for (var i=0; !blocked && (i<domainblacklist.length); i++)
    blocked = blocked || ((host == domainblacklist[i]) || endsWith(host, '.'+domainblacklist[i]));
  if (!blocked) {
    var ip = dnsResolve(host);
    for (var i=0; !blocked && (i<subnetblacklist.length); i++)
      blocked = blocked || maskMatch(ip, subnetblacklist[i]);
    blocked = blocked || (ipblacklist.indexOf(convert_addr(ip)) != -1);
  }
  if (blocked)
    return "PROXY ТУТ_ТВОЙ_ПРОКСИ:ПОРТ";
  else
    return "DIRECT";
}
EOF
}
# генерируем файл
templatePAC proxy.pac "${DOMAINS[@]}"

rm -f "$TMPLIST"

Тогда можно отдавать этот proxy.pac любым веб-сервером (но лучше внутри VPN - если VPN не работает, то смысл в файле?), и настроить браузер на его использование.
Минусы: работает только с браузерами, требует наличия вебсервера и полноценного прокси-сервера внутри VPN-сети (т.е. просто арендованный VPN не подойдёт, нужен VPS). Но мне показалось это проще в понимании, чем возня с BGP, да и требуется только наличие современного браузера и VPN клиента, без привязки к роутеру. Можно хоть на ноуте настроить, как я сделал.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 7
@MaDerer
Лично мне известно о существовании двух вариантов доступа через роутеры. Инструкции уже не подскажу, так как занимался этим год-два назад.
1. Через роутер Mikrotik.
2. Через роутер с OpenWRT прошивкой.
Суть обеих методов в том, что создаётся два соединения: основное и VPN. Все сайты, которые находятся в созданном списке заворачиваются на VPN. Остальные через обычный доступ.
Я таким образом заворачиваю на Микротике нужные мне сайты на OpenVPN сервер, но достаточно долго возился по нескольким статьям, и когда у меня заработало, я сам не понял как. Точнее не понял, что я до этого делал не так, что у меня не работало.
Ответ написан
@Drno
Вы можете использовать сервис АНтизапрет - есть дополнение для браузеров
Вы можете поднять ВПН клиент на роутере и перенаправить трафф на определенный список доменов через ВПН (если роутер умеет)
Вы можете сделать тоже самое на ПК...

Можете купить\установить где то сами прокси и так же прописать их настройки в браузер (у того же антизапрет есть вариант установки через контейнер с готовым прокси)
В итоге все будет ходить через провайдера, а заблокированное через прокси

Сам чтоб ВПН включался\отключался - такого нет. Это не так работает
Что мешает держать включенным ВПН? он не ест ресурсов фактически если не используется
Ответ написан
@theNatd
Не легче подписаться уже на готовый сервис где есть split tunneling или чёрные и белые списки. Выйдет даже дешевле.

Например https://adguard-vpn.com/ru/ AdGuard VPN имеет как split tunneling для приложений, так и белый/чёрный список сайтов. Плюс есть возможность сменить DNS, доступны и DNS от AdGuard которые режут рекламу или семейный DNS где не даёт войти на пром сайты и режет рекламу и т.д.

$35.94 в год - это $2.99 в месяц.

https://rus.windscribe.com - на мобильных клиентах точно имеет split tunneling и что не мало важно GPS Spoofing. Например Твиттер на смартфонах берёт вашу локацию из GPS. GPS Spoofing подменяет координаты на страну к которой подключились. Надо проверить десктоп клиент, есть ли там раздельное туннелирование

$49 в год или $4.08 в месяц. Все равно дешевле чем держать сервер на DigitalOchean например.

Плюс есть клиенты под все системы и не надо танцевать с бубном.
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Копать в сторону маршрутов до нужных ресурсов. Но вообще впн для такого не предназначен, на уровне HTTP работают прокси.
Ответ написан
Комментировать
@Nikopol25
Взять микротоки и настроить его по этой статье
Ответ написан
caramingo
@caramingo
админ из русского манчестера
Если нужно просто зайти на сайты которые заблочил роскомнадзор я использую хром + плагин Обход блокировок Рунета, уже год без проблем и быстро все заблоченные сайты открывает.
Ответ написан
Комментировать
ValdikSS
@ValdikSS
https://bitbucket.org/anticensority/antizapret-vpn...

Особенности VPN
Нестандартный способ маршрутизации

В отличие от обычных VPN, осуществляющих перенаправление отдельных IP-адресов или диапазонов средствами маршрутизации ОС, VPN АнтиЗапрета использует маршрутизацию на основе доменных имен, с помощью специального DNS-сервера, созданного для этой цели.

На VPN-сервере запущен специальный DNS-резолвер, устанавливающий отображение (соответствие, маппинг) настоящего IP-адреса домена в свободный IP-адрес большой внутренней подсети, и отдающий запрашиваемому клиенту адрес из внутренней подсети.

У такого подхода есть множество преимуществ:

  • Клиенту устанавливается только один или несколько маршрутов, вместо десятков тысяч маршрутов;
  • Маршрутизируются только заблокированные домены, а не все сайты на заблокированном IP-адресе;
  • Возможность обновления списка заблокированных сайтов без переподключения клиента;
  • Корректная работа с доменами, постоянно меняющими IP-адреса, и с CDN-сервисами;
  • Корректная работа с провайдерами, блокирующими все поддомены заблокированного домена (блокировка всей DNS-зоны). Пример такого провайдера — Yota.


Но есть и минусы:

  • Необходимо использовать только DNS-сервер внутри VPN. С другими DNS-серверами работать не будет.
  • Работает только для заблокированных доменов и программ, использующих доменные имена. Для заблокированных IP-адресов необходимо использовать обычную маршрутизацию.

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы