@hirthwork

Тег openvpn в блоге hirthwork

hirthwork
12 Mar 2017
hirthwork

я рукожоп и не смог настроить арцу роутинг всех сетевых запросов через впн. а всё потому что я нихуя не понимаю в нат

hirthwork
23 Apr 2016
hirthwork

Трезворк репортинг. В прошлой серии (#iprfw) я писал о том как автоматически ходить в i2p из браузера при помощи WPAD. У описанного метода есть некоторые недостатки:

  • Не работает в легковесных браузерах типа w3m, dillo, curl, wget и fetch
  • Не работает в громоздких поделиях типа Google Chrome и Yandex.Browser
  • На айфоне networkd запрашивает WPAD по настроению, иногда запрашивает, а иногда говорит что в i2p не пойдёт

Сегодня поговорим о железобетонном решении, у которого есть ровно один недостаток: оно не работает с i2p-сайтами висящими на нестандартном порту. Я таких пока ещё не встречал.

Итак, нам всё так же нужен openvpn.conf, который прокидывает собственный DNS: push "dhcp-option DNS 10.100.0.1"
Так же нам нужен dnsmasq.conf, который резолвит все i2p хосты в адрес нашей впски: address=/.i2p/10.100.0.1
Далее, нужно заставить nginx слушать 10.100.0.1:80 и заворачивать все запросы в прокси. Опытный админ nginx скажет, что это невозможно, nginx этого не умеет и официальный ответ Сысоева был "используйте squid". Поэтому нам придётся использовать баги о которых Сысоев не в курсе:

server {
    listen 10.100.0.1;
    server_name *.i2p;
    location / {
        rewrite ^(.*)$ "HTTP://$host$1" break;
        proxy_read_timeout 5m;
        proxy_set_header Host $host;
        proxy_pass http://10.100.0.1:4444;
    }
}

Обратите внимание, что в пятой строке написано HTTP://, а не http://. Не смотря на https://tools.ietf.org/html/rfc2616#section-3.2.3, nginx сравнивает схему case-sensitive, что позволяет обмануть его парсер.
Всё, теперь при подключении к openvpn все клиенты за i2p ходят в 10.100.0.1:80 откуда их перенаправляют на 10.100.0.1:4444

hirthwork
21 Apr 2016
hirthwork

Пойнт засыпает, просыпается Трезворк.
Итак, в начале этой эпопеи я поставил перед собой следующие цели:

  • Избавиться от наколенной прокси на php + libcurl
  • Иметь возможность обходить блокировки РКН по конкретным сайтам
  • Иметь возможность ходить в i2p с телефона и десктопа без каких-либо дополнительных настроек

Возникшие по ходу дела проблемы:

  • Я ничего не понимаю в сетях, масках, таблицах роутинга и прочем
  • Вместо телефона у меня ипхон, а вместо операционной системы — гента, в первом не работает WPAD, во втором не цепляется автоматически PAC.
  • В tt-rss не поддерживает ни WPAD, ни PAC (решение этой проблемы описано отдельно в #iprdr)

В итоге получилось с некоторой избыточностью, но всё равно не очень громоздко.
Итак, создаём скрипт, который генерит общую таблицу роутинга для всех клиентов, но имеет разную прелюдию для айфона и компов (особо упоротые могут выкачивать список айпишников с http://reestr.rublacklist.net/api/ips):

#!/bin/sh
set -e
default=$(mktemp --suffix=.routes)
trap "rm -f $default" EXIT
iphone=$(mktemp --suffix=.routes.iphone)
trap "rm -f $default $iphone" EXIT

echo 'push "dhcp-option DOMAIN i2p"' > $default
echo 'push "dhcp-option PROXY_AUTO_CONFIG_URL http://wpad/wpad.dat"' > $iphone

for host in grani.ru lurkmore.to rutracker.org lj.rossia.org kasparov.ru zapretno.info
do
    getent ahostsv4 $host|cut -d' ' -f1|sort -u|while read ip
    do
        echo 'push "route '$ip' 255.255.255.255"' >> $default
        echo 'push "route '$ip' 255.255.255.255"' >> $iphone
    done
done

if ! (diff -q $default /etc/openvpn/routes/DEFAULT && diff -q $iphone /etc/openvpn/routes/iphone)
then
    install -m0444 $default /etc/openvpn/routes/DEFAULT
    install -m0444 $iphone /etc/openvpn/routes/iphone
fi

Правильные dhcp-option для компа и телефона мы прокинули, теперь нужно для компа ещё пушнуть wpad. В dnsmasq.conf:

address=/wpad/10.100.0.1
dhcp-option=252,"http://wpad/wpad.dat"

И раздать файл и для компа и для телефона. В nginx.conf:

server {
    listen 10.100.0.1;
    server_name wpad;

    root /var/www/localhost/htdocs;

    location /wpad.dat {
        default_type application/x-ns-proxy-autoconfig;
    }
}

После этого непосредственно в /var/www/localhost/htdocs/wpad.dat пишем уже описанное нами правило:

function FindProxyForURL(url, host) {
    if (dnsDomainIs(host, ".i2p")) {
        if (url.substring(0, 6) == 'https:') {
            return "PROXY 10.100.0.1:4445";
        } else {
            return "PROXY 10.100.0.1:4444";
        }
    }

    return "DIRECT";
}

Всё, мы теперь настоящие мамкины криптоаутисты, умеем и блокировки обойти и прозрачно про скрытносетям шастать и с телефона и с любого современного браузера.

hirthwork
20 Apr 2016
hirthwork

Продолжая серию бесполезных советов. Во вчерашнем посте я давал ссылку на бнв, где описывался php-скриптик для хождения в i2p с телефона.
Времена меняются и пришло время предложить менее наркоманское решение на более алкогольном ресурсе.
Итак, в openvpn.conf пишем: push "dhcp-option PROXY_AUTO_CONFIG_URL http://myprivateserver.com/proxy.pac"
А в самом файлике, который вы будете отдавать статикой через nginx пишем дословно следующее:

function FindProxyForURL(url, host) {
    if (dnsDomainIs(host, ".i2p")) {
        if (url.substring(0, 6) == 'https:') {
            return "PROXY 10.100.0.1:4445";
        } else {
            return "PROXY 10.100.0.1:4444";
        }
    }

    return "DIRECT";
}

Теперь, при подключении к vpn телефон получает proxy auto config, выкачивает его и при попытке захода на i2p-шный ресурс детектит, что нужно использовать i2p-проксю от ноды, которая крутится на впске.
Всё, больше не требуется никакой наколеночной прокси на php (на самом деле всё ещё требуется для rss в i2p)

hirthwork
19 Apr 2016
hirthwork

Как и обещал, пилю инструкцию для чайников и тупых (меня) о том как же ходить на Интересные Сайты™ в обход блокировок.
За советы и поддержку хочется поблагодарить Radjah, 1010101 и пивоваренную компанию Jaws.

Итак, нам нужен настроенный openvpn (я себе его поднимал ради i2p и далее по тексту http://bnw.im/u/hirthwork/t/i2p), но сейчас мы обсуждаем как же Каспарова и Вербицким читать, так что на скрытносети не отвлекаемся и начинаем ваять на впске:
1. В /etc/sysctl.conf выставляем net.ipv4.ip_forward = 1 и делаем sysctl -p
2. iptables -A POSTROUTING -t nat -s 10.100.0.0/255.255.255.240 -j MASQUERADE
3. iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT
База готова. Теперь, чтобы завернуть весь трафик через vpn достаточно в openvpn.conf прописать: push "redirect-gateway def1 bypass-dhcp bypass-dns". Всё, перезапускаем openvpn, переподключаемся клиентом, наслаждаемся всем интернетом завёрнутым через впску.

Но, это половина истории. Я весь трафик заворачивать через загнивающую Европу не хочу, а хочу заворачивать только трафик на определённые сайты. Прописывать статический список роутов — тоже не по пацански. На выручку приходит директива client-config-dir. Как она работает, прочитаете в man'е, но можно просто добавить в openvpn.conf строчку client-config-dir /etc/openvpn/routes
Также в /etc/cron.hourly/ создаём исполняемый файл с таким вот содержимым:

#!/bin/sh
set -e
tmpfile=$(mktemp --suffix=.routes)
trap "rm -f $tmpfile" EXIT

for host in grani.ru lurkmore.to rutracker.org lj.rossia.org kasparov.ru zapretno.info
do
    getent ahostsv4 $host|cut -d' ' -f1|sort -u|while read ip
    do
        echo 'push "route '$ip' 255.255.255.255"' >> $tmpfile
    done
done

if ! diff -q $tmpfile /etc/openvpn/routes/DEFAULT
then
    install -m0444 $tmpfile /etc/openvpn/routes/DEFAULT
fi

Список перечисленных Интересных Сайтов™ вы можете дополнять, изменять, переписывать и делиться с друзьями. Раз в час список роутов будет обновляться, а клиенты при (пере)подключении будут получать новые списки роутов. И, например, с айфона вы сможете погарцевать перед девчонками не только выходом в i2p, но и доступом к запретной литературе и торрентам.

hirthwork
19 Apr 2016
hirthwork

Кароч я тупой и не понимаю в чём проблема (и каким хером вчера всё работало).
На сервере в openvpn.conf пишу push "route 161.47.20.217 255.255.255.255", рестартую сервер и клиент.
На клиенте делаю telnet 161.47.20.217 80, на сервере запускаю tcpdump и вижу что SYN-пакеты уходят, но ответа нет.
Если делать telnet на сервере, то на SYN-пакеты сразу же приходит ответ.
Разница в пакетах только в том, что прямые пакеты идут с типом Set by us, а зароученные — Unicast to us

Я тупой и не осилил теорию сетей.

hirthwork
19 Apr 2016
hirthwork

я криворук и херпоймёшь. только что вот открывались сайты через роуты пушнутые с openvpn, а сейчас нихуя

hirthwork
27 Mar 2016
hirthwork

Как Х-ворк изумился. История с предысторией, фабулой, но оставшаяся не раскрытой:

Предыстория:
Есть у Х-ворка впска на хетцнере, к которой привязана dns-запись (допустим, example.com[78.45.137.143]), где крутится openvpn, который пушит клиентам собственный dns, который резолвит example.com в 10.100.0.1.

История:
Х-ворк решил скопировать видосик, заботливо скачанный i2psnark'ом. А чтобы не насиловать openvpn, который ещё из lzo пытается делать, то решил качать по прямому ip. Сделал, значит scp 78.45.137.143:video/bdsm.avi ~/video и ...изумился. Потому что scp стабильно показывал, что скорость скачивания колеблется в районе 30 КБ/с.
«Ну обнаглеть теперь, наверное лимиты хетцнера на сеть выжрал» подумал Х-ворк и полез открывать http://example.com:7657/console. Но нет, нода стибльно продолжает пропускать через себя по 300 КБ/с на влёт и вылет. Значит хостер не виноват. Пришло время изумиться второй раз.
«Ну Ростелеком, ну мужеложцы» подумал Х-ворк и решил, что коли счастья в жизни нет, то можно и через openvpn over udp качать, так хоть какие-то шансы на то что проблемы сети не помешают. Запустил Х-ворк scp example.com:video/bdsm.avi ~/video и ...изумился во второй раз за вечер. При копировании через openvpn скорость скачивания была в районе 10 мегабит, что является лимитом для текущего тарифа.

Вопросы без ответа:
1. Что резало до 30 КБ/с при копировании over tcp?
2. Почему не сработала резалка для udp?

hirthwork
14 Nov 2015
hirthwork

Инженерный подход против глюкавого зухеля:
Как некоторые знают, мой роутер от Ростелекома очень не любит быстрый аплоад
Настолько не любит, что попытка залить в сеть пятимеговую фотку вызывает soft reset
Но тут мне «кровь из носу» запушить сотню мегабайт в гит-репу в рабочей сети
Всего одна строчка shaper 100000 в конфиге openvpn решает проблему адресно и надёжно

hirthwork
16 May 2013
hirthwork

таки настроил рабочий openvpn. теперь могу вообще всегда работать. кстати, а вчерашняя проблема крылась в том, что у безопасников не было выставлено мне разрешение на коннект по впну

hirthwork
15 May 2013
hirthwork

заебался. пытаюсь подключиться по VPN к рабочей сети
запускаю openvpn, доходит до
SENT CONTROL [some.host] 'PUSH_REQUEST'
а затем сразу
AUTH: Received control message AUTH_FAILED
причём что именно не понравилось — не пишет. ключи все 100% валидные — я их же
использую если подключаться к шифрованному вайфаю.
пиздец и печаль, короче говоря

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.