Маршрутизация в Mac OS при VPN подключении
Появилась как-то задача подключатся по VPN к рабочей сети, чтобы иметь доступ к внутренним ресурсам.
Средствами Мака это можно сделать создав VPN подключение и 2 варианта:
1. поставить галочку «Слать весь трафик через VPN подключение»
2. статически прописать статически route add -net 192.168.10.0/24 192.168.44.1, где 192.168.10.0/24 — сеть в которой находятся компьютеры на работе, 192.168.44.1 VPN шлюз к которому я подключаюсб.
Итак после каждого подключения нужно делать вторую манипуляцию, так как общий доступ в интернет ограничен и скорость не ахты. Или задача состоит в том чтобы ходить на сайты (например youtube) через более быстрый канал VPN…
Итак задачу я решил следующим образом:
создал скрипт: touch /etc/ppp/ip-up
дал ему прав на исполнение: chmod +x /etc/ppp/ip-up
создал файл для логов: touch /tmp/ppp.log
Содержимое скрипта:
#!/bin/sh
VPNWORK=»192.168.44.1″; #обьявляем переменную (например по названию VPN подключения)
if [ $IPREMOTE = $VPNWORK ] #проверяем, если совпадает добавляем маршрут
then
/sbin/route -n add -net 192.168.10.0/24 $IPREMOTE > /tmp/ppp.log 2>&1
fi
Таким образом после подключения к сети добавляется маршрут, и нет необходимости добавлять его вручную, так-же при отключении от VPN он удаляется сам.
При необходимости добавлять DNS сервер можно дописать текст между then и fi:
echo «nameserver 4.2.2.1» > /etc/resolv.conf
Вместо 4.2.2.1 укажите свой основной DNS и второй записью рабочий.
Но при этом после отключения нам надо вернуть предыдущий DNS конфиг на место, для этого создаем: touch /etc/ppp/ip-down && chmod +x /etc/ppp/ip-down
Перед началом работы делаем бекап:
cp /etc/resolv.conf /etc/resolv.conf_original
и добавляем в скрипт /etc/ppp/ip-down:
#!/bin/sh
cat /etc/resolv.conf_original > /etc/resolv.conf
Собственно всё. При каждом подключении VPN прописывается маршрут, работаете сколько надо, после отключения удаляется, при этом у вас не будет загвоздок с DNS.
Источник
Как разделить VPN трафик в MacOS
Предположим, вы разработчик и часть ресурсов (например база данных) находятся в корпоративной сети, доступ в которую осуществляется через VPN.
Если вы посмотрите на все доступные инструкции как настраивать VPN на Mac OS, то увидите что авторы говорят вам ставить галку «отправлять весь трафик через VPN», что приводит к тому, что (Капитан Очевидность) весь трафик идет через VPN, что в свою очередь накладывает все ограничения корпоративной сети (запрет на посещение отдельных ресурсов, закрытые порты и т.д.) или ограничения сервиса анонимизации (узкий канал, долгий ping и т.д.).
Возникает вопрос — нельзя ли через VPN пускать только определенный трафик, а весь остальной (основной) трафик пусть идет по обычному каналу без ограничений.
Делается это довольно просто.
Кратко пройдемся по настройке VPN соединения.
Нажимаем на «яблочко» в левом верхнем углу экрана и выбираем «Системные настройки».
Выбираем «Сеть»
Нажимаем на «плюсик» в списке сетевых соединений.
Выбираем «VPN»
Тип VPN (в моем случае это L2TP через IPSec)
Заполняем параметры соединения
Галку «Отправлять весь трафик через VPN» не ставим
Теперь нам надо узнать интерфейс через который идет VPN-трафик.
Запускаем ifconfig без подключенного VPN
Подключаем VPN и снова запускаем ifconfig
Видим что появился интерфейс ppp0
Теперь по умолчанию весь трафик идет по обычному соединению (не VPN).
Далее, мне нужно чтобы коннекты к моему серверу, расположенному по адресу 192.168.0.20 шли через VPN. Для этого нам нужно построить сетевой маршрут. Воспользуемся штатной unix-командой route.
Теперь весь трафик идет через мое обычное соединение, а трафик к корпоративному серверу идет через VPN.
Для удобства в файле
/.profile создаем алиасы на команду добавления маршрутов
Теперь чтобы поднять соединение, необходимо подключиться к VPN и выполнить команду server-vpn-up.
Альтернативный вариант, это создать файл /etc/ppp/ip-up, прописать в него [в моем случае]
и дать права на выполнение
После этого маршрут будет прописываться автоматически после соединения с VPN.
Какие могут встретиться подводные камни.
1. Может быть конфликт IP-адресов, если внутренняя и внешняя сеть используют одно адресное пространство (возможно я использую не правильный термин, поправьте в комментариях пожалуйста). Т.е. у вас и VPN и внутренняя домашняя сеть находятся в 192.168.0… В моем случае решением было перенастройка домашней сети на 10.0.1…
2. При подключении VPN автоматически ставился корпоративный DNS 192.168.0.7. И хотя весь трафик должен был идти вроде как не через VPN, все сайты переставали открываться. Решилось это добавлением Google-ового DNS 8.8.8.8 и поднятии его в самый верх.
Источник
Строим OpenVPN мост под Mac OSX
Однажды у меня появилась необходимость иметь доступ к локальной сети из удаленного места. Для выполнения данной задачи на iMac был поставлен OSX server в котором был настроен удаленный доступ VPN. Все работало вполне сносно кроме mDNS(Bonjour). Как оказалось данная реализация VPN не поддерживает мультикаст. А он был жизненно необходим из за наличия некоторых специальных приложений которые работают только в локальной сети.
После непродолжительного поиска нашлось несколько решений данной проблемы. Одно из них бесплатное предполагало установку программы «Network Beacon» и прописывания в ней руками путей к службам «Bonjour». Другое решение было платным и предполагало установку специального приложения «ShareTool» которое во первых может строить собственные SSH туннели и во вторых передавать по туннелю информацию о службах на стороне сервера.
Минусов у этого решения два. Первый это то что надо покупать лицензию на каждую машину. Ну и второй заключается в том что это решение все равно костыль. А мне хотелось все сделать как можно чище.
Решением оказалась постройка VPN моста на базе OpenVPN с виртуальным адаптером «tap».
Но как это сделать? В сети я нашел много разных инструкций по настройке подобной конфигурации но ни одного варианта постройки моста под OSX.
И тут я вспомнил как настраивал мост для расширения беспроводной сети и решил сделать все похожим образом.
Шаг первый — Настраиваем OpenVPN
Все последующие шаги будут требовать прав суперпользователя. По этому открываем терминал и сразу переходим в режим безграничных возможностей.
Для начала устанавливаем драйвер TunTap
Загрузить его можно по этой ссылке: tuntap_20111101.tar.gz
Распаковываем, запускаем инсталлятор. После окончания установки загружаем модули в ядро.
Далее устанавливаем и сам OpenVPN посредством MacPorts.
Для тех кто еще не знает — Easy-RSA больше не входит в состав пакета OpenVPN по этому качаем его отдельно по ссылке:
easy-rsa-release-2.x.zip
Для большего удобства копируем содержимое папки «openvpn2» в «/etc/openvpn».
Распаковываем в нее Easy-RSA 2.
Правим под себя vars и генерируем ключи. Правка «vars» заключается в исправлении информации о держателе сертификата и ключа а также изменении (при необходимости) длинны параметров Диффи — Хеллмана.
В заключении генерируем параметры Диффи — Хеллмана.
Правим образец из «/etc/openvpn/sample-config-files/» или создаем новый «server.conf».
Для примера мой вариант
Теперь переходим к следующему этапу создаем мост средствами самой MacOS.
Шаг второй — «Мостостроительство»
Запускаем Системные настройки и выбираем Сеть.
Жмем на шестеренку и выбираем «Управлять виртуальными интерфейсами».
Далее кликаем на плюс и выбираем «Новый мост…».
Здесь мы никогда не увидим наш интерфейс «tap» даже при запущенном сервере OpenVPN. Но как оказалось при всей «дружественности» MacOs дает возможность создать сетевой мост с одним интерфейсом. А это как раз то что нам необходимо. Выбираем адаптер которым мы подключены к сети и обзываем мост по своему усмотрению. Жмем «создать» и «готово».
Далее настраиваем подключение моста также как был настроен сетевой интерфейс и кликаем Применить.
Все, сеть настроена и окно можно закрывать. Оно больше не понадобится.
Теперь можно проверить в терминале наличие моста с одним членом. Запускаем команду «ifconfig» и убеждаемся в наличии моста bridge0 с одним членом в роли которого выступает интерфейс который мы выбрали при его создании.
Следующий этап представляет из себя создание скрипта который должен выполнить две функции. Во первых убедить ядро пропускать пакеты и во вторых добавить интерфейс «tap» в мост.
Шаг третий — Запуск
Создаем файл «/etc/openvpn/scripts/up.sh».
Сохраняем и делаем его исполняемым.
Путь к этому скрипту прописывается в конфигурации сервера и запускается после создания виртуального интерфейса.
Сервер запустился? Если да то убиваем его «Control+C». Если вылетел с ошибками то смотрим с какими и исправляем.
Теперь переходим к автозапуску сервера.
Создаем файл «/Library/LaunchDaemons/org.openvpn.bridge.plist» следующего содержания.
Сохраняем и запускаем сервер.
Все, с запуском сервера справились. Переходим к клиенту.
Шаг четвертый — Клиент
Я коротко опишу только вариант запуска клиента из под MacOS. Так как я подключаюсь к этому серверу с МакБука, и у меня не было необходимости ставить на него Xcode и MacPorts, я решил использовать решение типа «все включено» каким является «Tunnelblick».
Создаем папку конфигурации. Например на рабочем столе. Делать это проще на сервере. Далее будет понятно почему.
В папке создаем файл «config.ovpn» и прописываем конфигурацию.
Сохраняем и копируем в ту же папку ключи и сертификаты созданные в начале.
После копирования ключей и сертификатов необходимо поменять им владельца. Он должен совпадать с пользователем под которым мы строим конфигурацию. За одно покидаем рай суперпользователей.
Далее переименовываем папку с конфигурацией и ключами (имя папки будет названием конфигурации в «Tunnelblick») и добавляем расширение «.tblk»
После этого переносим конфигурацию на клиент с установленным «Tunnelblick» любым удобным способом. После чего открываем «Finder» находим расположение конфигурации и щелкаем по ней дважды. Она автоматически добавится к конфигурациям.
Запускаем «Tunnelblick», выбираем из списка свою конфигурацию и жмем кнопку «Соединится». И если все сделано правильно то через несколько секунд у нас уже есть полный доступ к удаленной локальной сети включая все мультикаст протоколы.
Источник
Как настроить свой VPN на Mac
За последние две недели тема собственного VPN-сервера для жителей России стоит как никогда остро. И пока Роскомнадзор пытается заблокировать Telegram, в стране регулярно сбоят самые разные сервисы.
Сервера PlayStation, видеохостинг YouTube, облачные сервера и ряд сервисов Google – продолжать можно бесконечно долго.
Выход из этого беспредела один — настроить собственный VPN-сервер и забыть о бесконечных надписях «Невозможно подключиться».
В этой статье я расскажу как штатными средствами macOS подключить VPN-сервер с доступом в один тап.
Обратите внимание, данная статья подразумевает, что у вас есть IP-адрес, логин и пароли соответствующего VPN-сервера. О том, как создать собственный VPN максимально бюджетно, я рассказывал в отдельном материале.
Настраиваем VPN средствами Mac
Шаг 1. Открываем Настройки —> Сеть. Чуть ниже списка подключений тапаем на «+» и выбираем:
Тип VPN: L2TP через IPSec
Имя службы: по вашему желанию.
Шаг 2. Появится новое соединение с указанным вами именем. Внимательно заполняем появившиеся поля.
Конфигурация: Добавляете новую и даете любое желаемое имя
Адрес сервера: выданный IP-адрес от VPN
Имя учетной записи: указанное или полученное в процессе создания VPN-сервера имя пользователя
Сразу же поставьте галочку напротив пункта Показывать статус VPN в строке меню. Так вы сможете быстро включать и отключать VPN при необходимости.
Шаг 3. Нажмите на пункт Настройки аутентификации. В открывшемся всплывающем окне укажите общий ключ (он же пароль IPsec PSK) и пароль пользователя (Пароль).
Поле Имя группы можно оставить пустым. Выбираем «OK» и в нижнем правом углу нажимаем Применить.
Нажмите Дополнительно и поставьте галочку напротив пункта Отправлять весь трафик через VPN.
Настройка VPN на Mac окончена. Смело тапаем на пункт подключить. На меню Dock в строке состояния Mac появится новая пиктограмма с состоянием подключения.
VPN успешно подключен и теперь весь трафик проходит через промежуточный удаленный сервер, а у вас есть доступ к любым ресурсам.
Источник