Маршрутизация в 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.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 32

      +3
      Автор, вы мой герой! Работаю удаленно, по VPN подключаюсь к рабочей сети. Все было хорошо, но недавно зачем-то заблокировали все исходящие SMTP соединения из локальной сети в интернет (видимо чтоб вирусы спам не слали). Чтобы отправить почту через Gmail приходилось либо отключать VPN либо пользоваться веб-интерфейсом =(

      Читал на буржуйских сайтах какие то кривые решения, которые судя по отзывам работали через раз, поэтому не захотел даже с ними морочиться.
      Попробую сделать по вашему рецепту, надеюсь все получиться! Кстати укажите, на какой версии Mac OS вы это все проверяли
        +1
        Пробуйте, пишите вопросы — допишу к главному посту.
        версия 10.6.2, но работать будем на любом макос, возможны вариации с местом размещения конфигов ppp
          +1
          Все получилось, еще раз спасибо!
          Несколько замечаний
          > 1. поставить галочку «Слать весь трафик через VPN подключение»
          галочку надо не поставить, а убрать
          > создал файл для логов: touch: /tmp/ppp.log
          двоеточие после touch конечно же лишнее
            0
            Пожалуйста.
            По замечаниям:
            1. перечитайте — это варианты как пользоватся ВПНОМ, тоесть ИЛИ слать весь трафик в подключение ИЛИ прописывать руками рауты
            мое решение позволяет не слать все и не прописывать руками
            2. Ошибку поправляю, спасибо.
              +1
              При включенной галке «Слать весь трафик через VPN подключение» даже с вашими скриптами у меня весь трафик идет через VPN, что и не удивительно система добавляет свой маршрут по умолчанию через VPN. Так что чтоб эти манипуляции имели смысл — галку мне приходится снимать.
                0
                Да, галочку надо снимать если пользоватся скриптами ip-up…
                  0
                  Если галочку поставить, а в ip-up писать маршруты, которые должны _не_ идти в впн — тоже будет работать.
                    0
                    Логично, тут я думаю что если человек решил себе настроить то «логическое мышление» как минимум MUST HAVE -), чтобы под свою задачу подредактировать…
          +1
          А где можно прочитать про такие фишки? Чтоб самому уметь подобное.
            +3
            Дык, на оф сайте эпла, в гугле, провести тэсты и будете уметь… Нерешаемых задач нет-)
              +3
              man man
              +1
              Хороший, а главное полезный пост, спасибо!
                +5
                Спасибо.
                Вот он какой Mac-way…
                  +2
                  Это скорее *nix-way. Данное решение будет работать с pptp-впнами и в линуксах, и на BSD, и в Солярисе. Будут только чуть-чуть отличаться пути.
                    +2
                    Многие, я например по началу, не думал что с МакОс можно пытатся работать как с Юниксом -)
                  +2
                  про /etc/ppp/ip-* конечно интересно, но по хорошему маршруты в рабочую сеть должны передаваться впн-сервером
                    +1
                    Вот-вот, и костылей таких не будет
                      +1
                      Так и передается, как default router, директор например юзает интернет по ВПН через работу, лично у меня дома интернет в разы шустрее…
                      Или наоборот — на работе выдается только на рабочие адреса маршрут, а мне как-бы и в интернет надо…
                      такое… это инструмент
                        +1
                        И какие проблемы?
                        Если вы внутри сети, то вам VPN и не нужен. Если вы снаружи, то маршруты в частную сеть должны приходить с VPN-сервера.
                          +1
                          Слушайте, ну разные случаи бывают. Команды netstat -r и route add придумали не зря.
                            +1
                            Верно. Только при таком подходе, в случае изменения адресации в частной сети или добавлении новых сегментов и т.п., придется переписывать/дописывать скрипты.
                            В любом случае, каждый использует то, что ему удобнее.
                      +5
                      Есть третий вариант. Без прописывания руками и без посыла всего в VPN.


                      Вот таблица маршрутизации в результате:
                      Internet:
                      Destination Gateway Flags Refs Use Netif Expire
                      default 10.0.1.1 UGSc 47 105 en1
                      default 194.125.ХХ.ХХ UGScI 0 0 ppp0
                      10.0.1/24 link#5 UCS 4 0 en1
                      [---snip---]
                      127 127.0.0.1 UCS 0 0 lo0
                      127.0.0.1 127.0.0.1 UH 2 110337 lo0
                      192.168.10 ppp0 USc 2 0 ppp0
                      [---snip---]
                      194.125.ХХ.ХХ 10.0.1.1 UGHS 449 479 en1


                      И по строчкам:
                      1. Маршрут по умолчанию в интернет (айрпорт)
                      2. Маршрут по умолчанию в интернет (через впн)
                      3. Локальная сеть дома
                      — пропущено — 4,5. локалхост :)
                      6. локальная сеть на работе
                      — пропущено — 7. маршрут до гейта на работе

                      Всё что нужно — перетащить соединения в свойствах сети в нужном порядке. Это также может быть актуально когда у вас два соединения к локальной сети. Например, я работаю в основном по WiFi, но для копирования больших файлов подключаю Ethernet, он у меня выше приоритетом чем WiFi — копирование идет через него (правда текущие соединения разрываются из-за смены маршрута).
                        –1
                        как вариант, просто у меня дома домашний макос про + ноутбук макос, + часто айфон тыкаю или модем какой-то чужей — следить за приоритетами в настройках нет времени — вот мое решение…
                          0
                          будет ли данный способ работать не для штатного Mac OS VPN клиента, а с Cisco VPN клиента? или нет никакой разницы?
                            –1
                            если ppp то нет никакой разници
                              +1
                              Смотря что вы имеете ввиду под Cisco VPN клиентом. Под виндой, к примеру, цисковский клиент заради безопасности перекрывал вообще все, кроме себя. Т.е. даже по локальной сети ни куда не пускал.
                              +1
                              я не разбираюсь во всех тонкостях, но если проблема касаеться именно этого
                              2. статически прописать статически route add -net 192.168.10.0/24 192.168.44.1, где 192.168.10.0/24 — сеть в которой находятся компьютеры на работе, 192.168.44.1 VPN шлюз к которому я подключаюсб.

                              Итак после каждого подключения нужно делать вторую манипуляцию, так как общий доступ в интернет ограничен и скорость не ахты.

                              то могу подсказать, как у меня реализовано.
                              В script Editor-е вбиваем

                              set LF to ASCII character 10
                              set yourScr1 to «route add -net 172.16.0.0 -netmask 255.255.0.0 172.16.39.254»
                              set yourScr2 to «route add 192.168.96.0 -netmask 255.255.224.0 172.16.39.254»
                              set yourScr3 to «route add 192.168.128.0 -netmask 255.255.128.0 172.16.39.254»
                              set passwordStr to «YOUR_Password» as string
                              set sudoScr to «sudo » & yourScr1 & "; sudo " & yourScr2 & "; sudo " & yourScr3 & "; sudo -k"
                              do shell script «sudo -v» & " << ++" & LF & passwordStr & LF
                              do shell script sudoScr


                              в примере у меня вписано несколько маршрутов, 172.16.39.254 — шлюз.
                              Сохраняем как приложение и добавляем в автозагрузку.

                              В Тигре было попроще — я просто в автоматоре вбивал shell-скрипт (например: sudo route add -net 192.168.10.0/24 192.168.44.1 ) и добавлял в автозагрузку, а в лео такая схема у меня не срабатывала
                                0
                                В какую автозагрузку? при VPN-ppp подключении возможна лишь автозагрузка из /etc/ppp/peers/$NameOfConnection или скриптом /etc/ppp/ip-up
                                Если вы говорите про автозагрузку при включении MacOs то, не знаю как у вас работает, а у меня система ругается если я хочу прописать route add 192.168.96.0 -netmask 255.255.224.0 172.16.39.254, так как адреса 172.16.39.254, соответственно и шлюза по этому адресу и ИНТЕРФЕЙСА в системе не существует. Верней должно ругатся и во-всех Unix системах так и происходит. В макОс у меня такой раут повесился на en0 интерфейс, соответственно при VPN подключении к такому шлюзу интерфейс в таблице маршрутизации изменится? Проверить возможности нет.
                                Спасибо.
                                  +1
                                  да, в автозагрузку системы.
                                  в примере я описывал свою сеть и свой шлюз соответственно

                                  для вашего случая будет примерно такое:
                                  set LF to ASCII character 10
                                  set yourScr1 to «route add -net 192.168.10.0/24 192.168.44.1»
                                  set passwordStr to «YOUR_Password» as string
                                  set sudoScr to «sudo » & yourScr1 & "; sudo -k"
                                  do shell script «sudo -v» & " << ++" & LF & passwordStr & LF
                                  do shell script sudoScr


                                  аккуратнее с кавычками, хабр автоматом меняет на «»
                                0
                                А что делать в случае, если шлюз имеет динамически выделяемый IP-адрес?
                                  0
                                  правило будет выглядеть так:
                                  /sbin/route -n add -net 192.168.10.0/24 -interface ppp0 > /tmp/ppp.log 2>&1
                                  0
                                  На протяжении многих лет, с каждым новым рабочим маком мне так хочется поставить вам плюс в карму! :)

                                  Only users with full accounts can post comments. Log in, please.