- Объединение локальных сетей при помощи OpenVPN на VPS
- Шаг 1. Подготовка виртуального сервера
- Шаг 2. Установим OpenVPN при помощи скрипта openvpn-install.sh
- Шаг 3. Конфигурирование файла server.conf
- Шаг 4. Выгрузка файлов конфигураций клиентов
- Организация связи между серверами по OpenVPN на статических ключах
Объединение локальных сетей при помощи OpenVPN на VPS
Рассмотрим способ объединения двух локальных сетей (site to site) при помощи OpenVPN развернутого на VPS хостинг провайдера. Схема сети, следующая:
В качестве площадки для размещения серверной части OpenVPN можно использовать VPS/VDS с предоставляемым публичным IP–адресом. В нашем случае это будет хостинг-провайдер firstvds.ru. Виртуальный сервер с 1 Гб оперативной памяти, 20 Гб дискового пространства и выделенным публичным IP–адресом обойдется нам в 239 р./ месяц. Хостинг-провайдер позволяет выбрать предустановленный вариант ОС на виртуальном сервере. Будем использовать Ubuntu 22.04.
Для доступа к виртуальному серверу удобнее всего использовать протокол SSH и клиент удаленного подключения Putty, параметры подключения можно найти на вкладке инструкция в разделе виртуальных серверов хостинг провайдера.
Шаг 1. Подготовка виртуального сервера
После первого подключения синхронизируем списки и обновим пакеты до новых версий:
Установим минимальный набор утилит, которые нам понадобятся:
$ sudo apt install nano mc net-tools
Далее создадим нового пользователя и дадим ему привилегии root, для этого необходимо выполнить следующие команды:
username замените на имя вашего пользователя.
Отключим доступ по SSH от root пользователя:
$ sudo nano /etc/ssh/sshd_config
Закомментируем строку #PermitRootLogin yes и сохраним изменения.
Установим ufw (простой фаервол), выполнив следующую команду:
Также нам нужно открыть затребованные порты, такие как SSH port 22, 80, 443, 993 и так далее:
Для включения фаервола воспользуемся следующей командой:
Состояние фаервола можно проверить, выполнив следующую команду:
Шаг 2. Установим OpenVPN при помощи скрипта openvpn-install.sh
$ wget https://git.io/vpn -O openvpn-install.sh
Запустим скрипт openvpn-install.sh для установки и настройки сервера OpenVPN в автоматическом режиме:
$ sudo bash openvpn-install.sh
Выполним простое конфигурирование выбрав необходимые параметры.
Протокол: TCP; Порт: 993, для того чтобы замаскироваться под Internet Message Access Protocol (IMAPS); ДНС сервер 1.1.1.1 или другой удобный для вас.
На последнем шаге указываем имя клиента (например, client1, client2, и т.д.). Нажимаем Enter, скрипт должен все успешно установить.
Для добавления нового клиента повторно выполните запуск скрипта и укажите Add a new client введя цифру 1.
Количество клиентов соответствует количеству локальных сетей и отдельных пользователей, которые необходимо объединить в одну виртуальную сеть.
Шаг 3. Конфигурирование файла server.conf
Далее необходимо выполнить ряд изменений в файле конфигурации OpenVPN сервера server.conf. Для этого его откроем в редакторе nano:
$ sudo nano /etc/openvpn/server/server.conf
Закомментируем строки начинающиеся на push и добавим следующие записи:
client-config-dir /etc/openvpn/server/ccd – укажем путь к настройка сетей клиентов;
route 192.168.0.0 255.255.255.0
route 192.168.43.0 255.255.255.0
Данными записями мы указываем серверу о наших локальных сетях 192.168.0.0/24 и 192.168.43.0/24. В вашем случае укажите все локальные сети, которые необходимо объединять.
client-to-client – разрешаем маршрутизацию между добавленными сетями.
push «route 192.168.0.0 255.255.255.0»
push «route 192.168.43.0 255.255.255.0»
Данными записями мы задаем настройки маршрутизации нашим клиентам. Сохраняем файл конфигурации (ctrl+o) и выходим (ctrl+x). Пример файла конфигурации:
Далее необходимо описать сетевую конфигурацию клиентов и создать соответствующие фалы в директории /etc/openvpn/server/ccd.
Данная директория не создается по умолчанию, создадим её при помощи следующих команд:
Далее перейдем в эту директорию и создадим файлы наших клиентов, названия должны совпадать с именами клиентов:
Добавим в него следующую запись:
iroute 192.168.0.0 255.255.255.0
То есть client1 находится в сети 192.168.0.0/24. Для других клиентов выполним аналогичные записи. Главное, чтобы имя файлов совпадало с именами клиентов.
Перезапустим службы OpenVPN:
$ sudo systemctl restart openvpn
Также для взаимодействия со службой OpenVPN имеются следующие команды:
$ sudo systemctl stop openvpn – остановка службы;
$ sudo systemctl start openvpn – запуск службы.
Шаг 4. Выгрузка файлов конфигураций клиентов
Далее необходимо выгрузить с виртуального сервера сконфигурированные файлы клиентов (.ovpn). По умолчания файлы (.ovpn) создаются в директории root, их необходимо скопировать в директории /home/username. К данной директории можно подключиться сторонним SFTP клиентом. Для этого удобнее всего воспользоваться клиентом WinSCP. Подключимся к нашему серверу по протоколу SFTP, указав IP–адрес виртуального сервера и данные авторизации.
Установим OpenVPN клиенты на подключаемые windows машины и передадим им соответствующие конфигурационные файлы (.ovpn) и установим подключение.
После установки соединений в windows прописывается необходимая маршрутизация, для вывода в командной строке необходимо прописать команду route print. Пример вывода списков маршрутов с клиента 1:
При данной конфигурации устройства в разных сетях уже могут видеть друг друга по адресам виртуального туннеля.
Далее необходимо на каждой windows машине запустить службу, отвечающую за внутреннюю маршрутизацию, служба называется Маршрутизация и удаленный доступ. Это позволит использовать адресацию локальной сети. Для запуска этой службы нажмите клавиши Win+R на клавиатуре (или нажмите правой кнопкой мыши по кнопке «Пуск» и выберите пункт «Выполнить»), введите services.msc в окно «Выполнить» и нажмите Ok или Enter. Далее найдите службу Маршрутизация и удаленный доступ укажите тип запуска вручную, нажмите применить и затем нажмите кнопку Запустить.
После выполнения указанных действий наши windows машины могут быть доступны по своим локальным адресам.
На этом все, надеюсь материал оказался для Вас полезным.
В качестве основы для данного сценария подключения использовались следующие материалы:
Организация связи между серверами по OpenVPN на статических ключах
Часто перед системными администраторами возникает задача организовать защищенные каналы связи между серверами или офисами. Одним из наиболее удобных и, при этом, безопасных средств решения данной задачи является OpenVPN. Преимуществ у OpenVPN великое множество, среди которых есть и возможность работы как по UDP так и по TCP, выбрав любой доступный порт.
OpenVPN поддерживает три режима работы:
- Сервер — режим, в котором OpenVPN запускается в режиме сервиса и ждет подключений от клиентов. При этом возможно множественное подключение к одному интерфейсу. Хорошо подходит для организации удаленного доступа сотрудников к офисной сети. Параметры адресации и маршрутов передаются клиенту автоматически.
- Клиент — режим, позволяющий подключиться к серверу OpenVPN, существуют графические реализации для простой и удобной настройки.
- Site-to-Site (точка-точка) — особенный режим, предназначенный для соединения только между двумя узлами и заранее заданными настройками внутренней адресации на обоих сторонах соединения.
Дополнительно хочу отметить, что для безопасной авторизации пользователей при подключении по клиент-серверной архитектуре следует использовать сертификаты, которые можно сгенерировать, например, с помощью программы XCA. Такой способ авторизации позволит отзывать сертификаты пользователей, которые больше не должны получать доступ к нашему vpn серверу, и, таким образом, гибко управлять доступом к системе.
При подключении же в режиме точка-точка (site-to-site) в большинстве случаев практичнее применять заранее сгенерированные ключи (pre shared keys) в связи с тем, что в таких соединениях, как правило, обе стороны администрируются и обслуживаются одним и тем же лицом и являются доверенными, а генерация и настройка такого соединения займет меньше времени. Давайте рассмотрим настройку такого соединения на примере.
Первым делом нам нужно определить, какие ip адреса будут использоваться для организации защищённого vpn канала (как правило, это публичные ip адреса серверов), какой протокол будет использоваться, какие адреса будут использоваться внутри нашего vpn канала. Выбор протокола между TCP и UDP позволяет использовать преимущества соответствующих протоколов, но они имеют и свои недостатки. В рамках данной статьи не будем вдаваться в подробности, а в большинстве случаев оптимальным будет применение протокола UDP, более того, по умолчанию он и используется в OpenVPN. Пусть, в примере внешние адреса наших узлов будут 1.1.1.1 на server1 и 2.2.2.2 на server2, а внутри туннеля будем использовать адреса 10.99.1.2 для server1 и 10.99.2.1 для server2. Обращу внимание, что для соединения точка-точка могут использоваться любые два адреса, не обязательно принадлежащие одной сети.
И так, с адресами определились, теперь допустим, что подключаться у нас будет второй сервер к первому — не смотря на равноправие, кто то всё же должен инициировать соединение.
Теперь информации достаточно для того, чтобы приступить к установке OpenVPN и настройке соединения. В нашем случае используется дистрибутив Centos 6.6, поэтому будем пользоваться пакетным менеджером yum. Для других дистрибутивов установка может незначительно отличаться. Для сокращения вывода я буду заменять не имеющий значения в рамках статьи вывод на многоточие.
[[email protected] ~]# yum install openvpn . Is this ok [y/N]: y . Installing : openvpn-2.3.10-1.el6.x86_64 2/2 . Complete! [[email protected] ~]#
Аналогично повторяем установку и на server2. Теперь сгенерируем ключ шифрования для нашего соединения и запишем его в файл myvpn.key.
[[email protected] ~]# openvpn --genkey --secret myvpn.key
Содержимое файла ключа можно посмотреть любым тектовым редактором или отображающей текст утилитой. Например, так:
[[email protected] ~]# cat myvpn.key
#
# 2048 bit OpenVPN static key
#
——BEGIN OpenVPN Static key V1——
2f833e678521f3b74c9bd80c6b5a9947
9fba79967ca80764b968ecf1ac2e6d0e
3d0412ba958eadcc6c0390678b84dcd2
fb54a3d130b8f6cf2cb1bd0028dc7fbf
1fc5e9670dc20bf548d7285deda369a6
09c3a974817b109d5519c8893d8712a5
5809a2bcdc39ef69528f889e1a772efd
7d3fedc71c078c01f28ca1d3c2b5ad15
7b6ec33b340ef5f66030979aea61427b
24215df95f65375dd93d92164835dfbc
f6f61660b09aae94181786263517ff9d
892d61fe5d5a11361a8f660fd7fa096b
443f867377efecdf86de48ec2c9360a1
26bf04b5aaf85a385f88c0448f1498ff
378abc18e3346f688b359df41d24dd5e
d113c77803a9b9ab2ec010e2ca6001c2
——END OpenVPN Static key V1——
[[email protected] ~]#
Далее любым доступным способом нужно скопировать полученный ключ на второй сервер. Очень желательно чтобы канал связи, через который пересылается ключ, был защищенный во избежание заполучения ключа злоумышленниками. Так же можно просто скопировать содержимое файла как текст через ssh, а не перекачивать его именно как файл.
Теперь можно приступить к конфигурированию OpenVPN на обоих сторонах нашего соединения — назовём их условно сервер и клиент (хотя настраиваем мы режим site-to-site, что рассматривалось выше).
Конфигурационные файлы должны находиться в /etc/openvpn. В эту же папку рекомендуется скопировать и ключи. Пример рекомендуемого конфига для server1, являющегося сервером для данного подключения:
[[email protected] ~]# cat /etc/openvpn/myvpn.conf
port 10001
proto udp
dev tun-srv1
ifconfig 10.99.1.2 10.99.2.1
cipher aes-128-cbc
auth sha1
secret /etc/openvpn/myvpn.key
keepalive 10 120
persist-tun
И, соответственно, для server2, являющегося в данном соединении клиентом:
[[email protected] ~]# cat /etc/openvpn/myvpn.conf
port 10001
proto udp
remote 1.1.1.1
dev tun-myvpn
ifconfig 10.99.2.1 10.99.1.2
cipher aes-128-cbc
auth sha1
secret /etc/openvpn/myvpn.key
keepalive 10 120
persist-tun
Теперь необходимо запустить либо перезапустить службу openvpn на обоих сторонах туннеля:
[[email protected] ~]# service openvpn restart
После запуска туннелей должна установиться связь и начать проходить трафик между узлами. Убедиться в этом можно с помощью команды ping:
[[email protected] ~]# ping 10.99.2.1
PING 10.99.2.1 (10.99.2.1) 56(84) bytes of data.
64 bytes from 10.99.2.1: icmp_seq=1 ttl=127 time=1.45 ms
64 bytes from 10.99.2.1: icmp_seq=2 ttl=127 time=1.40 ms
64 bytes from 10.99.2.1: icmp_seq=3 ttl=127 time=1.23 ms
64 bytes from 10.99.2.1: icmp_seq=4 ttl=127 time=1.39 ms
64 bytes from 10.99.2.1: icmp_seq=5 ttl=127 time=1.63 ms
^C
— 10.99.2.1 ping statistics —
5 packets transmitted, 5 received, 0% packet loss, time 4742ms
rtt min/avg/max/mdev = 1.230/1.422/1.634/0.138 ms
[[email protected] ~]#
Если этого не произошло, то скорее всего проблема с настройкой iptables и закрытых портах. Для проверки можно iptables отключить, однако не забудьте обязательно включить его после проверки! Команда для отключения:
[[email protected] ~]# service iptables stop
После успешной проверки работы туннеля стоит добавить сервис openvpn в автозагрузку командой
Всё, настройка завершена! Если вам требуется несколько туннелей — просто создайте необходимое количество конфигурационных файлов в /etc/openvpn. Если после прочтения статьи остались вопросы — я с радостью отвечу на них в комментариях!