Настройка сети и ВПН подключения «вручную» в Linux. Использовать блокировку портов UCPP, чтобы одновременно несколько # последовательных устройств не обращались к одному порту

После шумихи вокруг Windows 10 пользователи начали понимать, что эта система небезопасна и может распространять личную информацию. Все больше и больше новых пользователей начинают искать альтернативы среди открытых систем. Пользователям нужна система, которая не шпионит за их данными, и обеспечивает максимальную безопасность и конфиденциальность. Для обеспечения большей анонимности в интернете можно использовать VPN сервисы.

Но когда в Ubuntu, Fedora, OpenSUSE или других дистрибутивах Linux доходит дело до VPN, у пользователей могут возникнуть проблемы. Для разработчиков важнее пользователи Windows, а Linux до сих пор еще не в приоритете. В этой статье мы рассмотрим лучшие VPN для Linux, которые вам обязательно будут полезными. В списке будут как платные так и бесплатные сервисы.

Обычно, для подключения VPN в Linux используются такие технологии, как OpenVPN, OpenConnect или NetworkManager. Но будет намного лучше, если VPN провайдер выпускает свой клиент для Linux. Его намного проще настроить, и здесь есть намного больше функций. Большинство VPN в этом списке имеют свой клиент для операционной системы Linux.

1. PIA - Private Internet Access

Провайдер Private Internet Access - это один из лучших и самых распространенных VPN на сегодняшний день. Он доступный, позволяет подключить сразу несколько устройств, предлагает приемлемую скорость работы сети, а также полностью безопасен. В том числе, это один из самых популярных VPN сервисов для Linux. Это вполне заслужено. Здесь используется OpenVPN с шифрованием с помощью 256 битного AES ключа. У сервиса есть свой клиент как для Debian, так и для Red Hat систем. Но учитывая все преимущества сервиса, стоит он не дешево - 3,33 $ в месяц.

2. ExpressVPN

Компания ExpressVPN выпустила свой официальный клиент для Linux совсем недавно, в апреле 2016. К сожалению, графического интерфейса пока нет и программа работает только из командной строки. Но это все еще намного проще чем настройка отдельных конфигурационных файлов.

Список серверов всегда будет в актуальном состоянии, а пользователи могут переключиться между протоколами UDP и TCP при работе по OpenVPN. Самым большим недостатком этого VPN для Linux есть цена. Сервис стоит вдвое больше чем PIA. В течение 30 дней сервис возвращает деньги, так что вы можете попробовать VPN бесплатно. Но у серверов более внушительные характеристики, а скорость сети намного больше.

ExpressVPN работает на Ubuntu, Fedora, Debian и CentOS. Одновременно вы можете подключить до трех устройств, а также теперь вы можете работать с netflix.

3. AirVPN

AirVPN предлагает официальные клиенты для дистрибутивов Linux - Debian, Ubuntu, OpenSUSE и Fedora. Вы можете использовать его как из командной строки, так и через графический интерфейс. Здесь больше всего настроек безопасности. Вы можете подключиться с помощью OpenVPN, SSH или SSL, а также пересылать трафик через ряд альтернативных портов. Этот сервис тоже платный, цена как и у PIA.

4. Buffered

Это новый VPN сервис, основанный в Венгрии. Вы можете подключить одновременно три устройства, а трафик неограничен. Сервис дорогой, но есть гарантия возврата денег в течение 30-ти дней. Интересной вещью есть то, что клиент может искать открытые порты на защищенных серверах. Это отличная возможность обойти страницы входа в систему, которые часто встречаются в гостиницах и аэропортах. Серверы находятся в 16-ти странах, но скорость работы очень быстрая. Клиент работает в большинстве дистрибутивов Linux.

5. Mullvad

Сервис Mullvad пошел еще дальше и предлагает клиент с открытым исходным кодом для Debian и Ubuntu. Поддерживаются такие функции, как отключение интернета, защита от утечки DNS, маршрутизация ipv6. Сервис ведет журналы, но не логи соединений, поэтому в плане безопасности он надежный. Одновременно можно использовать три соединения. Также доступно перенаправление портов. Выбор сервера ограничен, но это допустимо. На официальном сайте есть пакеты для Debian и Ubuntu, но программа будет работать в большинстве дистрибутивов. Дальше рассмотрим лучшие бесплатные VPN 2016.

6. Itshidden

Это уже бесплатный VPN Linux. Все сервисы, что мы рассматривали выше - платные, но они более надежны. Ни один из них не ведет логов подключений, а это значит, что к вашей информации никто не сможет получить доступ: ни злоумышленники, ни правоохранительные органы. В бесплатных сервисах все намного по-другому. Многие из них ведут логи, а также используют небезопасные протоколы связи.

Например, этот VPN сервис использует протокол PPTP, так что она не совсем безопасна, но если аналогов нет, то использовать можно. Политика конфиденциальности заявляет, что никакие логи посещений не ведутся, так что к вашим данным по-прежнему не могут получить доступ, по крайней мере, со стороны сервера VPN.

7. SecurityKISS

Это еще один лучший бесплатный VPS для Linux, у которого есть официальный клиент для этой операционной системы. Поддерживаются различные протоколы работы в том числе SSH, FTP, RDP, Telnet и так далее. Но как и у других бесплатных VPS здесь есть несколько минусов. Компания хранит журналы и IP адреса пользователей, а это не желательно для тех, кто хочет защитить свою конфиденциальность. Также в бесплатной версии количество доступного трафика ограничено 300 мегабайт в сутки, а это очень мало.

Выводы

