Ответы пользователя по тегу OpenVPN
  • Есть ли возможность настроить Openvpn-клиента yf Windows без сертификатов?

    @younghacker
    1. Отключать сертификаты плохая идея.
    2. Подключение без прокси напрямую работает?
    3. Время и дата между клиентом и сервером синхронизированы?
    4. Кто контролирует прокси? Никаких sslstrip не делает?
    5. Было бы хорошо нарисовать схему подключения.
    6. log verbosity включите на максимум


    Сказанное ниже к делу скорее всего не относится. Чисто как замечание.
    Не знаю как ситуация выглядит сейчас но раньше у микротика с OpenVPN были ограничения. Не поддерживался UDP и по-моему нельзя использовать ta ключи. С тех пор я использую только перешитые Mikrotik.
    Ответ написан
    Комментировать
  • Почему не меняется IP после подключения к VPN?

    @younghacker
    Речь идёт о сети интернет?
    Тогда что это????
    server 93.189.42.0 255.255.255.0

    Разве адрес который сервер использует для построения своей локальной сети не должен быть из local диапазонов? 10.x.x.x, 172.16.x.x 192.168.x.x
    выберите любой каких нет у вашего компьютера-клиента в "локалках".
    Например
    server 10.22.44.0 255.255.255.0
    Когда произоёдет подключение у клиента должен появиться один роут
    0.0.0.0/0 --> tunX с лёгким весом (легче чем у оригинального через ваш локальный сетевой интерфейс)
    и второй роут на сервер 93.189.42.##

    А в iptables добавьте вот это правило:
    iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

    Это правило гласит: любой пакет в через любой tun интерфейс "замаскарадить"

    И ещё. Проверьте что DNS на клиенте изменился на 8.8.8.8. (хотя я бы рекомендовал поднять DNS на сервере и не сливать гуглу свои похождения по интернетам)
    К тому же я обычно даже блокирую любой DNS трафик через интерфейс отличный от tun чтобы избежать DNS leak когда VPN отваливается.

    После этого можете войти браузером на сервис по определению IP.
    Ответ написан
    Комментировать
  • Шара на одной машине с серевром OpenVPN за роутером - можно ли установить тождество адресов шары в локальной сети и подсети VPN?

    @younghacker
    Вы бы картинку нарисовали. Например, мне довольно сложно прочесть это и понять.

    1. Проверьте что на WS2008R2 включена маршрутизация.
    2. Опубликуйте VPN клиентам роут до сервера.

      server 192.168.2.0 255.255.255.0
      push "route 192.168.1.104 255.255.255.255"


    Вы ничего не сказали про подсеть клиента. Роутится он или нет, потому что если он роутится нужно будет добавить его сеть в конфиг сервера опцией route и ccd конфиг к тому сертификату который отвечает за роутер.
    Ответ написан
    Комментировать
  • Centos 7, почему не запускается openvpn клиент?

    @younghacker
    Всё необходимое было сказано выше я лишь добавлю немного практики.
    В сессии рута:
    отключить SELinux
    setenforce 0
    проверить что отключился
    getenforce

    Настройте логи /etc/openvpn/ваш-vpn.conf
    log-append  /var/log/openvpn.log
    verb 5


    затем запустить openvpn и посмотреть что получилось в логе

    cat /var/log/openvpn.log

    также ошибки указывающие на проблему могут быть и в /var/log/messages

    Если проблема в SELinux то разрешите открывать порты (для конфига который породит сервер), читать конфиги и писать лог и status файлы.

    Показать права SELinux для файлов:
    semanage fcontext -l | grep openvpn
    и для портов (требуется для сервера)
    semanage port -l | grep openvpn_port_t

    Добавление исключений для файлов:
    semanage fcontext -t openvpn_etc_t -a '/etc/openvpn(/.*)?'
    semanage fcontext -t openvpn_etc_rw_t -a '/etc/openvpn/ipp.txt'
    semanage fcontext -t openvpn_var_log_t -a '/var/log/openvpn.*'
    restorecon -v /etc/openvpn/
    restorecon -v /var/log/


    Добавление исключений для портов:
    semanage port -a -t openvpn_port_t -p tcp ПОРТ
    semanage port -a -t openvpn_port_t -p udp ПОРТ


    semanage находится в пакете libsemanage-python
    Ответ написан
    Комментировать
  • Почему клиент OpenVPN GUI не подключается после гибернации?

    @younghacker
    После восстановления из hybernate проверьте список процессов присутствует ли там openvpn.
    Если да, то попробуйте в конфигурационный файл добавить опции:
    ping 10
    ping-restart 60

    Если openvpn падает, то включите его детальные логи
    log         openvpn.log
    log-append  openvpn.log
    verb 9   # от 3 до 9. (9 - очень детальные логи)


    и затем смотрите их.
    Не забудьте потом отключить логи или уменьшить verbosity

    И на практике я использую не GUI, а сервис который запускается либо руками, либо командным файлом, либо автоматически при старте системы. При краше ставится опция рестартовать.

    Надеюсь, это поможет разобраться с причинами.

    Самое последнее средство написать/найти скрипт который на событие возврата из hybernate перезапустит сервис openvpn. :)
    Ответ написан
    Комментировать
  • Как решить проблему с DNS при подключении OpenVPN в Fedora 21?

    @younghacker
    Для поиска проблемы я бы поступал следующим образом:

    Посмотрите со стороны клиента куда уходят запросы к DNS
    В одном окне терминала (на стороне OpenVPN клиента) запустите:
    # tcpdump -i any port 53

    В другом окне терминала (на стороне OpenVPN клиента) выполните два запроса:
    первый запрос с автовыбором NS сервера
    $ nslookup домен

    второй запрос адресный прямо на сервер
    $ nslookup домен XXX.XXX.XXX.XXX
    где XXX.XXX.XXX.XXX адрес NS сервера который через VPN.
    Посмотрите какие сервера перебирает первый запрос
    и через какой интерфейс и куда улетает второй.
    И если проходимость есть (маршрутизация работает верно, firewall пропускает, dns сервер отвечает) то для второго запроса должны получить правильный ответ: IP адрес.

    Если же ответа нет то посмотрите не закрыт ли Firewall как на клиенте так и на сервере
    # iptables -nvL

    Включите более подробные логи для OpenVPN на клиенте и на сервере и проанализируйте их
    log /var/log/openvpn.vpn-client1.log
    verb 5
    mute 20


    DNS прописывать руками нет нужды. Вам верно сказали, что со стороны сервера его нужно затолкнуть на клиента
    push "dhcp-option DOMAIN domain.local"


    Но вы сначала определитесь будете ресолвить все имена с того сервера который вам даёт VPN или только те что внутри домена.

    Посмотрите запускается или нет dnsmasq из NetworkManager
    # cat /etc/NetworkManager/NetworkManager.conf 
    [main]
    plugins=ifcfg-rh
    #dns=dnsmasq
    dns=none


    Не забывайте про SELinux. Временно отключите:
    # setenforce 0

    По своему опыту скажу, что в Fedora20, на которой я сижу в данный момент, я отказался от использования OpenVPN, iptables и dnsmasq через Network Manager по причине неадекватного поведения. Мой "VPN зоопарк" оказалось проще настроить по старинке.
    Ответ написан
    Комментировать
  • Почему не работает форвардинг на Centos?

    @younghacker
    Вы не показали таблицы маршрутизации центрального сервера. Как можно понять из приведённой информации на нём на VPN интерфейсе есть сеть 192.168.250.0/24, а значит на нём должна быть маршрутизация через vpn в ваши сети которые вы хотите сделать доступными:
    192.168.248.0/24
    192.168.243.0/24
    192.168.251.0/24


    В одной консоли запустите
    ping -I eth1 192.168.250.102
    Во второй
    tcpdump -i tun0 host 192.168.250.102
    На центральном сервере на tun интерфейсе также запустите
    tcpdump -i tun0 host 192.168.250.102
    Смотрите что пакеты проходят как в одну так и во вторую сторону.
    Ищите где затык.

    Мне также жутко не нравится Ваш iptables. В частности цепочки FORWARD
    -A FORWARD -d 192.168.250.0/24 -i eth1 -o tun0 -j ACCEPT
    -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -i eth1 -o eth0 -j ACCEPT
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -i tun0 -j ACCEPT
    -A FORWARD -o tun0 -j ACCEPT

    Запустите пинги из одной консоли и позапускайте посмотрите какие счётчики растут.
    # iptables -nvL
    Вы цепочкой
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited

    режете трафик который идёт из tun0.

    У вас все адреса локальные поэтому можете попробовать разрешить всё:
    -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A FORWARD -i eth0 -j ACCEPT
    -A FORWARD -o eth0 -j ACCEPT
    -A FORWARD -i eth1 -j ACCEPT
    -A FORWARD -o eth1 -j ACCEPT
    -A FORWARD -i tun0 -j ACCEPT
    -A FORWARD -o tun0 -j ACCEPT
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited


    Пробуйте.
    Ответ написан
    1 комментарий
  • Как поднять VPN сервер на linux mint?

    @younghacker
    Прежде всего уясните себе что машина с easy-rsa это машина которая только подписывает ключи. И по логике безопасности должна быть отдельной машиной. Не стоит хранить генератор ключей и в особенности приватный CA на самом VPN сервере.

    1) ставим openvpn на VPN сервере
    # apt-get install openvpn
    2) ставим easy-rsa на станции подписей
    # apt-get install easy-rsa
    3) создаём каталог куда скопируем easy-rsa и там будем изменять настройки, создавать и подписывать сертификаты
    # mkdir -p /root/sign-host/easy-rsa
    # cd /root/sign-host/easy-rsa
    # cp /usr/share/easy-rsa/* ./

    4) проверяем что скопировалось
    # ls -1
    build-ca
    build-dh
    build-inter
    build-key
    build-key-pass
    build-key-pkcs12
    build-key-server
    build-req
    build-req-pass
    clean-all
    inherit-inter
    list-crl
    openssl-0.9.6.cnf
    openssl-0.9.8.cnf
    openssl-1.0.0.cnf
    pkitool
    revoke-full
    sign-req
    vars
    whichopensslcnf

    5) меняем переменные в конце файла vars. Размер ключики. Если параноя входит в ваши должностные обязанности то нужно побольше ставить. :)
    # mcedit vars
    .......
    export KEY_SIZE=1024
    .......
    export KEY_COUNTRY="US"
    export KEY_PROVINCE="CA"
    export KEY_CITY="SanFrancisco"
    export KEY_ORG="Fort-Funston"
    export KEY_EMAIL="me@myhost.mydomain"
    export KEY_EMAIL=mail@host.domain
    export KEY_CN=changeme
    export KEY_NAME=changeme
    export KEY_OU=changeme
    export PKCS11_MODULE_PATH=changeme
    export PKCS11_PIN=1234

    changeme - замените на свои значения. Остальные также можно изменить если хотите. На работоспособность это никак не влияет.

    Затем генерируем ключи. Команда vars запускается из шела. перед ней через пробел точка.
    После её запуска нужно запускать остальные.
    # . vars
    NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/easy-rsa/keys
    # ./clean-all 
    # ./build-ca myvpn-ca
    Generating a 1024 bit RSA private key
    .....++++++
    .................++++++
    writing new private key to 'ca.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-server]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:

    Получили ключик центра сертификации. Публичный и приватный.
    ca.crt
    ca.key


    Следом создадим ключик Diffie Hellman
    # ./build-dh
    Он может довольно долго работать и создавать ключ. Для 1024-х бит получим файл ./keys/dh1024.pem
    Теперь генерируем и подписываем ключ сервера.
    ./build-key-server myvpn-server-key
    Generating a 1024 bit RSA private key
    ............++++++
    .......++++++
    writing new private key to 'myvpn-server-key.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-server-key]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'US'
    stateOrProvinceName   :PRINTABLE:'CA'
    localityName          :PRINTABLE:'SanFrancisco'
    organizationName      :PRINTABLE:'Fort-Funston'
    organizationalUnitName:PRINTABLE:'my-organization'
    commonName            :PRINTABLE:'myvpn-server-key'
    name                  :PRINTABLE:'myvpn-key'
    emailAddress          :IA5STRING:'mail@host.domain'
    Certificate is to be certified until May 17 13:58:59 2024 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    Это добавило ещё 3 файла в каталог ./keys/
    myvpn-server-key.crt
    myvpn-server-key.csr
    myvpn-server-key.key

    Ну и теперь генерируем ключи для клиентов. Если клиенты будут иметь разные ключи то сколько клиентов столько раз и запускать. Не забывайте каждый раз менять (номер) ключа. Ну или можете назвать по именам реальных клиентов vasya-key, roma-key и т д.
    ./build-key myvpn-client1-key
    Generating a 1024 bit RSA private key
    ...................++++++
    ................++++++
    writing new private key to 'myvpn-client1-key.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-client1-key]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'US'
    stateOrProvinceName   :PRINTABLE:'CA'
    localityName          :PRINTABLE:'SanFrancisco'
    organizationName      :PRINTABLE:'Fort-Funston'
    organizationalUnitName:PRINTABLE:'my-organization'
    commonName            :PRINTABLE:'myvpn-client1-key'
    name                  :PRINTABLE:'myvpn-key'
    emailAddress          :IA5STRING:'mail@host.domain'
    Certificate is to be certified until May 17 14:03:29 2024 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    Получили три файла на каждого клиента
    myvpn-client1-key.crt
    myvpn-client1-key.csr
    myvpn-client1-key.key

    Ну и для комплекта сгенерим ещё и TA ключ.
    openvpn --genkey --secret "$EASY_RSA/keys/myvpn-server-ta.key"

    В результате добавится ключик ./keys/myvpn-server-ta.key
    Поздравляю! С ключами закончили.

    Теперь берите пять (5) ключей:
    dh1024.pem
    ca.crt
    myvpn-server-ta.key
    myvpn-server-key.crt
    myvpn-server-key.key

    и копируете на сервер в каталог /etc/openvpn/
    Копируете по закрытому соединению. scp например. или флешкой перенесите.
    Затем берёте четыре (4) ключа:
    ca.crt
    myvpn-server-ta.key
    myvpn-client1-key.crt
    myvpn-client1-key.key

    и копируете их на клиента в каталог /etc/openvpn/ или в соответствующий каталог на windows
    Аналогично копируете соблюдая меры безопасности.
    Теперь осталось сделать конфиги.
    Сервер /etc/openvpn/myvpn-server.conf
    port 443
    proto udp
    dev tun1
    
    user nobody
    group nogroup
    
    dh       /etc/openvpn/dh1024.pem
    ca       /etc/openvpn/ca.crt
    cert     /etc/openvpn/myvpn-server-key.crt
    key      /etc/openvpn/myvpn-server-key.key
    tls-auth /etc/openvpn/myvpn-server-ta.key 0
    
    server 10.10.0.0 255.255.255.0
    push "redirect-gateway"
    push "dhcp-option DNS 10.10.0.1"
    push "explicit-exit-notify 3"
    
    client-config-dir ccd
    keepalive 10 60
    
    #duplicate-cn
    
    auth SHA1
    cipher AES-256-CBC   # AES
    comp-lzo
    
    max-clients 128
    persist-key
    persist-tun
    
    ifconfig-pool-persist /var/log/openvpn-ipp-udp443.txt
    status                /var/log/openvpn-status-udp443.log
    log                   /var/log/openvpn-udp443.log
    verb 3


    Клиенты /etc/openvpn/myvpn-client.conf
    client
    dev tun1
    proto udp
    remote xxx.xxx.xxx.xxx 443
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    
    ns-cert-type server
    
    ca       /etc/openvpn/ca.crt
    cert     /etc/openvpn/myvpn-client1-key.crt
    key      /etc/openvpn/myvpn-client1-key.key
    tls-auth /etc/openvpn/myvpn-server-ta.key 1
    
    # разрешаем запускать скрипты
    script-security 2
    # на поднятие и опускание vpn запускаем скрипт обновления файла resolv.conf
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    
    cipher AES-256-CBC
    log /var/log/openvpn.log
    comp-lzo
    verb 3

    Готово.
    Заускаем
    # service openvpn start
    Проверяем что запустился
    # netstat -nlp -A inet | grep openvpn
    udp        0      0 0.0.0.0:443             0.0.0.0:*                           2075/openvpn

    Теперь важно открыть на Firewall UDP 443 на нужном интерфейсе.
    # ufw allow 443/udp
    И не забыть проверить и настроить SELinux если он установлен и включён.
    Если вдруг openvpn не запустился временно отключить SELinux можно так:
    # setenforce 0
    Дальше нужно включить автозапуск как на сервере так и на клиентах если это нужно.
    Для этого раскомментируем или добавим опцию AUTOSTART
    # mcedit /etc/default/openvpn
    ...
    AUTOSTART=all
    ...
    Ответ написан
    2 комментария
  • Как настроить DNS при использовании VPN?

    @younghacker
    Скорее всего имена ресолвятся через вашего провайдера.
    Вам правильно подсказали загдянуть в /etc/resolv.conf
    Можно ещё посмотреть, что вернёт в качестве сервера
    nslookup google.com

    Чтобы проверить отвечают ли ваши сервера (мало ли у вас настроен dnsmasq куда-то наружу) попробуйте
    nslookup somehost.company.local x.x.x.x
    где x.x.x.x адрес вашего фирменного dns
    Команда должна вернуть правильный адрес.

    Как вариант можно не push-ить адреса dns серверов через vpn, а поднять локально dnsmasq и настроить его чтобы он вашу зону company.local ресолвил с указанного вашего фирменного dns.
    cat /etc/dnsmasq.d/intranet.company.local.conf
    server=/company.local/x.x.x.x
    
    cat /etc/dnsmasq.conf
    interface=lo
    no-dhcp-interface=*
    bind-interfaces
    clear-on-reload
    local-ttl=3600
    neg-ttl=3600
    max-ttl=7200
    conf-dir=/etc/dnsmasq.d

    И в iptables можно перехватить все запросы на внешний tcp/udp 53 и завернуть их в локальный dnsmasq. Только на всякий случай оставить выход наружу только для nobody
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    # dns requests from nobody are transparent
    -A OUTPUT -p tcp -m tcp --dport 53 -m owner --uid-owner nobody -j ACCEPT
    -A OUTPUT -p udp -m udp --dport 53 -m owner --uid-owner nobody -j ACCEPT
    # all other dns requests are routed to local resolver (dnsmasq)
    -A OUTPUT -p tcp -m tcp --dport 53 -j DNAT --to-destination 127.0.0.1
    -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1


    Третий способ — прописать необходимые адреса в
    /etc/hosts
    Ответ написан
    Комментировать