Gentoo: OpenVPN - подключаемся к серверу

В последнее время мне часто приходится работать вдали от дома и своего сервера, но при этом нужно иметь доступ к ресурсам, которые не расшарены во внешний мир (например samba шары), по этому было решено поднять vpn сервер, подключаясь к которому работать по привычной схеме "как дома" имея такой же удобный доступ ко всему необходимому. В качестве vpn сервера был выбран OpenVPN, как одно из лучших решений на данный момент. О его настройке и пойдёт речь.

Устанавливаем OpenVPN

korp # emerge openvpn easy-rsa

Добавляем в автозагрузку

korp # rc-update add openvpn default

Переопределяем переменные, для генерации ключей

korp# nano /usr/share/openvpn/easy-rsa/vars
export EASY_RSA="`pwd`"
export KEY_CONFIG="$EASY_RSA/whichopensslcnf $EASY_RSA"
export KEY_DIR="/etc/openvpn/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export KEY_SIZE=1024
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="RU"
export KEY_PROVINCE="XX"
export KEY_CITY="MyTown"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="my@mail.jp"
korp# source ./vars

!если вы получаете ошибку вида openssl.cnf: line 5: HOME: command not found
...
обратите внимание на параметр export KEY_CONFIG="". Раньше его значение было $EASY_RSA/openssl.cnf, а теперь стало $EASY_RSA/whichopensslcnf $EASY_RSA. Будьте внимательны, если у вас файл с переменными остался от старой версии.

korp# touch /etc/openvpn/keys/index.txt
korp# echo 01 > /etc/openvpn/keys/serial

Генерируем ключи

korp# cd /etc/openvpn/keys
korp# openvpn --genkey --secret ta.key
korp# ./build-ca
korp# ./build-dh
korp# ./build-key-server server
korp# ./build-key client1

Всем клиентам предоставляются ключи
ta.key
ca.crt
dh1024.pem

Для каждого клиента необходимо отдельно генерировать собственный ключ
client1.crt
client1.csr
client1.key

Конфигурируем сервер

korp# nano /etc/openvpn/openvpn.conf
#################################################
#           OpenVPN 2.0 config file             #
#################################################
#Лог
log /var/log/openvpn/openvpn.log 

#Лог состояния
status /var/log/openvpn/status.log

#Порт
port 1194

#Протокол
proto tcp-server

#Тип интерфейса
dev tap0

#Режим работы сервера
mode server

#Режим TLS
tls-server

#TLS-ключ
tls-auth /etc/openvpn/keys/ta.key 0

#Говорим серверу пинговать клиентов раз в 10 секунд и в случае отсутствия ответа в течении 120 секунд - разрывать соединение
keepalive 10 120

#Серверу назначается первый адрес из первой подсети
ifconfig 10.8.0.1 255.255.255.0

#Клиентам
ifconfig-pool 10.8.0.10 10.8.0.100

#Системе объявляется маршрут на всю OpenVPN-сеть
route 10.8.0.0 255.255.255.0

#Передаётся маршрут на всю OpenVPN-сеть клиентам
push "route 192.168.0.0 255.255.255.0"

#Шлюз длы вышеуказанных маршрутов
push "route-gateway 10.8.0.1"

#Расположение сертификатов
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem

#включаем сжатие
comp-lzo

Думаю конфиг понятен из камментов, уточню по поводу ip адресов:
192.168.0.0/24 это физическая домашняя сеть
10.8.0.0/24 vpn сеть
10.8.0.1 ip виртуальной сетевой карты сервера
10.8.0.10-10.8.0.100 диапазон адресов, отдающихся клиентам

Запускам OpenVPN

korp# etc/init.d/openvpn start

После этого необходимо на клиентскую машину установить клиент OpenVPN, которому нужно подсунуть сгенерированные ключи и конфиг:

#################################################
#           OpenVPN 2.0 config file             #
#################################################

#Режим работы
client

#Тип интерфейса
dev tap

#Протокол
proto tcp

#Адресс сервера и порт
remote your_server 1194

#Разрешение определения имени хоста OpenVPN сервера
resolv-retry infinite

#Не привязываемся к конкретному локальному порту
nobind

#Не перечитывать ключ при сбросе соединения
persist-key
persist-tun

#Сертификаты
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1

#принимать команды push от сервера.то есть позволять переконфигурировать клиента
pull

#Включить сжатие
comp-lzo

После этого пробуем подключиться и следим за логами на клиенте и сервере.

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