Даже если провайдер VPN не предоставляет официального клиента для Linux, почти все они могут быть настроены с помощью OpenVPN. В этой статье мы рассмотрели лучшие VPN для Linux, причем как бесплатные, так и платные, поэтому вы сможете выбрать то что вам нужно. Бесплатные VPN для Linux имеют свои ограничения, но в некоторых ситуациях с этим можно мириться. А вы используете VPN для работы в сети? Какие бесплатные сервисы могли бы посоветовать другим пользователям? Напишите в комментариях!

На завершение небольшая лекция, о том, что такое VPN и как работает эта технология:

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

Для этих целей можно использовать виртуальные частные сети (Virtual Private Network - VPN). В нашем случае, это будет самый распространенный протокол в странах СНГ, а именно - PPTP (Point-to-Point Tunneling Protocol). Многие кабельные провайдеры интернета используют именно его для предоставления услуг доступа ко .

Поднять свой сервер на Linux Ubuntu Server LTS не так уж трудно. Для этого нам понадобится доступ к Интернету и реальный IP (если нужно будет подключаться из Интернета).

Заходим на сервер, используя учетную запись root и устанавливаем необходимые пакеты командой apt-get install pptpd Нам предложат также установить пакет bcrelay, он позволяет дублировать широковещательные пакеты, принятые на входящем интерфейсе на виртуальные (PPP тоннели клиентов).

Нажимаем enter и наш сервер установлен. Приступим к конфигурации. Откроем файл nano /etс/pptpd.conf и в самом низу увидим следующие строки

#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
# or
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245

Это настройки IP адресов клиентов. Раскомментируем первые две строки (удалим символ #) и немного подправим их.

Строка localip 192.168.0.1 значит, что у нашего VPN сервера будет IP 192.168.0.1 можно указать наш IP в одной из непосредственно подключенных сетей. Например, у меня в домашней сети у сервера IP адрес - 172.30.2.1 Чтобы не нагружать сервер еще и ненужной я использовал его же.

Вторая строка - remoteip 192.168.0.234-238,192.168.0.245 указывает диапазон IP адресов, которые будут присваиваться клиентам. Как видно из этих строк, сетевой адрес может быть любым (во второй группе строк). Для удобства мы выберем его из того же диапазона что и IP нашего сервера.

Я использую дома такую логику выдачи IP: 1й - роутер, 2-19 - компьютеры, 20-49 - статический VPN (при подключении выдается один и тот же адрес), 50-100 - VPN клиенты, 101-199 - Wi-Fi клиенты, 200-254 - для различных устройств (например IP роутера, телевизора и т.п). Укажем такой диапазон remoteip 172.30.2.50-100 и сохраним конфигурацию.

Перейдем в каталог cd /etс/ppp/ здесь хранятся все файлы настройки pptpd (сервер) и pppd (клиент).

Переименуем файл pptpd-options командой mv pptpd-options pptpd-options.bak и создадим его по новой nano pptpd-options Это сделано для того, чтобы легче было вставить несколько строк в новый файл, чем искать параметры среди десятков строк с комментариями. Вставим в этот новый файл такое содержимое:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
#require-mppe-128
ms-dns 172.30.2.1
nodefaultroute
lock
nobsdcomp
auth
logfile /var/log/pptpd.log

Что все это значит? Давайте по порядку:

  • Использовать имя pptpd для поиска логинов в chap-secrets
  • При указании этой опции pptpd не согласится аутентифицироваться по протоколу refuse-pap, refuse-chap, refuse-mschap
  • Требовать у партнёра аутентификации с помощью MS-CHAPv2
  • Требовать использования MPPE со 128-битным шифрованием require-mppe-128 т.е. шифровать весь трафик. Это увеличивает нагрузку на сервер и не все "слабые" устройства его поддерживают (Wi-Fi роутеры и т.п.).
  • Предложить использовать DNS сервер с IP 172.30.2.1
  • nodefaultroute - не устанавливать шлюз по умолчанию от сервера к клиенту, в противном случае, весь трафик в Интернет будет послан через подключившегося клиента, также Интернет отключится из-за потери маршрута к провайдеру.
  • Lock - блокировать сессии, т.е. с одного логина может быть только одно подключение
  • nobsdcomp - не сжимать трафик. При включении увеличивает нагрузку на наш сервер
  • auth - требовать авторизации (логин и пароль)
  • logfile /var/log/pptpd.log - писать логи работы в этот файл.

Сохраняем и закрываем этот конфигурационный файл.

Теперь нужно добавить пользователей, которые будут подключаться к нашему серверу. Откроем файл nano chap-secrets (он используется для хранения учетных записей PPP).

Для корректной работы нужно соблюдать такой формат: колонки должны быть разделены хотя бы одним пробелом или табом (Tab), не допускается использование пробелов в именах (иначе пробел рассматривается как следующая колонка), логин должен начинаться на букву. Например:

Первая колонка - это логин пользователя, вторая - имя сервиса. В нашем случае это pptpd. Далее - пароль пользователя, последняя - IP адрес, который будет выдан. Причем, если стоит * то IP адрес будет выдан из заданного ранее диапазона автоматически. Также в качестве IP можно указать адрес, который может быть за пределами диапазона.

Перед тем, как использовать сервер, нужно его перезапустить. Для этого выполним /etс/init.d/pptpd restart если в конфигурации нет ошибок, сервер будет запущен.

rоot@CoolServ:/etс/ppp# /etс/init.d/pptpd restart
Restarting PPTP:
Stopping PPTP: pptpd.
Starting PPTP Daemon: pptpd.

Если вы используете ) в него нужно добавить такие строки:

# VPN - PPTPD
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

Для предоставления доступа к Интернету VPN клиентам через наш сервер нужно дописать такое правило в IPTables:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Где eth1 - интерфейс в сторону Интернета.

Для проверки можно создать тестовое подключение VPN с отключенным шифрованием (не обязательным) и используя любой указанный логин подключиться к серверу.

