Задать вопрос
  • Как пустить часть трафика через VPN?

    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 клиента, без привязки к роутеру. Можно хоть на ноуте настроить, как я сделал.
    Ответ написан
    Комментировать
  • Как получить доступ к ресурсам хоста из контейнера docker?

    @freelancer007 Автор вопроса
    Решение было следующим, может ктото в поиске и пригодится)
    Контейнеру назначил внутренний статический IP 172.16.0.5
    и в UFW создал правило
    ufw allow from 172.16.0.5 to any port 7500
    Ответ написан
    Комментировать
  • Как правильно устанавливать что-либо в Docker контейнеры?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    2 + 3, даже если это на один раз. Потому что часто один превращается в "не один".
    Ответ написан
    1 комментарий
  • Как правильно устанавливать что-либо в Docker контейнеры?

    1. Если это на 1 раз, то №1.
    2. Если понадобится более 1 раза, то №2. Там несложно: всего 2 инструкции: FROM (имя исходного образа), и RUN и там как в bash файле команды apt-get update && apt-get install XXX && ...
    Ответ написан
    Комментировать
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • Как запустить python скрипт в фоновом режиме?

    @Teslaman
    Можно написать демон для systemd если в вашей операционной системе он используется.

    Создаём файл демона:
    sudo touch /etc/systemd/system/bot.service

    Вставляем туда следующее:
    [Unit]
    Description=My bot
    After=multi-user.target
     
    [Service]
    Type=idle
    ExecStart=/usr/bin/python /путь/до/скрипта/bot.py
    Restart=always
     
    [Install]
    WantedBy=multi-user.target


    После этого в консоли выполяем:
    sudo systemctl daemon-reload
    sudo systemctl enable bot.service
    sudo systemctl start bot.service


    Чтобы остановить бот:
    sudo systemctl stop bot.service
    Чтобы удалить из автозагрузки:
    sudo systemctl disable bot.service
    Чтобы проверить работу демона:
    sudo systemctl status bot.service
    Ответ написан
    7 комментариев
  • Какой репозиторий можно использовать вместо packages.sury.org/php/?

    OCTAGRAM
    @OCTAGRAM
    Как ещё выясняется, там поудаляли старые дистрибутивы Debian, и не понятно, где же теперь взять зеркало.

    Пока что выживаю так: https://bitnami.com/stack/lapp/installer
    Ответ написан
    Комментировать
  • Почему у меня пусто в formData?

    @ZardoZAntony
    программист, сис. админ
    Еще одна причина пустоты в FormData если у всех input стоит атрибут disable. Никак не мог понять в чем беда, а этот аттрибут перед выполнении запроса расставлялся через js. Видимо тот, кто делал эту форму так ее защитил от ввода на время запроса :) Вроде смешно, а я 2 часа убил.
    Ответ написан
    2 комментария
  • Нужен софт для того, чтобы мышь «дёргалась»?

    IllariPosselt
    @IllariPosselt
    Поищите какой-нибудь автоматизатор действий мыши и клавиатуры, и настройте его через запуск по расписанию.
    Ответ написан
    2 комментария
  • Нужен софт для того, чтобы мышь «дёргалась»?

    @osof
    Где-то я читал о бесхитростном способе «дергать» мышь. Положить оптическую мышь на механические часы с достаточно жирной секундной стрелкой. Каждую минуту проходящая под оптический датчиком стрелка подвинет курсор на пиксель.
    Ответ написан
    1 комментарий
  • Какая версия Ubuntu лучше для бюджетного VPS?

    @Drno
    Ну обычно ставится последняя стабильная. Это ubuntu 20.04lts. Да, она жрет больше чем 18. но ненамного
    У меня под VPN - ubuntu 20.04, 1CPU\512mb\5gb disk.
    Т.к. оперативки мне надо было 1гб, я сделал еще swap file на 1гб.
    После добавления swap с диска и установки LXC контейнера от Антизапрет - свободного места 600мб осталось на диске))
    Ответ написан
    Комментировать
  • Какая версия Ubuntu лучше для бюджетного VPS?

    @AVKor
    Debian 11 или Ubuntu 20.04. Нет смысла ставить более старые версии.
    Ответ написан
    Комментировать
  • Какая версия Ubuntu лучше для бюджетного VPS?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Ubuntu 20.04 - свежее ядро, долговременная поддержка. Серверная версия места почти не занимает.
    Если по религиозным причинам не устраивает, то Debian 11.
    Ответ написан
    Комментировать
  • Как скопировать html код одного блока сайта и все стили его дочерних элементов?

    seregajd999
    @seregajd999
    Начинающий веб разработчик))
    Расширение для Google. CSS Used

    Ответ написан
    Комментировать
  • Как скопировать html код одного блока сайта и все стили его дочерних элементов?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Копипастишь кусок html и весь css сюда https://uncss-online.com/
    Жмакаешь кнопу
    Профит!!!!!!
    Ответ написан
    2 комментария
  • Чем бы обработать сканы принтерных документов для улучшения качества?

    ValdikSS
    @ValdikSS
    ScanKromsator — то, что вам нужно.
    Ответ написан
    Комментировать
  • Как сделать скриншот страницы полностью?

    sokoloff-rv
    @sokoloff-rv
    Удивлен, что на айтишном ресурсе никто не рассказал про способ сделать скриншот через консоль разработчика в Google Chrome.
    1. Ctrl-Shift-I - открываем консоль разработчика.
    2. Ctrl-Shift-M - переключаемся в режим эмуляции устройств.
    3. Выбираем в настройках нужный девайс. Если хотим сделать десктопный скриншот, то выбираем в настройках Laptop with MDPI screen или создаем девайс вручную как нам нравится.
    4. Нажимаем теперь на три вертикальные точки "More options" (в верхней горизонтальной панели максимально справа) и выбираем "Capture full size screenshot", после чего готовая картинка скачается в формате PNG.
    Способ прекрасен тем, что создает один скриншот, а не делает несколько, которые склеиваются друг с другом, из-за чего потом фиксированные элементы дублируются по нескольку раз. Ну и плюс не нужно захламлять браузер лишними расширениями.
    Ответ написан
    11 комментариев
  • Как добавить дополнительные реквизиты в 1С Предприятие 8.3 УТ 11.3?

    Надо добавлять в папочку Список заказов клиентов
    Ответ написан
    Комментировать