понедельник, 20 июля 2009 г.

Еще про интернет: VPN

Все описанное (ну кроме squid-а там и деталей каких-то) я делал в течение практ. 2-х лет, пока был клиентом Укртелекома и его интернета по ADSL "ОГО" (к слову сказать ушел только из-за соотношения скорость/цена, работал он у меня на "отлично")
Но заметив "халяву" в виде интернета от билайна я тут же присел ее попробовать (благо подключение бесплатное, отключится тоже ничто не мешает, оборудования никакого не надо), а распробовав перешел полностью (держать "резервного" провайдера для меня и слишком дорого, и смысла нет)
Правда с настройкой на убунту (когда монтажники шнурок завели и все там включили, они попробовали на Win7, показали, что все работает; но меня то интересовало, как все приладить к уже настроенному шлюзу) пришлось повозится достаточно долго.. Хотя больше потому, что а) мало понимал (и понимаю) все эти впн-ы и вообще суть настройки сети, б) потому что мануалы, тоннами находимые в инете, или тупо предлагают "дважды щелкнуть по иконке сети около часов", или милиард раз перекопи-пасченные и неработающие в принципе.. Как бы там ни было - на всякий случай рассказ, как настроить наш шлюз, если к провайдеру надо соединятся по впн; проверить с нуля на связке двух виртуальных машин не получится, так что все настройки будут с моего домашнего шлюза. Не знаю, как там у всех, но "Домашний интернет" от билайна предполагает, что в квартиру затягивается витая пара, которая где-то там на чердаке идет в домовой маршрутизатор (или как эти фигни называются), дома между собой соединяются оптоволокном; есть понятие "внутрисеть" и собственно "интернет", внутри сети 100 мбит/сек скорость, в интернет - сколько купил. Внутри сети есть несколько неплохих ресурсов, в т.ч. неск. торент-трекеров, так что кино можно вытянуть за пару минут Внутри сети автоматически выдается адрес из сетки 10.*.*.* (не помню там уж точно), чтобы выйти в интернет, надо установить VPN соединение, при этом будет динамически выдан реальный ip-адрес (который к примеру можно использовать на dyndns). Поднятое соединение с точки зрения операционки выглядит как и 2 других (eth0, eth1) и обзывается ppp0 - так что чтобы все заработало, надо сообщить правилам shorewall-а о нем. После такого длинного вступления собственно надо сделать это и все остальное (все в консольке - гуя у меня нету; это я к тому, что пока гуглил много читал о каких-то проблемах Network Manager-а с впн-ом - ничего про это не знаю)
Для начала надо установить пакет для поддержки vpn:
   1: sudo apt-get install pptp-linux
Потом открываем файл с настройками pptp:
   1: sudo pico /etc/ppp/options.pptp
который у меня выглядит так:
   1: lock
   2: noauth
   3: refuse-eap
   4: nobsdcomp
   5: nodeflate
   6: persist
   7: maxfail 0
   8: defaultroute
   9: replacedefaultroute
Точно могу сказать только о смысле двух последних опций: после установки соединения таблица маршрутов будет изменена так, чтобы все ходило через поднятый ppp0 интерфейс (и возвращалось "как было", если vpn-соединение будет разорвано): у меня вывод route показывает следующее:
   1: name@ubuntu-pc:~$ route    
   2: Kernel IP routing table
   3: Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
   4: 94.27.126.9     10.43.70.1      255.255.255.255 UGH   0      0        0 eth0
   5: 10.43.70.0      *               255.255.255.0   U     0      0        0 eth0
   6: 192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
   7: link-local      *               255.255.0.0     U     1000   0        0 eth1
   8: 10.0.0.0        10.43.70.1      255.0.0.0       UG    0      0        0 eth0
   9: default         *               0.0.0.0         U     0      0        0 ppp0
Дальше надо открыть по очереди файлы /etc/ppp/chap-secrets и /etc/ppp/pap-secrets и вставить туда строкуbash format:
   1: "account@internet.beeline.ua"        PPTP       "password_here"       *
(заменив естественно account@beeline.. на свой логин и password_here на свой пароль Дальше надо создать файл (скажем с именем beeline) с настройками конкретного подключения:
   1: sudo pico /etc/ppp/peers/beeline
со следующим содержимым:
   1:  
   2: pty "pptp vpn2.beeline.ua --nolaunchpppd --nobuffer --loglevel 0"
   3: connect /bin/true
   4: name account_here
   5: remotename PPTP
   6: file /etc/ppp/options.beeline
   7: ipparam beeline
   8: persist
   9: maxfail 0
  10: lcp-echo-interval 30
  11: lcp-echo-failure 4
  12: mtu 1460
  13: vpn2.beeline.ua - это
сервер для проверки юзера, его должен сказать провайдер; account_here понятно что меняется, из файла /etc/ppp/options.beeline беруться настройки, которые отличаются от глобальных настроек в /etc/ppp/options.pptp; хотя у меня они не отличаются, так что и строчку file /etc/... можно выкинуть наверное, но если работает - пусть работает.. в общем в файле /etc/ppp/options.beeline у меня написано:
   1: nodeflate
   2: nobsdcomp
   3: noauth
Теперь по идее уже можно попробовать соединится:
   1: sudo pon beeline
чтобы разорвать соединение, достаточно набрать
   1: sudo poff beeline
, в /var/log/messages можно посмотреть вывод об ошибках, если все пойдет как-то не так Чтобы автоматизировать поднятие vpn при старте системы, достаточно отредактировать файлик /etc/network/interfaces, отредактировав его там, где описывается сетевая карта, подключенная к провайдеру, вот так:
   1: # my Beeline interface
   2: iface eth0 inet dhcp
   3:  
   4: post-up pon beeline
   5: pre-down poff beeline
Все, при загрузке системы после поднятия сетевой карты автоматически будет "дозвон" до провайдера; мои настройки (не знаю, какие именно правда ;) ) обеспечивают перезвон при ошибке или обрыве (однажды пол-дня не было инета - в логе увидел, что комп все эти пол-дня пытался соединится, у провайдера в тот день были какие-то траблы) Итак, vpn поднялся, но чтобы все в локальной сети работало "как раньше", надо поправить несколько правил: в файл /etc/shorewall/interfaces добавим запись о том, что у нас есть еще один сетевой интерфейс и что он относится к внешней сети:
   1: net ppp+ detect dhcp,routeback
Я написал ppp+, а не ppp0, потому что заметил, что после нескольких реконектов (в основном когда был глупый и делал ерунду, но все же) имя интерфейса могло становится ppp1 и т.д. - т.е. маска "+" означает любую цифру. В /etc/shorewall/masq также надо добавить правило - осуществлять перенаправление между ppp и внутренней сетью; интуитивно понятно, что надо добавить всего лишь
   1: ppp+ eth1
(конечно если внутренняя сеть - это eth1) В policy ничего не поменялось, не поменялись зоны в zones, rules описывает отношения между зонами, так что там тоже все по старому.. единственный новый файл (и я сейчас не уверен, что он нужен ;) но трогать не хочу) - /etc/shorewall/tunnels:
   1: pptpclient net
И это все, все должно работать.. по крайней мере у меня - работает :)

11 комментариев:

  1. А что за каша с кодом?
    В половине случаев вставлен совсем не тот код, который по идее должен быть.
    Начиная с:
    Дальше надо создать файл (скажем с именем beeline)
    и до конца

    ОтветитьУдалить
  2. это был "упс.."

    где-то что-то почему-то сглюкнуло.. проверил/поправил

    ОтветитьУдалить
  3. Наверно я подниму старую тему но...
    Насколько я понял, нат в данном конкретном случае подымаеться ТОЛЬКО на ppp+, а ведь тогда доступ к билайновской сетке из локалки уже не будет...

    как решили эту проблему???

    ОтветитьУдалить
  4. как-бы про такую проблему я слышал (и сталкивался) только когда vpn соединение понималось на "железном" роутере (моему даже дописывание маршрута не помогло)

    а так по вот этим своим же мануалам настраивал сеть дома, и внешняя и внутренняя сеть работают: например много файлов с torrents.ru качаю/раздаю на скорости 7-8 мегабайт/сек - когда есть сиды в локальной сети, потому что в сети есть ретрекер

    ОтветитьУдалить
  5. вот к примеру вывод route прямо сейчас - с поднятым vpn:

    hamster@chest:~$ route
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    10.0.0.20 10.43.70.1 255.255.255.255 UGH 0 0 0 eth0
    94.27.126.13 * 255.255.255.255 UH 0 0 0 ppp0
    10.0.0.26 10.43.70.1 255.255.255.255 UGH 0 0 0 eth0
    10.43.70.0 * 255.255.255.0 U 0 0 0 eth0
    localnet * 255.255.255.0 U 0 0 0 eth1
    10.0.0.0 10.43.70.1 255.0.0.0 UG 0 0 0 eth0
    default * 0.0.0.0 U 0 0 0 ppp0
    hamster@chest:~$

    видно (если видно, "табличка" могла порваться), что после установки соединения маршрутом по умолчанию стал ppp0; т.е. на него пойдет все, что не перенаправится правилами ранее - а пакеты, следующие в 10.*.*.* (т.е. во внутрисеть) пойдут в 10.43.70.1 - т.е. по "быстрому" 100-мбитному маршруту

    специально в route я ничего не добавлял, "само" настроилось..

    ОтветитьУдалить
  6. Понятное дело, что локально билайновская сетка будет работать... А вот для локальной сети она будет доступна?

    ведь по идеи в /etc/shorewall/masq должно быть так:
    ppp+,eth0 eth1

    ОтветитьУдалить
  7. да и в зонах стоит совместить ppp+ и eth0:
    /etc/shorewall/zones
    net ppp+,eth0 detect dhcp,routeback

    по идеи :)
    собственно интересует, работает ли все это на практике?

    ОтветитьУдалить
  8. я слегка уже запутался, в чем проблема была..

    на практике: у меня дома в локальной сети комп для игр, комп для кино, iPod и psp, все ходят в инет через маршрутизатор с убунту, при этом локальная сеть билайна работает одновременно с инетом, скорость скачки/раздачи в билайновскую сеть - до 10 мб/сек (в т.ч. и торенты с торрентс.ру или тапочек, если указан адрес ретрекера и есть локальный сиды), из инета - до 800 кб/сек

    в masq ppp+ я ж писал что добавлял.. zones я не трогал (может то опечатка? в zones не указываются, какие интерфейсы входят, просто определения зон), а в interfaces я добавил ppp+

    ОтветитьУдалить
  9. Спасибо, ключевое слово прозвучало :)
    значит буду пробывать...

    ОтветитьУдалить
  10. Ubuntu-server 9.10 i386
    Мои 5 копеек :)
    повторил все по инструкции, но пришлось поправить /etc/ppp/options.beeline - добавить:
    defaultroute
    replacedefaultroute
    перед noauth

    иначе маршруты не подымались :(

    из проблем: маскарад пока не пашет... но нэт на серве уже есть...

    ОтветитьУдалить
  11. маскарад не поднимался по банальнейшей причине: в 9.10 shorewall перенесен в rc4 (т.е. до ppp), соответсвенно ppp0 еще нет и шоволл отваливаеться с критом...

    лечиться внесением скрипта запуска шовола в /etc/ppp/ip-up.d

    ОтветитьУдалить