Потребовалось мне тут на досуге, реализовать VPN сеть для пары десятков компьютеров, находящихся в разных точках Земли. Для этого выбрал OpenVPN, а для сервера использовал свой VPS, который видят все.
Итак, первое что нам необходимо, это установить OpenVPN
apt-get install openvpn
После этого, настрйока сервера и клиентов сводится к генерации ключей, раздачи их клиентам и написании 2-х конфигов (для сервера и клиентов).
Идем в папку /usr/share/openvpn/easy-rsa/2.0 (в этйо папке хранятся скрипты для создания ключей)
cd /usr/share/openvpn/easy-rsa/2.0
Теперь, начнем генерацию ключей:
#. Редактируем файл vars, который хранит значения по-умолчанию (чтобы не вводить кучу раз)
nano vars
В самом низу, меняем
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Moscow oblast"
export KEY_CITY="Moscow"
export KEY_ORG="my-network"
export KEY_EMAIL="root@mynet.ru"
Теперь экспортиуре этот файл и генерируем корневой сертификат:
source ./vars
./clean-all
./build-ca
После, генерируем ключ сервера:
./build-key-server server
На последние 2 вопроса, отвечаем Y44
После, генерируем ключ Диффи-Хэлмана
./build-dh
Он делается несколько минут, придется подождать
Теперь, генерируем ключи для каждого клиента
./build-key client_name
После этого, отдаем клиентам их ключи, а также файл ca.crt
Для большей защиты, на файлы server.key установить права 600, а на server.crt и dh1024.pem права 644
Теперь надо написать конфиг сервера.
port 1194 #порт, на котором работать (рекомендуемый)
proto udp #протокол, можно tcp
dev tun #устройство, которое будет использоваться
ca путь_до_файла_ca.crt
cert путь_до_файла_server.crt
key путь_до_файла_server.key
dh путь_до_файла_dh1024.pem
server 10.10.10.0 255.255.255.0 #подсеть и маска для ВПН сети, из нее будут выдаваться адреса клиентам
client-to-client #разрешаем общение между клиентами
ifconfig-pool-persist /etc/openvpn/ipp.txt #это позволит выдавать клиентам один и тот же IP
comp-lzo #компрессия
max-clients 28 #максимальное количество клиентов
keepalive 10 120 #каждые 10 секунд пинг, если нет ответа 120 секунд, то откидывать клиента
persist-key #хранить ключи в памяти, не перечитывать с диска
persist-tun #позволять держать соединение
status /tmp/openvpn-status.log #статус сервера
verb 6 #уровень отладки (нормально 2)
log-append /var/log/openvpn.log #файл логов
Теперь нам надо подготовить конфиг для клиентов.
На Windows, OpenVPN устанавливается в C:Program FIlesOpenVPN, а конфиг в папке config (логично :). Создадим в ней новый конфиг openvpn.ovpn и кинем в нее же сгенерированные ключи и сертификаты.
Впишем в конфиг следующее:
client #указываем что мы клиент
nobind #не цепляться за интерфейс
dev tun #используемое устройство
proto udp #протокол
remote IP_сервера порт #куда конектиться
resolv-retry infinite #количество попыток, infinite-бесконечно
persist-key #хранить ключ в памяти
persist-tun #держать соединение
comp-lzo #сжатие
ns-cert-type server
ca ca.crt #ключи
cert название.crt
key название.key
После этого, запустим OpenVPN, кликнем Connect, дождемся, когда компьютерики станут зелеными (это будет значить, что к серверу успешно подключились). Теперь можно открыть cmd и пропинговать шлюз, если пакеты ходят, то значит что все хорошо :)