Андрей Смирнов
Время чтения: ~8 мин.
Просмотров: 18

Tunnelblick — OpenVPN клиент для Mac OS X

  • Из песочницы
  • Tutorial

Однажды у меня появилась необходимость иметь доступ к локальной сети из удаленного места. Для выполнения данной задачи на iMac был поставлен OSX server в котором был настроен удаленный доступ VPN. Все работало вполне сносно кроме mDNS(Bonjour). Как оказалось данная реализация VPN не поддерживает мультикаст. А он был жизненно необходим из за наличия некоторых специальных приложений которые работают только в локальной сети. После непродолжительного поиска нашлось несколько решений данной проблемы. Одно из них бесплатное предполагало установку программы «Network Beacon» и прописывания в ней руками путей к службам «Bonjour». Другое решение было платным и предполагало установку специального приложения «ShareTool» которое во первых может строить собственные SSH туннели и во вторых передавать по туннелю информацию о службах на стороне сервера. Минусов у этого решения два. Первый это то что надо покупать лицензию на каждую машину. Ну и второй заключается в том что это решение все равно костыль. А мне хотелось все сделать как можно чище. Решением оказалась постройка VPN моста на базе OpenVPN с виртуальным адаптером «tap». Но как это сделать? В сети я нашел много разных инструкций по настройке подобной конфигурации но ни одного варианта постройки моста под OSX. И тут я вспомнил как настраивал мост для расширения беспроводной сети и решил сделать все похожим образом.

Шаг первый — Настраиваем OpenVPN

Все последующие шаги будут требовать прав суперпользователя. По этому открываем терминал и сразу переходим в режим безграничных возможностей.

sudo -s  

Для начала устанавливаем драйвер TunTap Загрузить его можно по этой ссылке: tuntap_20111101.tar.gz Распаковываем, запускаем инсталлятор. После окончания установки загружаем модули в ядро.

kextload /Library/Extensions/tun.kext kextload /Library/Extensions/tap.kext 

Далее устанавливаем и сам OpenVPN посредством MacPorts.

port install openvpn2 

Для тех кто еще не знает — Easy-RSA больше не входит в состав пакета OpenVPN по этому качаем его отдельно по ссылке:easy-rsa-release-2.x.zip Для большего удобства копируем содержимое папки «openvpn2» в «/etc/openvpn».

cp -r /opt/local/share/doc/openvpn2 /etc/openvpn 

Распаковываем в нее Easy-RSA 2.

