Ответы пользователя по тегу OpenVPN
  • Почему при подключении к серверу-донору VPN показывает настоящий IP?

    @younghacker
    Александр,
    Если Вам необходимо спрятать сам факт подключения к серверу по ssh то Вам нужно на сервере настроить iptables так чтобы он разрешал соединения на ssh порт если пакет приходит на tun+ интерфейс.
    -A INPUT -i tun+ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -m comment --comment "Accept all connections from tun interface"

    И затем после подъёма vpn соединения с OpenVPN клиента подключайтесь на адрес ssh root@10.10.15.1 - судя по вашему конфигу это должен быть адрес tun интерфейса вашего OpenVPN сервера.

    Несколько замечаний по топику:
    DNS Leak отягощённый VPN с единственной точкой входа и выхода.
    Или на более понятном языке - ваш провайдер, особенно хостинг, может видеть шифрованный и нешифрованный трафик одновременно. И как результат - получить ключики шифрования.
    SSH трафик на внутренний IP - исключение. Его не увидят ни хостинг ни интернет провайдеры (при условии что последний не контролирует ваш роутер).
    Также помним, что Win10 рассылает DNS запросы со всех интерфейсов несмотря на роуты. Fedora через другие нероутные интерфейсы тоже рассылает запросы на порт 80. Поэтому тонкая настройка файрвола необходима даже там.
    Ответ написан
  • Как заставить *.vk.com идти напрямую в обход VPN-сервера?

    @younghacker
    Мне нравится этот парень! :)
    Люди ведут борьбу за то чтобы ни один пакет не "пролился" мимо VPN, и тут находится смельчак который хочет в обход VPN загрузить html страницу с сотнями "поводков" собирающими информацию о посетителе.

    О структуре вашей сети ничего не известно поэтому буду импровизировать.

    • Выключить VPN - всё нормализуется само собой. :)
    • Удалить маршрут по умолчанию через VPN, перестать "PUSH-ить" его с сервера.
    • Поднять VPN сервер у себя в сети :)
    • Поднять у себя в локалке прокси. Настроить в браузере прокси. Если вдруг это будет другая подсеть то нужно прокинуть статический маршрут до прокси чтобы он был доступен с устройства.
    • Запустите в локалке машину с браузером. Подключайтесь к нему через RDP или VNC из iOS
    • есть несколько других способов но в разрезе iOS даже не знаю применимы ли они


    Прописать маршрут в обход не получится. Вернее получится но криво. На любой html странице прилетает куча ссылок "поводков" в разные места интернета, осложняется всё ещё и тем что страницы динамические никогда не знаешь что на следующем запросе тебе пришлёт сервер.

    Можно вопрос? Зачем Вам VPN ? Ответить можете в телеграме, конечно если у Вас он работает.
    Ответ написан
  • Как заходить только на 1 ип через OPENVPN?

    @younghacker
    В конфиге сервера у вас опция требовать от клиентов HMAC во время "рукопожатия":
    tls-auth ta.key 0 # This file is secret

    В конфиге клиента она закоментирована:
    ;tls-auth ta.key 1

    По логике работы этого ключа VPN сервер должен выбросить пакеты без должного HMAC без дальнейшей обработки. Соответственно VPN не должен подняться. Ключ в конфигах должен быть с обеих сторон, либо закоментируйте с обеих сторон (не рекомендуется).

    Посмотрите логи на клиенте и на сервере.
    Попробуйте пингануть сервер 10.8.0.1 (пинг должен быть разрешён в файрволах)
    Посмотрите появился ли интерфейс и роут на клиенте.

    P.S.
    Но вашу формулировку задачи, с утра, на сонную голову - я не понял.
    Качество вопроса определяет качество и точность ответов. :)
    Ответ написан
  • Почему на tun0 не присваиваются IP адреса?

    @younghacker
    Похоже что VPN клиенту не дают настроить сеть.

    Проверьте состояние SELinux
    getenforce
    После запускать клиента посмотрите от кого он стартанул.
    ps -afxuZ | grep openvpn

    Включите на клиенте более детальные логи
    verb 6
    Ответ написан
  • Возможно ли настроить аутентификацию OpenVPN по сертификату+ldap?

    @younghacker
    Никогда не решал такую задачу, но я бы двигался в направлении скрипта аутентификации.
    Нужно найти или написать простой shell скрипт который сравнит LDAP имя и CommonName.
    И в случае несоответствия возвращать ошибку. При этом можно делать запись в журнал и отправлять оповещение администратору VPN.

    Возможно openvpn-auth-ldap нужно будет отключить и проводить валидацию логина пользователя и проверку соответствий имени с commonname в его сертификате на стороне скрипта.
    --auth-user-pass-verify /etc/openvpn/scripts/scriptname.sh file
    --tmp-dir /dev/shm
    Я бы внимательно проанализировал что делает --username-as-common-name опция. Не поможет ли она решить всё и сразу.

    Думаю что таким образом вашу задачу можно решить.

    Либо можно сделать патч для openvpn-auth-ldap и добавить опцию в конфиг.
    Ответ написан
  • Можно ли настроить на одном VPS два OpenVPN - что бы каждый выходил в интернет со своего IP?

    @younghacker
    Это не то чтобы конфигурация OpenVPN это конфигурация ядра системы.
    И здесь iproute2 Вам определённо поможет. Маршрутизация на основании адреса клиента.
    Но чтобы зафиксировать адрес клиента (VPN) за каким-то внешним адресом нужно настроить и статический адрес для сертификата клиента и запретить вход с дубликатами cn, либо поднять второй VPN сервер на другом внешнем порту с другой внутренней сеткой. Тогда соединяемся на первый VPN получаем 1.1.1.1, соединяемся на второй VPN получаем 2.2.2.2.
    Ответ написан
  • Как удалить все маршруты и поставить только OpenVPN?

    @younghacker
    А Вы серьёзно уверены что никто не добавит маршруты обратно когда OpenVPN упадёт?

    На мой взгляд оптимальнее и надёжнее будет ограничить весь исходящий и (проходящий если это роутер) трафик таким образом чтобы:
    0) принимались все пакеты идущие в lo
    -A OUTPUT -o lo -j ACCEPT

    1) принимались все пакеты идущие в tun+
    -A OUTPUT -o tun+ -j ACCEPT

    2) принимались все пакеты идущие в enp1s0 если цель это интерфейс вашего VPN сервера и порт равен ему и протокол такой же.
    -A OUTPUT -o enp1s0 -p tcp -m tcp --dport 443 -d x.x.x.x -j ACCEPT


    3) принимались все пакеты идущие в wlp2s0 если цель это интерфейс вашего VPN сервера и порт равен ему и протокол такой же.
    -A OUTPUT -o wlp2s0 -p tcp -m tcp --dport 443 -d x.x.x.x -j ACCEPT


    4) отбрасывались все добежавшие до этого правила пакеты с ошибкой чтобы сразу было понятно что маршрут через VPN отвалился.
    -A OUTPUT -j REJECT --reject-with icmp-host-prohibited

    Правило должно быть последним в цепочке OUTPUT.

    Такой подход защитит вас и от DNS leak.

    Не забываем также PUSH-нуть DNS с VPN сервера так как родной от модема или wifi роутера не будет доступен.
    push "redirect-gateway"
    push "dhcp-option DNS 10.11.0.1"
    push "explicit-exit-notify 3"

    10.11.0.1 - в данном случае свой DNS где-то на стороне VPN сервера. Из соображений если уж VPN-ниться то и гуглу ничего не сообщать.

    Команда для проверки счётчиков (когда будете отлаживать)
    iptables -nvL

    Да, DHCP ещё нужно бы разрешить если используете не статику.
    Ответ написан
  • Как исправить DNS leak на OpenVPN?

    @younghacker
    Нужно передать DNS со стороны сервера на клиента , и на клиенте как уже сказали выше рубануть исходящий и входящий трафик на 53 порту везде кроме tun интерфейса.
    Разумеется в этом случае адрес VPN сервера должен быть указал в цифровом виде. Не доменный.
    iptables на клиенте будет выглядить как-то так:
    -A OUTPUT -o lo -j ACCEPT
    -A OUTPUT -o tun+ -j ACCEPT
    -A OUTPUT -o eth0 -d adresservera -p udp -dport vpnport -j ACCEPT
    -A OUTPUT -j DROP


    кусочек конфига openvpn сервера:
    push "dhcp-option DNS 10.1.10.1"
    push "redirect-gateway"


    Разумеется DNS должен быть проксирован или проброшен снаружи через туннель
    Если всё ещё актуально, постучитесь в скайп - поясню/помогу.
    Ответ написан
  • Проблемы с роутами openvpn?

    @younghacker
    Основная причина:
    в логе клиента написано tun1
    TUN/TAP device tun1 opened

    а в роуте на целевой хост который потом пингуется написано tun0
    10.49.0.0 10.13.0.1 255.255.0.0 UG 0 0 0 tun0


    Некрасиво:
    Wed Jan 11 11:45:38 2017 ERROR: Linux route add command failed: external program exited with error status: 2


    Роуты добавлены руками?
    Ответ написан
  • OpenVPN роутеры со встроенными клиентами, как настроить подсети?

    @younghacker
    Дмитрий Шицков дело говорит!
    Маршрутизируются только те пакеты которые должны идти в чужие сети!
    У Вас обе сети по сути одна сеть. Имеется в виду сеть подкласса С, 254 адреса.
    Ни один клиент в этой сети не пошлёт пакет в маршрутизатор пока он видит что пакет предназначен в его родную сеть.
    Подсказка:
    Если в сетях не более 126 хостов поделите их пополам маской.
    Вот калькуляция.
    [user001@localhost ~]$ ipcalc 192.168.0.0/24
    Network:        192.168.0.0/24
    Address space:  Private Use
    Address class:  Class C
    Netmask:        255.255.255.0 = 24
    Broadcast:      192.168.0.255
    
    HostMin:        192.168.0.1
    HostMax:        192.168.0.254
    Hosts/Net:      254
    
    [user001@localhost ~]$ ipcalc 192.168.0.0/25
    Network:        192.168.0.0/25
    Address space:  Private Use
    Address class:  Class C
    Netmask:        255.255.255.128 = 25
    Broadcast:      192.168.0.127
    
    HostMin:        192.168.0.1
    HostMax:        192.168.0.126
    Hosts/Net:      126
    
    [user001@localhost ~]$ ipcalc 192.168.0.128/25
    Network:        192.168.0.128/25
    Address space:  Private Use
    Address class:  Class C
    Netmask:        255.255.255.128 = 25
    Broadcast:      192.168.0.255
    
    HostMin:        192.168.0.129
    HostMax:        192.168.0.254
    Hosts/Net:      126
    Ответ написан
  • OpenVPN через stunnel: отключить избыточное шифрование в openvpn?

    @younghacker
    Вам шашечки или ехать? Для параноика шифрования мало не бывает.
    Но разработчики OpenVPN позаботились:
    cipher none
    auth none


    Но я бы выбросил stunnel.
    Ответ написан
  • OPENVPN: порт закрыт?

    @younghacker
    Потому что nmap не сканирует UDP по умолчанию
    добавьте опцию -sU
    -sU (UDP scans) .
               While most popular services on the Internet run over the TCP protocol, UDP[6] services are widely deployed. DNS, SNMP, and DHCP (registered
               ports 53, 161/162, and 67/68) are three of the most common. Because UDP scanning is generally slower and more difficult than TCP, some security
               auditors ignore these ports. This is a mistake, as exploitable UDP services are quite common and attackers certainly don't ignore the whole
               protocol. Fortunately, Nmap can help inventory UDP ports.

    С другой стороны на стороне сервера запустите
    netstat -nlp | grep openvpn
    и увидите что именно слушает openvpn сервис.
    Ну и последнее загляните в
    iptables -nvL
    Ответ написан
  • Windows xp + openvpn client не блокирует интернет, как исправить?

    @younghacker
    Вы не написали где установлен OpenVPN и как устроена сеть.
    Для windows
    route print
    или
    ip route
    линукс/мак
    Смотритe куда настроен default gate или 0.0.0.0/0 на той машине где установлен OpenVPN.
    Ответ написан
  • Как правильно настроить OpenVPN?

    @younghacker
    Логи не пишутся потому что не настроены.
    Опции нет ни в клиентском ни в серверном конфигах.
    log                   /var/log/openvpn-udp1194.log
    verb 3

    Для винды другой каталог куда логи писать.

    На сервере сделайте 2 вещи:
    1) откройте UDP порт 1194
    -A INPUT -i eth0 -p udp -m state --state NEW -m udp --dport 1194 -j VPN


    2) проверьте что SELinux ничего не блокирует. Можно ВРЕМЕННО отключить
    setenforce 0
    Ответ написан
  • Как можно определить момент, когда клиент подлкючается и отключается от OpenVPN сервера?

    @younghacker
    В конфиг сервера нужно добавить:
    script-security 2 # to run scripts
    client-disconnect "scripts/on-client-disconnect.sh"

    Заготовка скрипта.

    /etc/openvpn/script/on-client-disconnect.sh

    #!/bin/bash
    ## Parse variables
    
    if [ ! -z "${time_ascii}" ]; then
      sessionStart=${time_ascii}
    else
      sessionStart="UNSET"
    fi
    
    if [ ! -z "${trusted_ip}" ]; then
      clientHostAddress=${trusted_ip}
    else
      clientHostAddress="UNSET"
    fi
    
    if [ ! -z "${username}" ]; then
      clientUID=${username}
    else
      clientUID="UNSET"
    fi
    
    if [ ! -z "${time_duration}" ]; then
      sessionDuration=${time_duration}
    else
      sessionDuration="UNSET"
    fi
    
    if [ ! -z "${bytes_sent}" ]; then
      txVolume=${bytes_sent}
    else
      txVolume="UNSET"
    fi
    
    if [ ! -z "${bytes_received}" ]; then
      rxVolume=${bytes_received}
    else
      rxVolume="UNSET"
    fi
    
    if [ ! -z "${common_name}" ]; then
      client_cn=${common_name}
    else
      client_cn="UNSET"
    fi
    
    ## Send to syslog
    logger -t openvpn -- "Disconnect: CommonName: ${client_cn} Username: ${clientUID} HostIP: ${clientHostAddress} Duration: ${sessionDuration} seconds opened at ${sessionStart} Session Traffic: TX: ${txVolume} bytes RX: ${rxVolume} bytes"


    В логе будут такие вот записи, которые Вы можете затем парсить.

    Sep 17 17:02:35 gw1-vpn openvpn: Disconnect: CommonName: vpn-client14 Username: UNSET HostIP: 444.555.666.777 Duration: 755 seconds opened at Sat Sep 17 16:50:00 2016 Session Traffic: TX: 20676207 bytes RX: 3596392 bytes

    В скрипте Вы всегда можете запустить export и слить его в файл. Увидите там переменные которые установил OpenVPN.

    И не забудьте поставить для скрипта атрибут на запуск и добавить в selinux правило открывающее доступ openvpn демону к этому файлу.
    Ответ написан
  • Почему systemd запускает OpenVPN раньше готовности интерфейсов определенных в /etc/network/interfaces?

    @younghacker
    Проверьте файл (это федора на убунте может быть в другом месте) /lib/systemd/system/openvpn@.service

    [Unit]
    Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
    After=network.target

    [Service]
    PrivateTmp=true
    Type=forking
    PIDFile=/var/run/openvpn/%i.pid
    ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

    [Install]
    WantedBy=multi-user.target
    Ответ написан
  • Возможно ли создать TripleVPN имея учетные записи разных компаний предоставляющих OpenVPN?

    @younghacker
    Если у вас нет рутового доступа к серверам, то это будет вложенный VPN.

    Вам нужен роут через внешний интерфейс от вас до первого VPN1.
    Затем внутр полученного TUN1 нужно положить роут до второго VPN2 поднимем и получим TUN2. В него нужно отправить роут до третьего VPN3. Поднять VPN3 и в полученный TUN3 отправить Default route.

    Не забыть про DNS leak
    Законопатить на клиенте Firewall так чтобы пакет ни один пакет не прошмыгнул через ваш WAN интерфейс. Через WAN вам позволяется только один путь IP VPN1:PORT. Всё остальное DROP.

    Но логичнее взять три виртуалки и поднять свой нормальный трипл VPN с DNS.
    Ответ написан
  • Как соединить 2 сети в одну?

    @younghacker
    Опции OpenVPN сервера:
    route - сказать ядру что такие-то пакеты нужно отправлять в openvpn процесс
    iroute - сказать что такая-то подсеть находится у такого-то клиента. Вяжется с CN common name сертификата клиента, поэтому шаред сертификаты не пойдут. Роутерам идут только индивидуальные сертификаты.
    push route - сказать клиенту что пакеты отправлять через TUN интерфейс на OpenVPN сервер.

    И не забудьте включить маршрутизацию в ядре. :) (в винде тоже она выключена по умолчанию)
    Firewall — настройте.
    Если у вас Linux c Selinux то ахтунг! Но не выключить, а настроить!

    Никаких маршрутов прописывать руками в системе нет нужды. Всё работает прямо из OpenVPN если его правильно сконфигурировать.

    Ваши друзья:
    Linux | Windows
    tcpdump | windump (WinPcap) WireShark
    ip route | route print
    ip a | ipconfig /all
    ping | ping

    Включите логи в OpenVPN на клиенте и на сервере.
    Добавье опцию verb 5
    почитайте логи после установки соединения. Там видны команды добавления маршрутов.

    Если речь идёт о подключении только одного IP то можно не настраивать полную маршрутизацию, а сделать NAT (Forwarding) в сторону вашего сервера 192.168.1.202
    В этом случае соединяться нужно будет на адрес вашего TUN интерфейса, а попадёте на сервер. Сервер не узнает ваш IP так как ему будет подсунут IP компа в его подсети и он отправит пакеты ему, а тот отмаскарадит их обратно в вашу сторону. Но это не исключает того что и в этом случае если вы соединяетесь не прямо с гейта,а из другого компа офисной сети то этот комп должен знать куда слать такой запрос иначе он отправит его в адрес Default Gate. Но это отпадает если OpenVPN стоит на роутере Default Gate.

    P.S.
    Вы себе не представляете как схема с адресами да с пояснениями облегчает ответ на поставленную задачу. :) В ней уже половина ответа!
    Ответ написан
  • Можно ли исключить диапазон ip из трафика Openvpn?

    @younghacker
    На роутере или на машине где установлен VPN сделайте то что сказали ранее. Пропишите статические маршруты через интерфейс к вашему провайдеру. Имейте ввиду что DNS запросы могут уходить либо в VPN либо через провайдера, в зависимости от настроек на вашем VPN роутере. И если используется CDN то ответ может быть разным. Сделайте скрипт который будет проверять целевой IP в DNS и изменять или оповещать вас что изменился адрес который вам нужен. Также внутренние ресурсы провайдера могут не ресолвиться в DNS снаружи, например гуглом.

    Если же речь идёт о сети провайдера просто подсмотрите их AS получите их сети и затем пропишите их сети "статикой".

    Также придётся разобраться как прописывать маршруты в конкретной вашей системе.
    Ответ написан
  • Как объединить две локальные сети в одну через OpenVPN?

    @younghacker
    Важно чтобы на сервере был статический адрес. Либо нужно будет прикручивать какой-то домен и настраивать DynDNS.
    На машине которая будет сервером программы ENERGO запустите OpenVPN в режиме сервера.
    Затем откройте на модеме/роутере за которым находится этот сервер portforwarding для UDP порта скажем 12129 и пробросьте его на внутренний IP адрес сервера на порт который слушает OpenVPN сервер. Другие порты прокидывать не нужно. DMZ тоже не стоит активировать чтобы не подставлять вашу XP.

    На всех клиентах которым нужно соединяться с программой ENERGO запустите OpenVPN в режиме клиента. Внеший IP используйте тот за которым стоит OpenVPN сервер.

    OpenVPN для Windows инсталируется просто.
    Не нужно ставить OpenVPN GUI. После установки откройте mmc останстку "службы" и найдите там OpenVPN service. Установите автоматический запуск.
    После того как положите конфиги сервера и клиентов в их каталоги запустите сервис OpenVPN. Затем проверьте что появились необходимые интерфейсы и маршруты.
    ipconfig
    route print
    После этого каждый клиент сможет достучаться до сервера.
    Ваша серверная программа ENERGO должна слушать все интерфейсы в том числе TUN который создаст VPN сервер. Перезапустите её если она не слушает.
    Cтяните бесплатную утилиту sysinternals TCPView чтобы посмотреть процессы и открытые ими порты.

    Если Вы будете поднимать сервер и клиен на конечных машинах тоесть именно на них будет запущен сервер ENERGO и клиенты то с маршрутизацией вам не нужно заморачиваться. Достаточно убедиться чтобы приватная сеть выделяемая для OpenVPN не конфликтовала с вашими другими сетями. Например 172.16.23.0/26 это сеть на 62 адреса в диапазоне который далёк от обоих ваших диапазонов. Сервер в этом случае будет находиться на адресе 172.16.23.1.
    В серверном конфиге для этого нужно использовать такую строку:
    server 172.16.23.0 255.255.255.192
    В остальном всё просто.
    Если будут вопросы — спрашивайте.

    PS.
    Если в офисе клиентов будет больше 3-5 тогда я бы рекомендовал ставить с их стороны VPN роутер, например как рекомендовал Gring76. В таких случаях я предпочитаю прошивать Mikrotik или TPLink в OpenWRT. (в Микротике ущербная реализация OpenVPN)

    PPS. Если будут тормоза (непонятно сколько трафика гоняет программа) смотрите в сторону Remote Desktop Services. Тоесть поднять терминальный сервер у себя в офисе, или у ближайшего отзывчивого хостера на VDS где установлена Windows.
    Ответ написан