openVPN сервер под управлением CentOS

Будем устанавливать и настроивать openvpn сервер на CentOS
Сначала необходимо проверить наличе tun устройства, так как на VPS его может не быть

ls /dev/net/

вывод должен быть такой

[root@vpn 2.0]# ls /dev/net/
tun

Если вы не обнаружили файл устройства tun, обратитесь к своему провайдеру.
В стандартных репозитория CentOS и RHEL пакета openvpn нет. Поэтому сначала подключите репозитрий rpmforge

    1. Устанавливаем openvpn
      yum install openvpn -y

      openvpn CentOS

  1. Переходим директорию openvpn
    cd /etc/openvpn/
  2. Скопируем для удобства управляющие скрипты
    cp -R /usr/share/doc/openvpn-2.2.2/easy-rsa .
  3. Редактируем файл vars, меняем
    export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`

    На

    export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

    Далее меняем следуюшие значения на свои

    export KEY_COUNTRY="US"
    export KEY_PROVINCE="CA"
    export KEY_CITY="SanFrancisco"
    export KEY_ORG="Fort-Funston"
    export KEY_EMAIL="me@myhost.mydomain"
  4. Даем управляющим скриптам права на исполнение
    chmod +x build* && chmod +x clean-all && chmod +x pkitool
  5. Перечитываем значения переменных
    source ./vars
    ./clean-all
  6. Генерируем мастер-сертификат, ключ Диффи-Хеллмана, сертификат и ключ сервера
    ./build-ca
    ./build-dh
    ./build-key-server server
  7. Копируем директорию с ключами
    cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/
  8. Создаем файл /etc/openvpn/server.conf следующиего содержания
    local  #ip сервера
    port 1194
    proto udp #udp быстрее, чем tcp, но на плохих каналах лучше использовать tcp
    dev tun0
    ca /etc/openvpn/keys/ca.crt
    cert /etc/openvpn/keys/server.crt
    key /etc/openvpn/keys/server.key #Секретный ключ
    dh /etc/openvpn/keys/dh1024.pem
    server 10.10.1.0 255.255.255.0 #Эти адреса будут назначаться виртуальным интерфейсам
    ifconfig-pool-persist /var/log/openvpn.ipp.txt
    #push "route 192.168.3.0 255.255.255.0" #Сеть за VPN сервером
    client-config-dir ccd
    route 10.10.1.0 255.255.255.0
    route 192.168.0.0 255.255.255.0 #client1 subnet
    route 192.168.2.0 255.255.255.0 #client2 subnet
    route 192.168.4.0 255.255.255.0 #client3 subnet
    route 192.168.5.0 255.255.255.0 #client4 subnet
    keepalive 10 120
    cipher BF-CBC        # Blowfish (default)
    comp-lzo
    persist-key
    persist-tun
    status /var/log/openvpn-status.log
    log-append  /var/log/openvpn.log
    verb 3
    mute 20
    client-to-client
    tun-mtu 1500
    tun-mtu-extra 32
    fragment 1300 #только если udp
    mssfix 1300 #только если udp
    daemon
    max-clients 100
  9. Запускаем туннель
    service openvpn start

    В случае возникновения ошибок изучайте журнал /var/log/openvpn.log

  10. Добавляем сервис openvpn в автогзагрузку
    chkconfig openvpn on
  11. На данный момент у вас должен появится активный интерфейс tun0 и маршруты в ваши подсети, а также сервис openvpn должен слушать по указанному порту. Проверить можно следующими командами
    ifconfig
    route -n
    netstat -plantu | grep openvpn
  12. Генерируем ключи и сертификаты для клиентов
    ./build-key

    Не забудьте их скопировать из /etc/openvpn/easy-rsa/2.0/keys в /etc/openvpn/keys иначе вы рискуете их потерять после выполнения скрипта ./clean-all

  13. Для маршрутизации между клиентскими сетями необходимо в папке /etc/openvpn/ccd создать файлы клиентов следующего содержания
    ifconfig-push 10.10.1.4 10.10.10.1" #Здесь первое значение - IP адрес клиента (если хотите сделать его статическим), второе - адрес туннеля
    iroute 192.168.10.0  255.255.255.0 #Сеть за клиентом
    push "route 192.168.2.0 255.255.255.0" #Сеть в которую необходима маршрутизация из сети клиента

    Имя файла должно совпадать с ключем и сертификатом

  14. Конфигурационный файла клиента /etc/openvpn/client.conf
    remote vpn.server.com 1194
    client
    dev tun
    proto udp
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/client.crt
    key /etc/openvpn/client.key
    keepalive 10 120
    comp-lzo
    verb 3
    mute 20
    tun-mtu 1500
    tun-mtu-extra 32
    fragment 1300
  15. Открываем порт на iptables и пробуем подключиться
    iptables -I INPUT 5 -p udp --dport 1194 -j ACCEPT

    В моем случае правило необходимо было добавить под номером 5. Подробнее о IPTABLES можно почитать здесь.

  16. Теперь нам необходимо разрешить форвардинг. В файле /etc/sysctl.conf меняем
    net.ipv4.ip_forward = 0

    НА

    net.ipv4.ip_forward = 1

    Чтобы изменения вступили в силу

    sysctl -p

    Проверяем

    cat /proc/sys/net/ipv4/ip_forward
    1

    Разрешаем форвардинг на файерволе

    iiptables -I FORWARD 1 -i tun0 -o tun0 -j ACCEPT

    Приблизительно так должен выглядеть вывод iptables -L -v- n

    [root@vpn ~]# iptables -L -v -n
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
    97877   47M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
      381 22378 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
     3937  234K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
        5   210 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194
    1204K  132M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     all  --  tun0   tun0    0.0.0.0/0            0.0.0.0/0
      140 81340 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    Chain OUTPUT (policy ACCEPT 50 packets, 6502 bytes)
     pkts bytes target     prot opt in     out     source               destination
    
  17. Для того, чтобы правила iptables применялись после перезагрузки необходимо выполнить
    service iptables save

Один комментарий к “openVPN сервер под управлением CentOS”

Добавить комментарий

Ваш адрес email не будет опубликован.