Будем устанавливать и настроивать openvpn сервер на CentOS
Сначала необходимо проверить наличе tun устройства, так как на VPS его может не быть
1 |
ls /dev/net/ |
вывод должен быть такой
1 2 |
[root@vpn 2.0]# ls /dev/net/ tun |
Если вы не обнаружили файл устройства tun, обратитесь к своему провайдеру.
В стандартных репозитория CentOS и RHEL пакета openvpn нет. Поэтому сначала подключите репозитрий rpmforge
- Устанавливаем openvpn
1yum install openvpn -y
- Переходим директорию openvpn
1cd /etc/openvpn/ - Скопируем для удобства управляющие скрипты
1cp -R /usr/share/doc/openvpn-2.2.2/easy-rsa . - Редактируем файл vars, меняем
1export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
На
1export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnfДалее меняем следуюшие значения на свои
12345export KEY_COUNTRY="US"export KEY_PROVINCE="CA"export KEY_CITY="SanFrancisco"export KEY_ORG="Fort-Funston"export KEY_EMAIL="me@myhost.mydomain" - Даем управляющим скриптам права на исполнение
1chmod +x build* && chmod +x clean-all && chmod +x pkitool
- Перечитываем значения переменных
12source ./vars./clean-all
- Генерируем мастер-сертификат, ключ Диффи-Хеллмана, сертификат и ключ сервера
123./build-ca./build-dh./build-key-server server
- Копируем директорию с ключами
1cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/
- Создаем файл /etc/openvpn/server.conf следующиего содержания
123456789101112131415161718192021222324252627282930313233local <IP> #ip сервераport 1194proto udp #udp быстрее, чем tcp, но на плохих каналах лучше использовать tcpdev tun0ca /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/server.crtkey /etc/openvpn/keys/server.key #Секретный ключdh /etc/openvpn/keys/dh1024.pemserver 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 ccdroute 10.10.1.0 255.255.255.0route 192.168.0.0 255.255.255.0 #client1 subnetroute 192.168.2.0 255.255.255.0 #client2 subnetroute 192.168.4.0 255.255.255.0 #client3 subnetroute 192.168.5.0 255.255.255.0 #client4 subnetkeepalive 10 120cipher BF-CBC # Blowfish (default)comp-lzopersist-keypersist-tunstatus /var/log/openvpn-status.loglog-append /var/log/openvpn.logverb 3mute 20client-to-clienttun-mtu 1500tun-mtu-extra 32fragment 1300 #только если udpmssfix 1300 #только если udpdaemonmax-clients 100
- Запускаем туннель
1service openvpn start
В случае возникновения ошибок изучайте журнал /var/log/openvpn.log
- Добавляем сервис openvpn в автогзагрузку
1chkconfig openvpn on
- На данный момент у вас должен появится активный интерфейс
tun0 и маршруты в ваши подсети, а также сервис openvpn должен слушать по указанному порту. Проверить можно следующими командами 123ifconfigroute -nnetstat -plantu | grep openvpn - Генерируем ключи и сертификаты для клиентов
1./build-key <client_name>
Не забудьте их скопировать из /etc/openvpn/easy-rsa/2.0/keys в /etc/openvpn/keys иначе вы рискуете их потерять после выполнения скрипта ./clean-all
- Для маршрутизации между клиентскими сетями необходимо в папке /etc/openvpn/ccd создать файлы клиентов следующего содержания
123ifconfig-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" #Сеть в которую необходима маршрутизация из сети клиента
Имя файла должно совпадать с ключем и сертификатом
- Конфигурационный файла клиента /etc/openvpn/client.conf
123456789101112131415161718remote vpn.server.com 1194clientdev tunproto udpresolv-retry infinitenobindpersist-keypersist-tunca /etc/openvpn/ca.crtcert /etc/openvpn/client.crtkey /etc/openvpn/client.keykeepalive 10 120comp-lzoverb 3mute 20tun-mtu 1500tun-mtu-extra 32fragment 1300
- Открываем порт на iptables и пробуем подключиться
1iptables -I INPUT 5 -p udp --dport 1194 -j ACCEPT
В моем случае правило необходимо было добавить под номером 5. Подробнее о IPTABLES можно почитать здесь.
- Теперь нам необходимо разрешить форвардинг. В файле /etc/sysctl.conf меняем
1net.ipv4.ip_forward = 0
НА
1net.ipv4.ip_forward = 1Чтобы изменения вступили в силу
1sysctl -pПроверяем
12cat /proc/sys/net/ipv4/ip_forward1Разрешаем форвардинг на файерволе
1iiptables -I FORWARD 1 -i tun0 -o tun0 -j ACCEPTПриблизительно так должен выглядеть вывод iptables -L -v- n
1234567891011121314151617[root@vpn ~]# iptables -L -v -nChain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination97877 47M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED381 22378 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/00 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/03937 234K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:225 210 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:11941204K 132M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination0 0 ACCEPT all -- tun0 tun0 0.0.0.0/0 0.0.0.0/0140 81340 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 50 packets, 6502 bytes)pkts bytes target prot opt in out source destination - Для того, чтобы правила iptables применялись после перезагрузки необходимо выполнить
1service iptables save