Установка OpenVPN
apt-get install -y openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
nano ./varsМеняем строки и сохраняем файл:
export KEY_SIZE=1024 # Длина ключа export KEY_EXPIRE=3650 # Срок действия ключа в днях # описание сертификатов по умолчанию export KEY_COUNTRY="RU" export KEY_PROVINCE="RU" export KEY_CITY="Kiev" export KEY_ORG="http://example.com" export KEY_EMAIL="org@example.com"Инициализируем переменные, чистим папку keys и создаем сертификаты:
. ./vars . ./clean-all ./build-ca # корневой сертификат ./build-key-server server # сертификат сервера ./build-dh # ключ Диффи ХельманEсли вы планируете использовать tls-auth, который позволит скрыть порт, на котором сервер слушает vpn подключения, защитить от DoS атак и кое-чего еще, то выполните еще и эту строку:
openvpn --genkey --secret ./keys/ta.key* Включили tls-auth? Тогда не забудьте передать ta.key клиентам, его надо будет положить рядом с сертификатом пользователя.
cp ./keys/ca.crt /etc/openvpn cp ./keys/server.crt /etc/openvpn cp ./keys/server.key /etc/openvpn cp ./keys/dh1024.pem /etc/openvpnДля tls-auth, выполните и эту строку:
cp ./keys/ta.key /etc/openvpnСоздадим сертификаты пользователей, сколько вам нужно (вводить данные не обязательно, поля будут принимать значения переменных по умолчанию, достаточно просто нажимать Enter. В конце будет предложено ввести пароль (Enter export password), он защитит ваш сертификат от импорта недоброжелателями, хорошенько его запомните)
./build-key-pkcs12 windows ./build-key-pkcs12 debian ./build-key-pkcs12 android* После этого в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ появятся ваши сертификаты android.*, windows.* и другие.
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ # . ./vars # ./build-key-pkcs12 newuser1 # ./build-key-pkcs12 newuser2
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf nano /etc/openvpn/server.confВсе настройки по умолчанию нас устроят, меняем, раскомментируем и сохраняем:
local IP_АДРЕС_ВАШЕГО_СЕРВЕРА push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client # раскомментируйте, если хотите иметь доступ между клиентами внутри вашего VPN log /var/log/openvpn.log # раскомментируйте, если нужны логи duplicate-cn # раскомментируйте, если хотите использовать один сертификат для всех пользователей # Для включения tls-auth, необходимо добавить (без #) # tls-auth ta.key 0 # Если хотите спрятать сервер от китайских ботов, поменяйте стандартный порт на любой другой. Только не забудьте прописать этот же порт в настройках клиента. port 1194Применим настройки файрвола через rc.local, можно сделать иначе, но остановимся на этом варианте:
nano /etc/rc.localДобавляем строки до exit 0 и сохраняем:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADEРедактируем файл sysctl.conf:
nano /etc/sysctl.confРаскомментируем строчку:
net.ipv4.ip_forward=1Отправляем на перезагрузку, чтобы сразу убедиться, что автозапуск работает.
rebootВсё, серверная часть готова. Уже можно подключаться. Для перехода к следующим этапам, надо выгрузить с нашего сервера сертификаты из папки: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
remote IP_вашего_сервера 1194 client dev tun ping 10 comp-lzo proto udp tls-client remote-cert-tls server pkcs12 windows.p12 verb 3 pullЕсли вы включили tls-auth на сервере, добавьте в конфиг эту строку:
tls-auth ta.key 1Создаем batch скрипт (start_my_vpn.cmd) для запуска VPN сессии:
cd C:\some\path\openvpn\ "C:\Program Files\OpenVPN\bin\openvpn.exe" --config C:\some\path\openvpn\windows.ovpnСкрипт и конфиг кладем в одну папку, в эту же папку кидаем windows.p12 сертификат, брать его тут:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/windows.p12Готово, ярлык на скрипт кидаем на рабочий стол, запускаем от имени администратора или от пользователя с его правами, при запуске он попросит ввести пароль для «импорта» сертификата.
Enter Private Key Password:Если пароль верный, то несколько секунд и мы подключились:
Oct 9 21:25:35 Initialization Sequence CompletedДля автостарта туннеля без ввода пароля, можно вместо p12 использовать связку сертификатов ca.crt, windows.key и windows.crt, выглядит это так, вместо:
pkcs12 windows.p12Пишем:
ca ca.crt cert windows.crt key windows.keyФайлы брать все там же:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ и положить в папку с windows.ovpn и start_my_vpn.cmd.
apt-get install openvpnCоздаем папку, в любом удобном месте для хранения сертификатов и скрипта подключения к VPN:
mkdir /opt/openvpnCоздаем скрипт подключения:
echo 'cd /opt/openvpn /usr/sbin/openvpn --config /opt/openvpn/debian.ovpn ' > /opt/openvpn/start_vpn.runСоздаем файл конфигурации:
echo remote IP_ВАШЕГО_СЕРВЕРА 1194 client dev tun ping 10 comp-lzo proto udp tls-client remote-cert-tls server pkcs12 debian.p12 verb 3 pull > /opt/openvpn/debian.ovpnЕсли вы включили tls-auth на сервере, добавьте в конфиг эту строку:
tls-auth ta.key 1Файл debian.p12 берем как обычно на сервере /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
chmod +x /opt/openvpn/start_vpn.runГотово. Не забудьте положить debian.p12 или ca.crt, debian.key и debian.crt в папку со скриптом и файлом конфигурации.
/opt/openvpn/start_vpn.run
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/android.p12Запускаем OpenVPN for Android.
Basic > Server Address: IP адрес вашего VPN сервера, либо имя домена, если вы его привязали Type: PKCS12 File Select: Выбираем наш файл *.p12 PKCS12 Password: вводим пароль импорта сертификата, заданный при его генерации. upd: используйте последнюю версию приложения, в ней проверка remote-cert-tls server включена по умолчанию, либо включите вручную в настройках авторизации проверку сертификата сервера Если вы включили tls-auth на сервере, включите в настройках профиля tls-auth и выберите ta.keyГотово. Подключаемся и проверяем, текущий статус подключения доступен в панели уведомлений (можно добавить на рабочий стол ярлык для конкретного VPN, он будет стартовать сразу по клику на ярлык, без лишних телодвижений. Если хотите чтобы при каждом подключении спрашивало пароль, просто не сохраняйте его в настройках профиля).
ping 10.8.0.1Проверяем свой внешний IP-адрес на каком-нибудь сайте вроде 2ip.ru (должен отображаться адрес вашего сервера).