Частые ошибки при подключении

Чтобы создать клиентское подключение PPTP из Windows XP выполняем следующие пункты: нажимаем "Пуск" - "Панель управления" - "Сеть и подключения к интернету" - "Сетевые подключения".


Жмем на "Создание нового подключения" - это запустит "Мастер новых подключений".







Теперь вписываем название подключения. Здесь можно написать что угодно, это будет просто названием подключения, для примера мы напишем "PPTP" (по типу соединения).



Может появиться следующий вопрос «Использовать настроенные подключения к Интернету?» (Если у Вас уже настроено подключение PPPoE), в нем нажимаем "Не набирать номер".



Если такое сообщение не появилось, читаем далее.

Теперь у Вас попросят ввести адрес сервера, указываем IP вашего сервера или его имя.




В окне, показанном на фото выше, выбираем "Свойства". Появится окошко в котором выбираем вкладку "Безопасность". Находим в нем пункт "Требуется шифрование данных" и убираем галочку. в противном случае мы не сможем подключиться, будут появляться ошибки 741 или 742 - «требуемый тип шифрования не поддерживается сервером».


После этого нажимаем кнопку «ОК», возвращаемся в предыдущее окно, вводим логин, пароль и подключаемся к нашему удаленному серверу по защищенному VPN каналу!

Казалось бы — про VPN не говори, про него все сказано. В сети выложено огромное количество настроек и HOW-TO на любой вкус. Скрупулезный анализ показал, что основные проблемы новичков возникают на этапах аутентификации клиента и VPN-сервера, а также настройки роутинга. На них мы остановимся подробно. Попутно выяснилось что настройки VPN-соединения можно сильно упростить и тем самым облегчить понимание ключевых параметров.

Именно для облегчения понимания мы рекомендуем всем новичкам настраивать VPN из командной строки и не пользоваться (полу)автоматическими конфигураторами VPN — как показывает практика, от их непрозрачных настроек одни неприятности. Как вы увидите ниже, этих настроек очень небольшое количество, так что незачем вставать на костыли, чтобы бежать стометровку. К тому же командная строка вам сослужит добрую службу, когда пойдет что-то не так. Вы всегда можете запостить свои конфиги и вывод консольных команд, и суровые бородатые дядьки, которые давно на «ты» с линуксом, вам помогут. Потому что вы говорите с ними на одном языке. И наоборот, что-нибудь вроде «в этом окошке я отмечаю галочкой второй снизу пункт» практически гарантирует отсутствие обратной связи.

Настраивать VPN-соединение мы будем по шагам. В конце каждого шага — шаг проверки. Все команды в командной строке вводятся от имени суперпользователя (root). Готовы? Тогда вперед!

Что нам нужно для работы

Для поднятия и настройки VPN-соединения нам потребуются всего две программы — ppp и pptp . Программа ppp с вероятностью 99% уже стоит в вашем дистрибутиве, пакет, содержащий pptp , в разных дистрибутивах называется по-разному, в основном pptp-linux . После установки в системе должны присутствовать два исполняемых файла/usr/sbin/pppd и /usr/sbin/pptp . Вкратце — pptp создает туннель к VPN-серверу, через который ppp соединяется и работает как обычное модемное соединение.

Естественно, для поднятия соединения нам необходима рабочая локальная сеть и данные провайдера об IP (или имени) VPN-сервера, VPN-логине и VPN-пароле. Также пригодится информация об используемом протоколе аутентификации и о наличии шифрования траффика. Если ее нет — ничего страшного. Подавляющее большинство провайдеров используют протокол аутентификации MS-CHAP v2, а о наличии шифрования нам подскажут логи ошибок pppd . Подсказка: если у вас стоит MS Windows и там поднято VPN-соединение, его параметры можно посмотреть на вкладке соединения «Сведения». Нас интересуют параметры «Проверка подлинности» и «Шифрование».

Все манипуляции мы будем проводить на имеющейся под рукой домашней сети Корбина телеком. Итак, провайдер снабдил нас следующей информацией:
Локальная сеть:

IP: 10.167.17.38
Маска подсети: 255.255.0.0.
Шлюз (gateway): 10.167.0.17
DNS1: 195.14.50.1
DNS2: 195.14.50.21

VPN параметры:

Имя VPN-сервера: vpn.corbina.net
Логин: VPN_LOGIN
Пароль: VPN_PASSWORD

Проверка работоспособности локальной сети

Если сеть уже настроена, мы должны увидеть примерно следующее

# ifconfig eth0




RX packets:2884 errors:0 dropped:0 overruns:0 frame:0
TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:243742 (238.0 Kb) TX bytes:2242 (2.1 Kb)
Interrupt:19

# ip a sh dev eth0
3: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:13:D4:68:B2:3E brd ff:ff:ff:ff:ff:ff
inet 10.167.17.38/16 brd 10.167.255.255 scope global eth0
<# route -n
Kernel IP routing table


0.0.0.0 10.167.0.17 0.0.0.0 UG 0 0 0 eth0

# ip r
10.167.0.0/16 dev eth0 proto kernel scope link src 10.167.17.38
default via 10.167.0.17 dev eth0 scope link

Если ничего подобного не выводится,поднимаем сеть и указываем в качестве шлюза по умолчанию наш шлюз

Ifconfig eth0 10.167.17.38 netmask 255.255.0.0 up

Ip a a 10.167.17.18/16 dev eth0
ip l s up dev eth0
ip r a default via 10.167.0.17

Прописываем IP DNS-серверов в файл /etc/resolv.conf Он должен выглядень следующим образом:

# cat /etc/resolv.conf
nameserver 195.14.50.1
nameserver 195.14.50.21

Если сеть работоспособна, должны пинговаться шлюз и VPN-сервер. Проверяем

# ping -c5 10.167.0.17
PING 10.167.0.17 (10.167.0.17) 56(84) bytes of data.
64 bytes from 10.167.0.17: icmp_seq=1 ttl=255 time=3.95 ms
64 bytes from 10.167.0.17: icmp_seq=2 ttl=255 time=0.526 ms
64 bytes from 10.167.0.17: icmp_seq=3 ttl=255 time=0.528 ms
64 bytes from 10.167.0.17: icmp_seq=4 ttl=255 time=3.31 ms
64 bytes from 10.167.0.17: icmp_seq=5 ttl=255 time=0.534 ms
# ping -c5 vpn.someserver.net

64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=1 ttl=248 time=1.17 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=2 ttl=248 time=1.16 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=3 ttl=248 time=1.19 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=4 ttl=248 time=1.17 ms
64 bytes from vpn8-l0.msk.corbina.net (195.14.38.8): icmp_seq=5 ttl=248 time=1.00 ms

Предварительная настройка роутинга

Примечание: Предварительная настройка роутинга необходима в том случае, когда VPN и/или DNS-сервера находятся в других подсетях. Если это не так (да вы счастливчик!) — смело пропускайте этот шаг.

Для начала узнаем IP нашего VPN-сервера с помощью команды ping .

# ping -c5 vpn.corbina.net
PING vpn.corbina.net (195.14.38.8) 56(84) bytes of data.

Как видно из команды ping, IP VPN сервера 195.14.38.8

Примечание: Чтобы не копаться в частностях, мы допускаем в данном примере, что vpn.corbina.net имеет только один IP. Ситуацию, когда хост vpn.corbina.net имеет не один а несколько IP адресов (на самом деле их 20) мы рассмотрим в шаге «Автоматизация».

Добавляем в нашу таблицу роутинга статические маршруты на VPN и DNS сервера:

Route add -host 195.14.50.1 gw 10.167.0.17
route add -host 195.14.50.21 gw 10.167.0.17
route add -host 195.14.38.8 gw 10.167.0.17

Ip r a 195.14.50.1 via 10.167.0.17
ip r a 195.14.50.21 via 10.167.0.17
ip r a 195.14.38.8 via 10.167.0.17

Удаляем маршрут по умолчанию

Таблица маршрутизации будет выглядеть так:

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
195.14.50.21 10.167.0.17 255.255.255.255 UGH 0 0 0 eth0
195.14.50.1 10.167.0.17 255.255.255.255 UGH 0 0 0 eth0
195.14.38.8 10.167.0.17 255.255.255.255 UGH 0 0 0 eth0
10.167.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

# ip r
195.14.50.21 via 10.167.0.17 dev eth0
195.14.50.1 via 10.167.0.17 dev eth0
195.14.38.8 via 10.167.0.17 dev eth0
10.167.0.0/16 dev eth0 proto kernel skope link src 10.167.17.38

Проверка: мы должны успешно пинговать DNS и VPN сервера.

# ping -c5 195.14.50.1
PING 195.14.50.1 (195.14.50.1) 56(84) bytes of data.
64 bytes from 195.14.50.1: icmp_seq=1 ttl=56 time=4.45 ms
64 bytes from 195.14.50.1: icmp_seq=2 ttl=56 time=1.30 ms
64 bytes from 195.14.50.1: icmp_seq=3 ttl=56 time=1.22 ms
# ping -c5 195.14.50.21
PING 195.14.50.21 (195.14.50.21) 56(84) bytes of data.
64 bytes from 195.14.50.21: icmp_seq=1 ttl=56 time=0.982 ms
64 bytes from 195.14.50.21: icmp_seq=2 ttl=56 time=0.954 ms
64 bytes from 195.14.50.21: icmp_seq=3 ttl=56 time=1.02 ms
# ping -c5 195.14.38.8
PING 195.14.38.8 (195.14.38.8) 56(84) bytes of data.
64 bytes from 195.14.38.8: icmp_seq=1 ttl=248 time=1.34 ms
64 bytes from 195.14.38.8: icmp_seq=2 ttl=248 time=2.60 ms
64 bytes from 195.14.38.8: icmp_seq=3 ttl=248 time=1.09 ms

Настройка параметров VPN-соединения. Тестовый запуск

Все параметры нашего VPN соединения мы запишем в файле /etc/ppp/peers/corbina . Создадим его и наполним следующим содержанием:

Pty "pptp 195.14.38.8 --nolaunchpppd"
user VPN_LOGIN
password "VPN_PASSWORD"
nodeflate
nobsdcomp
noauth

Параметры user и password в комментариях не нуждаются, значение остальных можно посмотреть в файле справки man pppd . Обратим внимание на то, что пароль забран в кавычки.

Убеждаемя, что в файлах /etc/ppp/options , ~/.ppprc , /etc/ppp/options.ppp0 нет незакомментированных параметров, которыми бы система могла затереть наши настройки. Если есть — комментируем

Поднимаем VPN соединение

Pppd call corbina debug nodetach

Появятся логи соединения. Если все прошло успешно, они будут выглядеть примерно так:

# pppd call corbina debug nodetach
using channel 2
Using interface ppp0
Connect: ppp0 <--> /dev/pts/0
sent
rcvd
sent
sent
rcvd
sent
rcvd
sent
rcvd
rcvd

CHAP authentication succeeded
sent
rcvd
sent
rcvd
sent
rcvd
sent
rcvd
Cannot determine ethernet address for proxy ARP
local IP address 89.178.77.182
remote IP address 195.14.38.8
Script /etc/ppp/ip-up started (pid 4072)
Script /etc/ppp/ip-up finished (pid 4072), status = 0x0

На соседнем терминале убедимся, что VPN-соединение установлено. Должен появиться сетевой интерфейс ppp0 :

# ifconfig
eth0 Link encap:Ethernet HWaddr 00:13:D4:68:B2:3E
inet addr:10.167.17.38 Bcast:10.167.255.255 Mask:255.255.0.0
inet6 addr: fe80::213:d4ff:fe68:b23e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24990 errors:0 dropped:0 overruns:0 frame:0
TX packets:97 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2327027 (2.2 Mb) TX bytes:8516 (8.3 Kb)
Interrupt:19

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:13496 errors:0 dropped:0 overruns:0 frame:0
TX packets:13496 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1387313 (1.3 Mb) TX bytes:1387313 (1.3 Mb)

ppp0 Link encap:Point-to-Point Protocol
inet addr:89.178.77.182 P-t-P:195.14.38.8 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:40 (40.0 b) TX bytes:46 (46.0 b)

Если VPN сервер использует шифрование, соединение закончится ошибкой [ЗДЕСЬ ДОЛЖНЫ БЫТЬ ЛОГИ ОШИБКИ]. В этом случае добавим в файл /etc/ppp/peers/corbina строчку

и загрузим соответствующий модуль ядра командой

Запускаем снова. Все должно заработать.

Обратите внимание на параметр MTU интерфейса ppp0 . По умолчанию он равен 1500. Если ваш провайдер использует другую величину MTU (допустим, 1492) — в тот же файл конфигурации etc/ppp/peers/corbina добавляем строчку

Окончательная настройка роутинга

Итак, мы подняли VPN соединение, но в интернет выйти не можем — машина пока не знает, где искать интернет-хосты. Для этого мы должны добавить маршрут по умолчанию через интерфейс ppp0 в нашу таблицу маршрутизации (помните — старый маршрут по умолчанию мы удалили). В качестве шлюза по умолчанию теперь выступает remote IP address, который нам любезно предоставил VPN сервер — 195.14.38.8 (да-да, в нашем случае он совпадает с IP VPN сервера!). Этот remote IP address присутствует как в логах pppd (remote IP address 195.14.38.8), так и в параметрах интерфейса ppp0 , которые выводятся на экран командой ifconfig (P-t-P:195.14.38.8). Вводим:

Route add default gw 195.14.38.8

Route add default dev ppp0

что в данном контексте — одно и то же Теперь попробуем пропинговать какой-нибудь интернет-хост

# ping -c5 www.ya.ru
PING ya.ru (213.180.204.8) 56(84) bytes of data.
64 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=61 time=2.11 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=61 time=2.23 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=3 ttl=61 time=2.39 ms

Работает!

Автоматизация

Теперь, когда соединение оттестировано, можно подумать и об автоматизации. Когда pppd устанавливает соединение, он автоматически выполняет скрипт /etc/ppp/ip-up , когда соединение рвется — выполняется скрипт /etc/ppp/ip-down . Значит, в эти файлы и надо забить весь роутинг, который в предыдущих пунктах мы вводили руками.

Мы не случайно сначала рассмотрели идеальный вариант, когда VPN сервер провайдера представлен в единственном числе и имеет один IP. В этом случае именем хоста (vpn.corbina.net ) можно пренебречь и использовать в настройках только его IP, что мы и сделали. Однако если провайдер большой, под именем VPN сервера скрывается несколько серверов с разными IP, что позволяет провайдеру динамически регулировать нагрузку на них. Для того, чтобы выяснить, какие IP имеет хост vpn.corbina.net , воспользуемся командой host из пакета dnsutils

# host vpn.corbina.net
vpn.corbina.net has address 195.14.38.19
vpn.corbina.net has address 195.14.38.20
vpn.corbina.net has address 195.14.38.1
vpn.corbina.net has address 195.14.38.2
vpn.corbina.net has address 195.14.38.3
vpn.corbina.net has address 195.14.38.4
vpn.corbina.net has address 195.14.38.5
vpn.corbina.net has address 195.14.38.6
vpn.corbina.net has address 195.14.38.7
vpn.corbina.net has address 195.14.38.8
vpn.corbina.net has address 195.14.38.9
vpn.corbina.net has address 195.14.38.10
vpn.corbina.net has address 195.14.38.11
vpn.corbina.net has address 195.14.38.12
vpn.corbina.net has address 195.14.38.13
vpn.corbina.net has address 195.14.38.14
vpn.corbina.net has address 195.14.38.15
vpn.corbina.net has address 195.14.38.16
vpn.corbina.net has address 195.14.38.17
vpn.corbina.net has address 195.14.38.18

Роутинг на всю эту прорву серверов нам нужно один раз внести в файл /etc/ppp/ip-up и привести файл к следующему виду:

#!/bin/sh
#
# This script is run by pppd when there"s a successful ppp connection.
#
route add -host 195.14.38.1 gw 10.167.0.17
route add -host 195.14.38.2 gw 10.167.0.17
route add -host 195.14.38.3 gw 10.167.0.17
....
route add -host 195.14.38.19 gw 10.167.0.17
route add -host 195.14.38.20 gw 10.167.0.17
route del default

а в скрипт /etc/ppp/ip-down мы запишем всего одну строчку, которая вернет нам шлюз по умолчанию после обрыва соединения:

#!/bin/sh
#
# This script is run by pppd after the connection has ended.
#
route add default gw 10.167.0.17

Вы, наверное, уже заметили, что мы не вписали в файл /etc/ppp/ip-up строчку route add default dev ppp0 . Это не нужно — после успешного коннекта pppd сам впишет шлюз по умолчанию, если мы дадим ему команду defaultroute . В результате наш файл настроек /etc/ppp/peers/corbina будет выглядеть следующим образом:

Pty "pptp vpn.corbina.net --nolaunchpppd"
user VPN_LOGIN
password "VPN_PASSWORD"
nodeflate
nobsdcomp
noauth
defaultroute

Pon corbina
poff corbina

Если есть необходимость запускать соединение от простого пользователя, установите программу sudo и в файл /etc/sudoers впишите:

Sergo myhost = NOPASSWD: /usr/bin/pon, /usr/bin/poff

Соответственно, замените sergo и myhost на имя вашего пользователя и его машины. Он сможет запускать и прерывать соединение командами

Sudo pon corbina
sudo poff corbina

На этом настройка подключения завершена.
Источник

Предположим, вы не доверяете VPN-сервисам, либо вас не устраивают высокие тарифы, либо хотите иметь полный контроль над сервером, с возможностью подключать сколько угодно клиентом и использовать любые протоколы. Для вас и предназначен данный раздел! Здесь мы рассмотрим процесс настройки VPN-сервера на Linux, на машине с Debian 7 64bit на борту и OpenVPN, в качестве реализации.

Процесс настройки VPN вручную состоит из нескольких этапов:

  1. Организация сертификационного центра
  2. Настройка VPN-сервера, выдача сертификата
  3. Настройка VPN клиента/ов, выдача сертификататов

Прежде всего стоит сказать, две вещи:

  1. Мы выбрали наиболее простой метод настройки - не идеальный, в плане безопасности, но чуть более универсальный и быстрый в развертывании. В любом случае, в конце данного руководства вы получите защищенную VPN-сеть, которую, при легком “допиливании напильником” можно подстроить под любые потребности и к которой легко подключать новых клиентов (ведь для большинства пользователей, это приоритет).
  2. Всё же, отдавая предпочтение самостоятельной настройке, вы теряете в географической гибкости - быстро менять IP не получится (хотя, при наличии нескольких серверов, клиент легко может между ними переключаться).

Разворачиваем сертификационный центр

Настройка VPN начинается с построения (Public Key Infrastructure) на основе x.509 сертификатов и открытых ключей - это программный комплекс, включающий в себя сам СА со списком отзыва сертификатов и софт для генерации ключей. Выдавать сертификаты можно несколькими способами:

  1. Безопасный метод Создается PKI и сертификационный центр, аналогичный софт ставится на машины клиентов. Чтобы получить сертификат, клиент должен сформировать запрос и закрытый ключ - запрос передается СА - СА подписывает его или отклоняет - подписанный сертификат передается клиенту. Передача происходит вручную, или по защищенным каналам.
  2. Сертификационный центр самостоятельно генерирует закрытый ключ и сертификат, или оные вместе в зашифрованном пакете PKCS12 - пакет передается на машину клиента — клиент может подключаться к VPN.

Мы говорили об этом выше, но повторим - сертификаты и ключи нужны для ограничения круга лиц, имеющих доступ к серверу; передавать закрытые ключи по сети крайне нежелательно (по крайней мере, в незашифрованном виде), открытый ключ распространяется свободно и математически связан с закрытым - он служит для расшифровки данных, зашифрованных закрытым ключом. А сертификаты объединяют в себе функции открытого ключа и подтверждают, что такой-то ключ принадлежит такому-то хосту, действует столько-то, и с этим ключом можно получить доступ к серверу. Проще говоря, x.509 сертификат - это улучшенный открытый ключ из философии ассиметричного шифрования.

Для настройки OpenVPN потребуется пакет openvpn - он лежит в репозиториях большинства Linux-систем.

# apt-get update

# apt-get install openvpn

После установки, по пути “/usr/share/doc/openvpn/examples/” должна появиться директива /easy-rsa/2.0. Если её нет - дополнительно установите пакет easy-rsa:

# apt-get install easy-rsa

И тогда нужная папка появится по пути “/ush/share/easy-rsa”

Настройку СА не стоит производить из под root [в идеале - это вообще должна быть отдельная машина, не подключенная к сети], но так как в нашем случае СА и VPN-сервер - одна и та же машина, то будем работать под root. В противном случае, лучше создать для СА отдельного пользователя без рутовых прав.

# useradd - s /bin/bash -m ca

# passwd ca

Дабы избежать удаления всех конфигов при очередном обновлении, перенесем утилиту easy-rsa в директиву конфигов openvpn:

# sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

# sudo cp -R /usr/share/easy-rsa/ /etc/openvpn

И перейдем в директорию easyrsa:

# cd /etc/openvpn/easy-rsa/2.0

В данной директории лежат скрипты для генерации сертификатов и формирования запросов на сертификаты, примеры конфига openssl, и главное - подробный файл README, объясняющий, как это всё работает. Распакуйте его утилитой gzip:

# gzip -d README.gz

И, желательно, изучите.

Файл vars - своеобразный шаблон, на основании которого заполняются поля сертификатов - его мы и отредактируем в первую очередь. Нас интересуют лишь следующие строки:

# Битовая длина алгоритма шифрования, которым шифруется закрытый ключ. Если вы параноик - измените значение на 2048 - это замедлит взлом, но и скорость VPN-соединения слегка упадет.

export KEY_SIZE=1024

# Срок годности в днях по умолчанию, для корневого сертификата сертификационного центра.

export CA_EXPIRE=3650

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

export KEY_EXPIRE=3650

# Информация о владельце сертификата. Ни на что, особо, не влияет, если вы разворачиваете сеть VPN для себя.

export KEY_COUNTRY="RU" #Код страны владельца

export KEY_PROVINCE="RU" #Код области владельца

export KEY_CITY="Moscow" #Город

export KEY_ORG="cs-companion" #Организация

export KEY_EMAIL=" Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. " #контактный email

export KEY_EMAIL= Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. #контактный email 2

Сохраним, применим изменения и очистим папку.keys скриптом./clean-all:

source ./vars

source ./clean-all

(Важно: если после изменений файл vars не запускается - сделайте его исполняемым: “chmod +x ./vars”)

Шаблон готов - можно создавать корневой сертификат СА, и на его основе создавать сертификаты остальных пользователей. Для генерации корневого сертификата выполним:

# ./build-ca

Во время генерации вам предложат самостоятельно заполнить поля, хотя можно просто жать Enter - тогда они заполнятся на основании шаблона.

Итак, после генерации в папке./keys появилось два ключа:

  • ca.crt - открытый
  • ca.key - закрытый.

Наверняка вам будет интересно, как же выглядит этот сертификат изнутри - как-то так:

Или на человеческом:

Посмотреть содержимое сертификата в виде текста можно средствами openssl, вот такой командой:

# openssl x509 -in [путь/к/сертификату] -noout -text

В сгенерированный нами сертификат входит:

  1. Версия
  2. Уникальный серийный номер
  3. Информация о держателе (организация, имя, контакты).
  4. Сроки начала и конца действия сертификата
  5. Информация о использумых алгоритмах.
  6. Открытый ключ
  7. Цифровая подпись сертификата

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

Немного теории.

Файл ca.key должен лежать только на машине самого сертификационного центра, а вот открытый - напротив, должен передаваться на каждую машину, которая собирается сделать запрос на сертификат и затем получить доступ к VPN-серверу.

Попробуем объяснить, как это работает:

У СА есть свой сертификат и закрытый ключ. С помощью закрытого ключа трафик шифруется, с помощью открытого - расшифровывается - это значит, что у VPN-сервера должен быть:

  1. свой открытый и закрытый ключ
  2. открытый ключ СА
  3. открытые ключи всех клиентов,

У СА должен быть:

  1. свой закрытый и открытый ключ,
  2. открытый ключ сервера и всех клиентов.

А у всех клиентов, которые будут взаимодействовать с сервером:

  1. свои закрытые и открытые ключи
  2. открытый ключ сервера и СА

Но всё это - в идеале, то есть в случае, если сертификаты выдаются по запросу. Мы же используем протокол PKCS12, значительно упрощающий развертывание OpenVPN сети — пакеты с сертификатами мы будем генерировать самостоятельно, а клиенту нужно только прописать путь к нему в конфигах, и IP-адрес сервера.

Сертификационный центр готов, теперь сгенерируем сертификат для самого сервера:

# ./build-key-server [имя-сертификата-сервера]

Во время генерации, вас попросят ввести пароль, которым будем защищен закрытый ключ сервера - запомните его, ведь он вам ещё понадобится.

Помимо ключей, OpenVPN использует дополнительные средства защиты - хэш-суммы и протокол Диффи-Хеллмана. Не будем углублятся в теорию работы второго - просто сгенерируйте одноименный файл командой:

./build-dh

Итак, вернемся в папку./keys, и что мы видим:

  1. dh1024.pem - Файл Диффи-Хеллмана
  2. ca.crt - открытый ключ (сертификат) СА
  3. ca.key - закрытый ключ СА
  4. vpnserver.key - закрытый ключ сервера
  5. vpnserver.crt - сертификат сервера.

Все они, кроме закрытого ключа СА, должны быть перемещены в главную директорию VPN-сервера - /etc/openvpn.

Если вы дошли до этого этапа - значит наш СА работает как часы. Следующим шагом будет настройка самого VPN-сервера и клиентов, а пока подробнее остановимся на том, как генерировать и удалять сертификаты.

Работа с CRL и выдача сертификатов.

Как генерировать сертификаты:

build-key [имя] - сгенерировать пару закрытый/открытый сертификат.

build-key-pass [имя] - аналогично, но сертификат защищен паролем, который спрашивается каждый раз при использовании.

build-key-pkcs12 - сгенерировать сертификаты в виде pkcs12-пакета.

Что же такое этот pkcs12-пакет? Цитируя руководство openssl - “Some would argue that the PKCS#12 standard is one big bug:-)” - и, тем не менее, это наиболее удобный способ распространения сертификатов. Как уже говорилось - это своеобразный пакет, зашифрованный на стороне сервера, и включающий в себя связку сертификатов - открытый СА; закрытый и открытый клиента. Поступая к клиенту, софт OpenVPN посылает с ним запрос на VPN-сервер, а сервер, если такой пакет был сгененерирован подходящим центром сертификации, распознает его и пускает клиента в свою сеть. С p12 пакетами вы получаете дополнительный слой шифрования пакетов и больше нет необходимости пересылать каждый сертификат отдельно.

Сгенерируем такой пакет для нашего клиента:

# ./build-key-pkcs12 lain.iwakura.Vorona

Во время генерации вы должны ввести пароли [пароль закрытого ключа и пароль экспорта], последний из которых будет спрашиваться при каждом подключении, а также заполнить данные сертификата. После этого - можно передавать пакет на машину клиента - отправим пакет lain.iwakura.Vorona.p12 на машину клиента под Arch Linux, через scp.

# scp ./keys/lain.iwakura.Vorona.p12 user@ip:/home/

Позже, при настройке клиента, он нам понадобится.

Как отзывать сертификаты

Выполните “./list-crl” - результатом выполнения будет создание списка отзыва сертификатов - CRL. CRL необходим для того, чтобы администратор СА смог в любой момент запретить какому-либо хосту доступ к серверу со своим сертифкатом.

Отозвать сертификат предельно просто - командой:

./revoke-full [имя]

К примеру, сгенерируем pkcs12 сертификат iwakuralain и тут же отзовем:

./revoke-full iwakuralain

Посмотреть список отозванных сертификатов можно командой:

./list-crl

А самой базой данных отозванных сертификатов является файл crl.pem из папки keys. После отзыва очередного сертификата необходимо скопировать его в папку /etc/openvpn VPN-сервера и перезагрузить, для обновления базы данных:

# /etc/init.d/openvpn restart

Рассмотрев в предыдущих частях теоретические вопросы перейдем к практической реализации. Сегодня мы рассмотрим создание VPN сервера PPTP на платформе Ubuntu Server. Данный материал рассчитан на читателей, имеющих навыки работы с Linux, поэтому мы не будем отвлекаться на вещи описанные нами в других статьях, таких как настройку сети и т.п. Если вы испытываете затруднения - предварительно изучите другие наши материалы.

Практическое знакомство с VPN мы начнем с PPTP, как наиболее простого в реализации. Однако следует помнить о том, что это слабозащищенный протокол и его не следует использовать для доступа к критически важным данным.

Рассмотрим схему, которую мы создали в нашей тестовой лаборатории для практического знакомства с данной технологией:

У нас имеется локальная сеть 10.0.0.0/24 с сервером терминалов 10.0.0.2 и 10.0.0.1, который будет выполнять функции VPN сервера, для VPN мы зарезервировали сеть 10.0.1.0/24. Внешний интерфейс сервера имеет условный выделенный IP адрес X.X.X.X. Наша цель - предоставить удаленным клиентам доступ к терминальному серверу и общим ресурсам на нем.

Настройка сервера PPTP

Установим пакет pptpd реализующий функционал PPTP VPN:

Sudo apt-get install pptpd

Теперь откроем файл /etc/pptpd.conf и зададим основные настройки VPN сервера. Перейдем в самый конец файла, где укажем адрес сервера в VPN сети:

Localip 10.0.1.1

И диапазон адресов для выдачи клиентам:

Remoteip 10.0.1.200-250

Адресов нужно выделить не меньше, чем возможных одновременных соединений, лучше с небольшим запасом, так как их увеличение без перезапуска pptpd невозможно. Также находим и раскомментируем строку:

Bcrelay eth1

Это позволит передавать VPN клиентам широковещательные пакеты внутренней сети.

Также можно использовать опции listen и speed , первая позволяет указать IP адрес локального интерфейса для прослушивания входящих PPTP соединений, второй указать скорость VPN соединений в бит/с. Например разрешим серверу принимать PPTP соединения только с внешнего интерфейса:

Listen X.X.X.X

Более тонкие настройки находятся в файле /etc/ppp/pptpd-options . Настройки по умолчанию вполне соответствуют нашим требованиям, однако кратко рассмотрим некоторые из них, чтобы вы имели представление о их назначении.

Секция #Encryption отвечает за шифрование данных и проверку подлинности. Данные опции запрещают использование устаревших и небезопасных протоколов PAP, CHAP и MS-CHAP:

Refuse-pap
refuse-chap
refuse-mschap

Require-mschap-v2
require-mppe-128

Следующая секция #Network and Routing , здесь следует обратить внимание на опцию ms-dns , которая позволяет использовать DNS сервер во внутренней сети. Это может быть полезно при доменной структуре сети или наличия в ней DNS сервера который содержит имена всех ПК сети, что дает возможность обращаться к компьютерам по их именам, а не только по IP. В нашем случае данная опция бесполезна и закомментирована. Подобным образом можно задать и адрес WINS сервера опцией ms-wins .

Здесь же находится опция proxyarp , включающая, как несложно догадаться из названия, поддержку сервером Proxy ARP.

В секции #Miscellaneous содержится опция lock , которая ограничивает клиента одним подключением.

Ivanov * 123 *
petrov * 456 10.0.1.201

Первая запись позволяет подключаться к серверу пользователю ivanov c паролем 123 и присваивает ему произвольный IP адрес, вторая создает пользователя petrov с паролем 456, которому при подключении будет присваиваться постоянный адрес 10.0.1.201.

Перезапускаем pptpd :

Sudo /etc/init.d/pptpd restart

Важное замечание! Если pptpd не хочет перезапускаться, зависая на старте, а в /var/log/syslog добавляя строку long config file line ignored обязательно добавьте в конец файла /etc/pptpd.conf перенос строки.

Наш сервер готов к работе.

Настройка клиентских ПК

В общем случае достаточно настроить VPN соединение с опциями по умолчанию. Однако мы советуем явно указать тип соединения и отключить лишние протоколы шифрования.

Далее, в зависимости от структуры сети, необходимо указать статические маршруты и основной шлюз. Эти вопросы подробно разбирались в предыдущих частях.

Устанавливаем VPN соединение и пробуем пропинговать какой либо ПК в локальной сети, мы без каких либо затруднений получили доступ к терминальному серверу:

Теперь еще одно важное дополнение. В большинстве случаев доступ к компьютерам локальной сети будет возможен только по IP адресам, т.е. путь \\10.0.0.2 будет работать, а \\SERVER - нет. Это может оказаться неудобным и непривычным для пользователей. Существует несколько способов решения данной проблемы.

Если локальная сеть имеет доменную структуру, достаточно указать DNS сервером для VPN подключения DNS сервер контроллера домена. Воспользуйтесь опцией ms-dns в /etc/ppp/pptpd-options сервера и данные настройки будут получены клиентом автоматически.

Если DNS сервер в локальной сети отсутствует, то можно создать и использовать WINS сервер, информацию о нем также можно автоматически передавать клиентам при помощи опции ms-wins . И наконец, если удаленных клиентов немного, использовать на клиентских ПК файлы hosts (C:\Windows\System32\drivers\etc\hosts), куда следует добавить строки вида.