mkdir /etc/openvpn/easy-rsa unzip –j easy-rsa-release-2.x.zip easy-rsa-release-2.x/easy-rsa/2.0/* -d /etc/openvpn/easy-rsa/2.0/ 

Правим под себя vars и генерируем ключи. Правка «vars» заключается в исправлении информации о держателе сертификата и ключа а также изменении (при необходимости) длинны параметров Диффи — Хеллмана.

cd /etc/openvpn/easy-rsa/2.0 nano vars source vars ./clean-all ./build-ca 

Для сервера.

./build-key-server server 

И клиента.

./build-key client 

В заключении генерируем параметры Диффи — Хеллмана.

./build-dh 

Правим образец из «/etc/openvpn/sample-config-files/» или создаем новый «server.conf». Для примера мой вариант

# Порт сервера port 1194 # Протокол proto udp # Тип виртуального интерфейса. Это важно. dev tap # Ключи и сертификаты созданные ранее ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt cert /etc/openvpn/easy-rsa/2.0/keys/server.crt key /etc/openvpn/easy-rsa/2.0/keys/server.key # Параметры Диффи Хелмана в зависимости от выбранных при редактировании vars. "dh1024.pem" или "dh2048.pem" dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem # Сохраняем адреса клиентов между сессиями ifconfig-pool-persist /etc/openvpn/ipp.txt # Настраиваем мост и выделяем адресное пространство.  server-bridge 192.168.2.2 255.255.255.0 192.168.2.224 192.168.2.254 # Обьясняем клиенту где искать нашу сеть push "route 192.168.2.0 255.255.255.0" # Указываем скрипт который запускается после успешной настройки виртуального интерфейса script-security 2 up /etc/openvpn/scripts/up.sh # Здесь указываем скрипт который запускается после удачного подключения клиента.  # Например для прописывания маршрута к удаленной сети в таблицу маршрутизации. learn-address /etc/openvpn/scripts/routes.sh # Хочу что бы клиенты видели друг друга. client-to-client # Хочу иметь возможность подключатся с одинаковыми ключами с разных машин duplicate-cn # Пингуем клиента каждые 10 секунд и перезапускаем туннель если в течении 60 секунд не получили ответа. keepalive 10 60 # Включаем сжатие comp-lzo # Не читаем заново ключи при перезапуске туннеля persist-key # Не сносим виртуальный интерфейс при перезапуске OpenVPN persist-tun # Устанавливаем уровень отладки. После удачного запуска можно смело менять на 1 или даже 0 verb 3 

Теперь переходим к следующему этапу создаем мост средствами самой MacOS.

Шаг второй — «Мостостроительство»

Запускаем Системные настройки и выбираем Сеть.eb5910fd3c5994fbd5283b5f9ba323e9.png Жмем на шестеренку и выбираем «Управлять виртуальными интерфейсами».4eb7e1210b0e18ad7137c2972653e46e.png Далее кликаем на плюс и выбираем «Новый мост…».b1efd4360f93a141cace223510211639.png Здесь мы никогда не увидим наш интерфейс «tap» даже при запущенном сервере OpenVPN. Но как оказалось при всей «дружественности» MacOs дает возможность создать сетевой мост с одним интерфейсом. А это как раз то что нам необходимо. Выбираем адаптер которым мы подключены к сети и обзываем мост по своему усмотрению. Жмем «создать» и «готово». Далее настраиваем подключение моста также как был настроен сетевой интерфейс и кликаем Применить.78eb418bfc4dbf20caf8188a9b560ffa.png Все, сеть настроена и окно можно закрывать. Оно больше не понадобится. Теперь можно проверить в терминале наличие моста с одним членом. Запускаем команду «ifconfig» и убеждаемся в наличии моста bridge0 с одним членом в роли которого выступает интерфейс который мы выбрали при его создании.ed86c35632e755353882bf175685fda1.png Следующий этап представляет из себя создание скрипта который должен выполнить две функции. Во первых убедить ядро пропускать пакеты и во вторых добавить интерфейс «tap» в мост.

Шаг третий — Запуск

Создаем файл «/etc/openvpn/scripts/up.sh».

#!/bin/bash # Убеждаем ядро пропускать ARP ко всем интерфейсам /usr/sbin/sysctl -w net.link.ether.inet.proxyall=1 # Просим ядро поработать рутером и перенаправлять пакеты между интерфейсами  /usr/sbin/sysctl -w net.inet.ip.forwarding=1 # Добавляем интерфейс tap в мост /sbin/ifconfig bridge0 addm tap0 

Сохраняем и делаем его исполняемым.

chmod +x /etc/openvpn/scripts/up.sh 

Путь к этому скрипту прописывается в конфигурации сервера и запускается после создания виртуального интерфейса. Проверяем конфигурацию

/opt/local/sbin/openvpn2 –config /etc/openvpn/server.conf 

Сервер запустился? Если да то убиваем его «Control+C». Если вылетел с ошибками то смотрим с какими и исправляем. Теперь переходим к автозапуску сервера. Создаем файл «/Library/LaunchDaemons/org.openvpn.bridge.plist» следующего содержания.

<?xml version="1.0" encoding="UTF-8"  <plist><dict><key>KeepAlive</key><key>Label</key><string>org.openvpn.bridge</string><key>ProgramArguments</key><array><string>/opt/local/sbin/openvpn2</string><string>--config</string><string>/etc/openvpn/server.conf</string></array><key>RunAtLoad</key></dict></plist>

Сохраняем и запускаем сервер.

launchctl load /Library/LaunchDaemons/org.openvpn.bridge.plist 

Все, с запуском сервера справились. Переходим к клиенту.

Шаг четвертый — Клиент

Я коротко опишу только вариант запуска клиента из под MacOS. Так как я подключаюсь к этому серверу с МакБука, и у меня не было необходимости ставить на него Xcode и MacPorts, я решил использовать решение типа «все включено» каким является «Tunnelblick». Создаем папку конфигурации. Например на рабочем столе. Делать это проще на сервере. Далее будет понятно почему. В папке создаем файл «config.ovpn» и прописываем конфигурацию. Пример.

client dev tap proto udp # Указываем адрес и порт своего сервера # Если адрес статический то достаточно прописать IP. remote my.server.tld 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key comp-lzo verb 3 

Сохраняем и копируем в ту же папку ключи и сертификаты созданные в начале.

cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /Users/username/Desktop/MyVpnConfig/ cp /etc/openvpn/easy-rsa/2.0/keys/client.crt /Users/username/Desktop/MyVpnConfig/ cp /etc/openvpn/easy-rsa/2.0/keys/client.key /Users/username/Desktop/MyVpnConfig/ 

После копирования ключей и сертификатов необходимо поменять им владельца. Он должен совпадать с пользователем под которым мы строим конфигурацию. За одно покидаем рай суперпользователей.

chown -R username:staff /Users/username/Desktop/MyVpnConfig exit 

Далее переименовываем папку с конфигурацией и ключами (имя папки будет названием конфигурации в «Tunnelblick») и добавляем расширение «.tblk»

mv /Users/username/Desktop/MyVpnConfig /Users/username/Desktop/MyVpnConfig.tblk 

После этого переносим конфигурацию на клиент с установленным «Tunnelblick» любым удобным способом. После чего открываем «Finder» находим расположение конфигурации и щелкаем по ней дважды. Она автоматически добавится к конфигурациям. Запускаем «Tunnelblick», выбираем из списка свою конфигурацию и жмем кнопку «Соединится». И если все сделано правильно то через несколько секунд у нас уже есть полный доступ к удаленной локальной сети включая все мультикаст протоколы.Список литературыprovideotech.org/bonjour-and-vpn-or-how-i-learned-to-stop-googling-and-love-simplicitywww.yazsoft.com/products/sharetooltuntaposx.sourceforge.netcode.google.com/p/tunnelblickДекабрь, 10th 2017Рубрика:Apple | Советы 28076Подписаться накомментарии по RSS

tunnelblick.jpg

Продолжаю знакомить своих подписчиков с защищенными канала связи. Недавно публиковался пост про установку OpenVPN сервера и клиента на роутер с прошивкой DD-WRT. Сегодня хочу рассказать о настройке OpenVPN клиента на macOS, что позволяет легко и безопасно связываться с удаленным офисом, собственным домом или любым сервером, на котором настроен OpenVPN.

Собственно, углубляться в подробные повествования тут особенно не нужно, настройку OpenVPN клиента для Windows я описывал ранее в блоге. В Mac OS X все еще проще. Есть замечательный бесплатный клиент — Tunnelblick.

  1. Первым делом создаем папку (где удобно) в которую положим наш файл конфигурации VPN соединения и ключи
  2. Создаем в этой папке сам файл конфигурации .ovpn (подробнее читайте OpenVPN клиент для Windows)
  3. Туда же положим клиентcкий ключ и сертификаты клиента и сервера (client.key, client.crt, ca.crt).Даем папке расширение

.tblk</ol>

Остается только добавить созданную конфигурацию в программу Tunnelblick:

tblk_settings.jpg

Хочу заметить, что Tunnelblick прекрасно воспринимает и стандартные настройки конфигурации, как это делалось в Windows, но разработчики рекомендуют использовать формат .tblk

apple_watch_new-250-288.jpg
Новые Apple Watch прибыли прямо ко Дню Рождения.
ios7_spam-250-288.jpg
Владельцы iPhone могут больше не получать назойливую СМС рекламу
ical-oct-23-250-288.jpg
iPad mini представят 23 октября
iphone-250-288.jpg
iTunes не может прочитать контент iPhone…
ios9-250-288.jpg
Встречаем IOS 9. Какие новые фичи мы получили?
mbpro_13_retina-250-288.jpg
Мечта поэта — MacBook Pro 13 с дисплеем Retina

Используемые источники:

  • https://habr.com/post/206322/
  • https://mdex-nn.ru/page/tunnelblick-openvpn-klient-dlja-mac.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации