VPN сървър под Linux

Може ли отнякъде си да се свържете с компютър с вашия офис и да работите във вътрешната му мрежа? Разбира се. Това нещо се нарича VPN, и е доста разпространено.

Пускането на VPN свързаност в някой офис често бива смятано за “черна магия”, посилна само за най-легендарните администратори. Е, не е точно така. Имате ли в този офис подходяща машина под Linux? Ако да, няма да ви е никакъв проблем да пуснете на нея VPN сървър. По-долу е описано как се прави това на Debian GNU/Linux 4.06.0 (Squeeze), чрез PPTP VPN.

Инсталиране

Ако вече имате инсталиран на някой компютър Debian Squeeze, почти всичко е готово. (За предпочитане е компютърът да е сървър, който да не се изключва. Когато си извън офиса, понякога е удобно и нужно да се свързваш по всякакви странни часове. Аз обикновено използвам или Интернет гейта, ако е компютър, или файлсървъра.) Ако нямате вече инсталиран, е нужно да инсталирате. Върши работа и старичка машина и инсталацията не е сложна. Графична среда не ви е нужна.

След като вече имате машината и базовата OS, трябва да проверите дали в ядрото има вградена поддръжка за MPPE (елемент от PPTP протокола). Дебианските ядра от 2.6.15 нататък я имат; за Squeeze стандартното е 2.6.32 – всичко трябва да е наред. Ако държите да пробвате, опитайте следната команда:

modprobe ppp-compress-18 && echo OK

(Изпише ли OK, сте… ОК. 🙂 )

Втората стъпка е инсталирането на VPN сървърния софтуер. То също е простичко – въведете:

apt-get install pptpd

Третата стъпка е да подсигурите фирмата ви да има публичен статичен IP адрес в Интернет (било това адресът на машината, която ще бъде VPN сървър, или на фирмения рутер). Говорете на тази тема с Интернет доставчика си.

Конфигуриране

При свързване към вашия VPN сървър на клиентския компютър (напр. лаптопа, който си носите в командировка) се създава “мрежово устройство” – по терминологията на Уиндоус, вашият VPN. То трябва да има някакво IP, ако ще комуникира през мрежа. А тъй като VPN-ът е пренос на мрежа, на сървъра също се появява съответно на вашия лаптоп “мрежово устройство”, което също трябва да има някакво IP. Първата ви работа е да настроите VPN сървъра да раздава тези IP-та.

Отворете файла /etc/pptpd.conf. Към края му ще намерите таговете localip и remoteip – те са, които ви трябват. Localip са адресите, които ще се появят на сървъра – те задължително трябва да са адреси от вътрешната ви мрежа. Remoteip са адресите, които ще бъдат на VPN устройството на отдалечения компютър – те могат да са адреси както пак от вашата мрежа, така и от друга частна мрежа. Във файла е дадено указание в какъв синтаксис се изписват, и примери.

Принципно localip може да е и само едно – полезен вариант, ако имате много външни клиенти и вътрешна мрежа с почти изразходени IP-та. Ако обаче не е така (а обикновено не е), не се скъпете, позволете да има достатъчно локални IP-та за всички свързващи се компютри. Полезно е например, ако някой в офиса иска да си откопира нещо от споделена директория на “командирования” компютър.

Ако не сте мислили как да разпределите вътрешната мрежа, сега е моментът. Примерно, ако мрежата ви ползва сегмента 192.168.1.0 – 192.168.1.255, бихте могли да оставите адресите от 1 до 100 за фиксирани вътрешни IP-та, 101 до 200 за раздавани по DHCP, и 201 до 254 за давани на VPN-а.

Важно е адресите за localip и за remoteip да не съвпадат, или ако са обхвати, да не се припокриват. Иначе стават… бози.

След като въведете промените, престартирайте pptpd сървъра:

/etc/init.d/pptpd restart

Второто нещо, което трябва да настроите, са потребителите на VPN-а и паролите. Тяхното място е във файла /etc/ppp/chap-secrets. Просто добавете на края му съответния брой редове със следния синтаксис:

username pptpd password *

където username е името на потребителя, а password – паролата му.

Не е нужно да рестартирате нищо след това – при първия опит за свързване сървърът ще си ги прочете автоматично.

Ако имате firewall на компютъра, е нужно да направите необходимия достъп в него. С iptables става чрез следните команди:

iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
iptables -A INPUT -p 47 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 1723 -j ACCEPT
iptables -A OUTPUT -p 47 -j ACCEPT

VPN протоколът използва както порт 1723 на протокола TCP за начална автентификация, така и протокола GRE (протокол 47 – не го бъркайте с порт 47 на протоколите TCP или UDP!) за довършване на автентификацията и прехвърляне на данни. Трябва да отпушите и двата.

