Потребность в VPN сервере может быть очень разной, начиная от подключения своего телефона, заканчивая объединением филиалов и серверов. Не важно являетесь вы IT-специалистом или нет, он может обеспечить вам защищенный доступ к сети и использовать интернет этой сети. Например если вы находитесь в другой стране где действуют свои ограничения на доступ, можно подключиться через VPN и обойти все ограничения. Может вы работаете в организации где доступ предоставлятся через Proxy и действуют масса ограничений? Тогда OpenVPN поможет обойти это.
Прежде всего вам необходимо иметь сервер или ПК с Ubuntu 18.04.
Обновим пакеты и установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях, поэтому используем пакетный менеджер для его установки.
sudo apt update
sudo apt install openvpn easy-rsa -y
Пакет easy-rsa необходим для создания сертификатов, сейчас мы их и будем создавать.
Копиреум шаблонную директорию:
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
Настраиваем под себя переменные центра сертификации
nano -w vars
Нам нужно изменить всего несколько переменных:
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Primorye"
export KEY_CITY="Vladivostok"
export KEY_ORG="My LTD"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="IT"
Подготовка к созданию сертификатов, выполняем следующее:
echo KEY_CONFIG=`pwd`/openssl-1.0.0.cnf >> ./vars
source ./vars
./clean-all
Создаем корневой сертификат (CA) центра сертификации:
./build-ca
Нажимаем ENTER, когда нас спросят про "Common Name" и "Name", вписывем server.
Далее создаем сертификат сервера:
./build-key-server server
Делаем все тоже самое, что и при создании CA. В самом конце отвечам y для подписи и создания сертификата, пароль можно не указывать
Создаем ключ Диффи-Хеллмана:
./build-dh
Создаем подкпись HMAC для усиления способности сервера проверять целостность TLS:
openvpn --genkey --secret keys/ta.key
Учтите, что если вы планируете подключать Mikrotik к своему серверу, тогда это не требуется т.к. микротик не поддерживает данную функцию на текущий момент.
Создаем клиента, который будет иметь доступ к серверу:
./build-key client1
Поле "Common Name" и "Name" указваем так же, как и название клиента (в нашем случае client1), пароль можно не ставить (по желанию), В самом конце отвечаем два раза y, все сертификат готов.
Если необходимо дополнительная защита паролем, тогда клиента необходимо создавать командой:
./build-key-pass client1
Копируем сгенерированные сертификаты сервера в директорию с OpenVPN:
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Далее нам надо настроить сам сервер, учтите один момент, если вы будете подключать Mikrotik (RouterOS) как клиент к своему серверу, тогда используйте "Конфигурацию №2", если RouterOS не планируется, тогда используйте "Конфигурацию №1".
Открываем файл в текстовом редакторе:
sudo nano -w /etc/openvpn/server.conf
И вставляем одну из конфигураций ниже.
port 1194
proto udp
topology subnet
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
tls-auth /etc/openvpn/ta.key 0
key-direction 0
cipher AES-128-CBC
auth sha256
server 192.168.254.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
client-config-dir /etc/openvpn/ccd
status /etc/openvpn/openvpn-status.log
log-append /etc/openvpn/openvpn.log
# Клиенты будут использовать OpenVPN сервер как основной шлюз
push "redirect-gateway def1"
# Клиенты могут видеть друг друга
client-to-client
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
verb 0
mute 10
Самое основное на что следует обратить внимание - это параметр server 192.168.254.0 255.255.255.0 тут вы указываете подсеть которую будет использовать OpenVPN. Далее push "redirect-gateway def1" - клиенты будут использовать сервер OpenVPN как основной шлюз сети, если вам это не нужно, тогда просто закоментируйте эту сторку. Параметр client-to-client разрешает видеть клиентам друг друга, вы можете закоментировать эту строку если не хотите, чтобы клиенты имели доступ к друг другу.
Если планируется подключать Mikrotik, тогда ниже я привел конфигурацию с его поддержкой. Все альтернативно "Конфигурацит №1" кроме некоторых пунктов.
port 1194
# Mikrotik (RouterOS) поддерживает только TCP
proto tcp
# UDP коментируем
;proto udp
topology subnet
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
# tls-auth и key-direction Mikrotik (RouterOS)
# не поддерживает, коментируем.
;tls-auth /etc/openvpn/ta.key 0
;key-direction 0
cipher AES-128-CBC
# Поддержка только md5 и sha1
auth sha1
# SHA256 коментируем
;auth sha256
server 192.168.254.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
client-config-dir /etc/openvpn/ccd
status /etc/openvpn/openvpn-status.log
log-append /etc/openvpn/openvpn.log
# Клиенты будут использовать OpenVPN сервер как основной шлюз
push "redirect-gateway def1"
# Клиенты могут видеть друг друга
client-to-client
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
verb 0
mute 10
Сохраняем CTRL+o и выходим CTRL+x.
Разрешаем перенаправление трафика IPv4:
sudo sed -i -- 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
Сейчас необходимо узнать наш публичный интерфейс, вы можете посмотреть его командой ip route | grep default, после слова dev идет название (что-то вроде eth0 или enp0s1, либо еще как то).
Я подготовил команду, которая выведет вам название этого интерфейся (если вам лень смотреть самому):
i=0; for val in `ip route | grep default | head -n 1`; do if [[ $i == '4' ]]; then dev=$val; fi; i=$((i+1)); done; echo $dev
Теперь добавим правила трансляции адресов в файрвол, откроем файл для редактирования:
sudo nano -w /etc/ufw/before.rules
И добавим в самое начало файла строки:
# OpenVPN Rules
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to provider
-A POSTROUTING -s 192.168.254.0/24 -o eth0 -j MASQUERADE
COMMIT
# END OpenVPN Rules
За место eth0 пишем свой интерфейс. Так же обратите внимание, если в настройках OpenVPN вы указывали другую подсеть (я указал 192.168.254.0) тогда вписываем свою.
Сохраняем CTRL+o и выходим CTRL+x.
Далее, разрешить фаерволу перенаправлять пакеты:
sudo sed -i -- 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Далее открываем порт, если вы использовали конфигурацию №1 - тогда udp, если №2 - тогда tcp:
sudo ufw allow 1194/udp # либо tcp
На всякий случай, разрешим SSH:
sudo ufw allow OpenSSH
Деактивируем и активируем файрвол:
sudo ufw disable
sudo ufw enable
Пора включить наш сервер:
sudo systemctl start openvpn@server
Убедимся, что сервер успешно запущен командой:
sudo systemctl status openvpn@server
Если все получилось, в выводе статусе Active должно быть написано active (running).
Добавляем сервер в автозагрузку:
sudo systemctl enable openvpn@server
Настройка сервера завершена.
Иногда возникают проблемы с кластером PROXMOX, чаще всего это происходит из-за непонимания того как этот кластер вообще работает. В случае когда чистые сервера объединяются в новый кластер как правило проблем никаких не возникает, но ситуации бывают разные.
В данной статье хочу поэтапно объяснить как установить macOS Mojave 10.14 на гипервизор PROXMOX 6.1. Лично мне macOS понадобился для поднятия GitLab Runner, возможно так же использовать как физическую машину прокинув USB-порты, а так же видеокарту. Хочу сразу предупредить, в 10.14 есть проблемы с драйверами видеокарт NVIDIA т.к. компания не спешит писать под нее драйвера. Так же для PCI Passthrough необходимо будет настроить соответственно Clover.
В этой статье, я объясню, как создать базовое приложение на Node.js используя типизированный язык TypeScript. Пример исходного кода статьи доступен в репозитории для скачивания.
Запускаем программы при запуске Mac OS X используя Launchd, создаем свой демон для контролируемого пуска и перезапуска программы в случае завершения. Launchd — это универсальный лаунчер — один из важнейших компонентов системы macOS.