Часто при удаленной работе требуется организовать доступ сотрудника к корпоративной сети. Делается это обычно при помощи построения VPN канала. Часто используется пакет OpenVPN установка и настройка которого довольно просты.
Для доступа будут использоваться клиентский и серверный сертификаты и приватные ключи.
Помимо доступа к корпоративным ресурсам VPN может использоваться для сокрытия IP адреса и обхода любых блокировок.
OpenVPN установка и настройка на Ubuntu
Установим необходимые пакеты стандартным способом — из репозитория
apt-get install openvpn openssl iptables easy-rsa
Создаем каталог, переходим в него и копируем все содержимое /usr/share/eary-rsa, оно было добавлено при установке пакета на предыдущем шаге
mkdir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
cp -r /usr/share/eary-rsa/* /etc/openvpn/easy-rsa
Корректируем настройки локализации в файле vars
mcedit vars
export KEY_COUNTRY=»RU»
…
Указываем подходящие параметры в директивах определяющих страну, город, организацию, отдел организации и email.
Также требуется задать имя сервера
export KEY_NAME=»server»
Несколькими последующими шагами мы создаем центр сертификации
source ./vars
Теперь при создании сертификатов будут подставляться данные указанные в файле vars.
./clean-all
./buld-ca
Последовательно несколько раз принимаем настройки указав произвольные данные
[ENTER]
[ENTER]
…
При создании ключа задаем имя сервера (server)
./build-key-server server
[ENTER]
[ENTER]
…
Задаем пароль
serverpassword
Теперь переходим к созданию ключа пользователя
source ./vars
./build-key-pass user1
В диалоге указываем имя пользователя и пароль, которые не должны совпадать с именем и паролем сервера
Чтобы обеспечить шифрование траффика создаем ключи Диффи—Хеллмана (также применяется при установке SSL сертификатов на Nginx )
./build-dh
И ключи для tls аутентификации
openvpn —genkey —secret keys/ta.key
Создаем каталог под сертификаты и ключи пользователя
mkdir -p /etc/openvpn/keys
Копируем сгенерированные файлы, относящиеся к серверу
cp -r server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/
И файлы, относящиеся к пользователю
cp -r user* ca.key vpn.crt dh2048.pem vpn.key ca.crt ta.key /etc/openvpn/keys
Создаем конфигурационный файл
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/vpn.conf
Создадим базовый конфиг openvpn
Сначала приведен весь файл, затем объяснения основных директив
mcedit server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
server 10.0.0.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
comp lzo
verb 3
client-config-dir ccd
status serbername-status.log
log /var/log/server.log
sndbuf 0
rcvbuf 0
ns-cert-type server
resolv-retry infinite
push «redirect-gateway def1»
push «dhcp-options DNS 8.8.8.8»
Указывается порт и используемый протокол, а также тип подключения — tun в данным случае — используется в большинстве случаев (для построения мостов применяется tub — отличие в необходимости )
port 1194
proto udp
dev tun
ca ca.crt
cert servername.crt
key servername.key
dh dh2048.pem
tls-auth ta.key 0
Указываем имена файлов сертификатов и ключей и tls-auth ta.key 0 — на стороне клиента будет тот же параметр, но с — 1
Задаем шифрование
cipher AES-256-CBC
server 10.0.0.0 255.255.255.0
Адрес клиенту будет выдаваться из диапазона, указанного на последнем шаге
По прошествии 120 секунд после обрыва связи будет производиться попытка переподключения
keepalive 10 120
persist-key
persist-tun
Последняя опция обеспечит восстановление канала после обрыва связи
Включаем компрессию
comp lzo
Уровень «подробности» логов — от 1 до 9
verb 3
client-config-dir ccd
status serbername-status.log
log /var/log/servername.log
sndbuf 0
rcvbuf 0
resolv-retry infinite
Не делать перерывы между попытками переподключения
ns-cert-type server
Это параметр, позволяющий предотвратить перехват трафика
Убираем ограничения буфера
push «redirect-gateway def1»
Включаем перенаправление трафика в канал
push «dhcp-options DNS 8.8.8.8»
Настройка пакета ограничивается созданием конфигурационного файла
Перезапускаем сервис
service openvpn restart
В случае возникновения неполадок в работе можно запускать openvpn указывая созданный файл
openvpn —config server.conf
netstat -npl
Разрешаем форвардинг пактов IP v4
mcedit /etc/sysctl.conf
net.ipv4.ip_foreward=1
sysctl -p
Перезапускаем сервер или выполняем команду
echo '1' > /proc/sys/net/ipv4/conf/all/forewarding
Производим настройку iptables для работы OpenVPN
iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
iptables-save
atp-get install iptables-persistent
service iptables-persistent start
Перезапускаем и проверяем работу iptables-persistent
shutdown -r now
netstat -npl
iptables -L -t nat
Теперь создаем конфигурационный файл для пользователя
cd /etc/openvpn/ccd
Он практически идентичен конфигурационному файлу сервера
mcedit user1.conf
client
dev tun
proto udp
remote vpnserver_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert user1.crt
key user1.crt
tls-auth ta.key 1
cipher AES-256-CBC
ns-cert-type server
comp-lzo
log user1.log
verb 3
sndbuf 0
rcvbuf 0
Упаковываем конфигурационные файлы пользователя в архив отправляем их на пользовательский ПК тем или иным способом
cd /etc/openvpn/ccd
tar -cvf user1.conf user1.crt user1.key ta.key ca.cert user1.tar
Если у пользователя статический IP адрес можно использовать scp, если нет FileZilla и sftp
scp tar.tar user1@ip
Переходим на компьютер пользователя
Распаковываем архив
tar -xvf user1.tar
sudo openvpn —config user1.conf
Вводим пароль пользователя
Проверяем IP адрес
curl https://www.whatismyip.com/my-ip-information/
Убеждаемся в том, что сейчас работаем через VPN
Прерываем связь комбинацией клавиш CTRL+C
Можно подключаться не через консоль, а использовать Network Manager. В качестве VPN в этом случае нужно указывать vpnserver_ip:1194:udp
Также подключиться можно и с Windows клиента, однако эта возможность рассматриваться эта будет).
При работе через VPN могут появиться небольшие задержки, которые можно измерить. Они вызваны особенностями работы сети.