Форуардване през рутер

Ако сървърът е инсталиран на машина, която няма пряк излаз към Интернет, е нужно да подсигурите нужните портове и протоколи да се препращат към нея. Настройте фирмения гейт или рутер да форуардва към IP адреса на съответната машина порт 1723 на TCP протокола и GRE протокола. (Някои рутери не могат да форуардват изобщо. Други могат, но само TCP, UDP и/или ICMP протоколите – също няма да свършат работа. При трети номерът става чрез специални обявявания. В краен случай VPN сървърът може да бъде обявен за DMZ компютър, ако рутерът поддържа тази опция и това няма да компрометира сигурността на други задачи на сървъра.)

Свързване към сървъра

Обикновено изнесените машини са под Windows. На него се процедира по следния начин:

– Създавате нова мрежова връзка, от тип VPN към офиса ви
– За сървър, към който ще се свързвате, въведете IP адреса на VPN сървъра или фирмения рутер.
– За потребител и парола въведете потребител и парола, които сте задали при конфигурирането на сървъра.
– За име на връзката е подходящо например “Офиса” 😉
– Името на услугата просто оставете празно.

След това стартирайте тази връзка, и ще се окажете свързани към офиса си. Изчакайте малко (SMB / Windows мрежата има голяма латентност – могат да минат до 20 минути, преди да се появят компютрите от офиса), и… сте в бизнеса. 🙂

8 Responses to 'VPN сървър под Linux'

  1. CTEHATA Says:

    Едно допълнение – ако не можете да се разберете с доставчика си за “статичен адрес”, то най-вероятно живеете извън София 😉
    В този случай услуги тип DynDns.com (не е реклама, нямам връзка с тях), съчетани с подходящ клиент могат да са от огромна полза.

  2. ицаци Says:

    За нещастие се увеличава броя на мрежите, в които наблюдавам, че GRE и IPsec пакетите просто биват филтрирани още на първия маршрутизатор, поради което бих препоръчал OpenVPN като по-универсално VPN решение. Използва стандартен SSL протокол за шифроване и подписване на пакетите, TCP или UDP за пренос на данните и поддържа автентикация с парола, сертификат или и двете заедно. Плюс това може да тунелира или IP, или Ethernet пакети, като във втория случай може да се направи bridge между VPN интерфейса и локалната мрежа на сървъра. Конфигурацията на клиентската и на сървърната страна става с прости 10-редови текстови файлове, като има препакетирани клиентски версии за Windows и за Mac OS X. Програмата е с отворен изходен код и я има в пакетите на повечето Linux дистрибуции и в някои от фърмуеърите за WiFi устройства.

    Стана малко като реклама, но истината е, че това е решението, което просто работи. Дори към настоящия момент, OpenVPN е единственото работещо решение за достъп до мрежата на RWTH Aachen. Cisco Any_нещо_си_там_VPN просто отказва да се върже през мрежата на o2.

  3. Pastora Says:

    Извинявам се за буквализма, но под “Debian GNU/Linux 4.0 (Squeeze)” дали случайно не визирате Debian GNU/Linux 6.0 (Squeeze)?

  4. Anonymous Says:

    “появяването” на компютрите няма общо със SMB. В зависимост от версията на ОС и дали има AD/Dynamic DNS се използват различни методи, от NetBIOS до UPnP.

  5. Григор Says:

    @СТЕНАТА: Полезно допълнение. 🙂

    @ицаци: Наистина е така. Целта на записа обаче беше да се даде някакво максимално простичко решение – затова предложих най-простия, вграден в Уиндоус VPN.

    @Pastora: Абсолютно. Гадна правописна грешка.

    @Anonymous: Подобни VPN-и обикновено се използват от съвсем малки фирми или семейни компютри, каращи без AD и прочее. Така че в крайна сметка се опира точно до латентността на обявяване на компютър в SMB протокола.

  6. юлий Says:

    Много се радвам, когато чета подобни постове, защото много рядко хората, които са напреднали в материята имат желание да обясняват на достъпен език проблеми, които за тях са елементарни.

    п.с. Ако @Pastora е от Ямбол – много поздрави, от времето, когато черпеше с CC в irc каналите.

  7. tonywoolf Says:

    Ако пък имате рутър, който поддържа dd-wrt, можете лесно да активирате вградения pptp сървър, за да разрешите входящи връзки или да активирате вградения клиент. Просто и лесно, ползвам го от много, много време и работи безотказно. Мега версията на dd-wrt поддържа и OpenVPN сървър.

  8. VPN сървър под Linux | К+ Says:

    […] VPN сървър под Linux via Grigor Gatchev – A Weblog by Григор on 2/29/12 […]

Leave a Reply