Настройка vpn pptp centos

Обновлено: 04.07.2024

В контексте последних событий, типа запрета ВК, ОК и Яндекса в/на Украине, думаю, всё большее количество людей захотят использовать VPN. Можно купить у какого-нибудь международного провайдера готовый доступ, но также можно и настроить VPN на своём VPS, ведь цены на виртуальные серверы в России стартуют от 150 руб. в месяц. О том, как по-быстрому настроить VPN на CentOS я далее и расскажу. Статья будет для новичков, поэтому всё задумано максимально просто, включая сам PPTP-протокол (к которому могут быть вопросы в плане безопасности, но вряд ли могут быть вопросы в плане простоты настройки подключения на клиенте под Windows).

Ставим необходимые пакеты:

Строго говоря, по-настоящему необходим вам будет только pptpd , остальные программы далее для удобства используются (т.е. если вы новичок, то вам перечисленные пакеты помогут узнать сетевой интерфейс и IP-адрес сервера).

Узнаём свой внешний IP-адрес:

Узнаём название сетевого интерфейса в системе, к которому привязан этот адрес:

Для простоты будем считать, что адрес у нас вышел 185.125.1.2, а интерфейс eth0

Редактируем файл /etc/pptpd.conf , добавляем в его конец:

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

Далее редактируем /etc/ppp/chap-secrets , добавляем туда строки с аккаунтами пользователей (каждый аккаунт на отдельной строке). Строка через пробелы или табуляцию содержит следующие данные:

  • Имя пользователя
  • Имя сервера (в нашем случае pptpd)
  • Пароль пользователя
  • Набор IP-адресов, с которых клиенту разрешено подключаться (в нашем случае * разрешает подключаться с любого IP)

В общем, ваш файл может выглядеть примерно так:

Теперь редактируем файл /etc/ppp/options , там указываем:

В примере на первых строках используются DNS-серверы Яндекса, а ниже решетками закомментированы DNS-серверы Google. Какие использовать вам — решайте сами.

Проверяем командой netstat -alpn | grep :1723 , что сервер запустился и ждёт соединений. Если всё идёт хорошо, то вы должны увидеть примерно такой вывода:

Редактируем файл /etc/sysctl.conf , устанавливаем там:

И запускаем sysctl -p для применения изменений.

Добавляем правило для NAT в фаервол (здесь мы будем использовать имя сетевого интерфейса, которое узнавали в начале статьи):

Кстати, именно при таком перезапуске (с использованием restart-kill ) будут отключены все текущие клиенты.

Добавляем его в автозапуск:


Теперь, чтобы подключиться к VPN-серверу в Windows, надо создать новое подключение и выбрать:

Далее указать адрес сервера (который в нашем примере 185.125.1.2 ), логин и пароль пользователя (мы их прописывали /etc/ppp/chap-secrets ). Пока подключение в Windows будет запущено — весь трафик будет идти через него (включая, разумеется, трафик браузера).

Пока только один комментарий на запись «Настройка VPN-сервера с PPTP-подключением на CentOS 6»:


Комментарии к этой записи в RSS.

В заголовке данной статьи почётное место занимает словосочетание ". для ленивых". Спешу заверить читателя в том, что эти слова не носят оскорбительный характер.
Напротив, если Вы открыли и читаете данную статью, то лень - не Ваша подруга )

Как многие мои предыдущие статьи, желание написать данную статью родилось в моей голове спонтанно. Как говорили до нас и будут говорить после нас : "Желания должны исполняться" )
Сегодня я напишу о том, как надо поднимать сервер PPTP VPN под управлением CentOS 7.
"Этот баян" многократно описан и переписан на страницах рунета " - наверняка подумает в этом месте читатель и окажется прав )
Почему-то мне захотелось преподнести этот "баян" в своём представлении.

Для себя процесс правки конфигов Linux на удалённых серверах я облегчила установкой на локальном компьютере программы Bitvise SSH Client. Программа позволяет редактировать файлы, находящиеся на удалённой машине, в редакторе Notepad++. При этом не возникает никаких проблем с кодировками, нет необходимости многократно стучать по клавиатуре в консольном текстовом редакторе Linux, имеется возможность копи-пастить информацию кнопками мыши и сохранять её на удалённом компе.
При всех своих достоинствах, программа Bitvise SSH Client не спасет от ошибок начинающих линуксоидов: всегда что-то пойдёт "не так". Процесс поиска ошибки занимает порой довольно продолжительный период времени. К примеру, вчера на полу-часовую установку PPTP VPN под управлением CentOS 7 я потратила весь день (
Несмотря на то, что упомянутый процесс многократно описан системными администраторами в своих блогах, по-настоящему стоящих статей не так уж и много. К тому-же в процессе установки VPN-сервера возникают вопросы, ответы на которые получить не у кого. Учитывая тот факт, что данный сайт носит статус "форума", отныне и навсегда каждый желающий сможет получить ответ ЗДЕСЬ !


Прежде, чем начать установку PPTP VPN-сервера на CentOS 7, необходимо установить репозиторий и установить сетевые утилиты.

Указанная выше установка файлового менеджера Midnight Commander никак не связана с процессом установки сервера PPTP VPN и не является обязательной.

Далее необходимо отключить Selinux.
Система принудительного контроля Selinux отключается правкой конфигурационного файла /etc/sysconfig/selinux

В этой статье я рассмотрю на практике полный алгоритм настройки VPN сервера на примере CentOS 7.6. Мы одновременно включим и L2TP и PPTP сервер.

Для работы VPN в Linux необходимо настроить 3 слоя: IPsec, L2TP и PPP. Причем, PPP будет общий для L2TP и PPTP серверов. Настройка L2TP сложнее, чем PPTP. В ней:

  1. IPsec обеспечивает конфиденциальность сетевого соединения и авторизации клиента (системы)
  2. С L2TP туннель настроен так, что VPN трафик прозрачно проходит через IPsec
  3. PPP (протокол точка-точка) контролирует авторизацию пользователей

Настройка VPN PPTP

Перед началом установки непосредственно сервера я рекомендую обновить пакеты и установить Midnight Commander (mc) и VestaCP для удобства. Вместе с VestaCP поставится большая часть пакетов, поэтому часть команд ниже будут излишними, не пугайтесь. В mc удобнее редактировать конфиг файлы.

yum install -y epel-release yum install -y mc yum install -y net-tools

Далее необходимо отключить Selinux.
Система принудительного контроля Selinux отключается правкой конфигурационного файла /etc/sysconfig/selinux.

или заменяем значение командой sed:

sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config

После перезагрузки проверьте статус SELinux командой « sestatus », Вы должны увидеть следующий вывод:

Переходим к установке PPTP VPN сервера и добавлении его в автозагрузку:

yum install -y ppp pptp pptpd pptp-setup chkconfig pptpd on

Файл /etc/pptpd.conf

cp /etc/pptpd.conf /etc/pptpd.conf.bak

cat >/etc/pptpd.conf<<EOF
option /etc/ppp/options.pptpd
logwtmp
localip 172.16.0.1
remoteip 172.16.0.10-254
EOF

Если на вашей машине несколько внешних IP адресов, то вы можете указать конкретный IP, по которому будет доступно подключение к VPN серверу. В конце файла добавьте:

ms-dns 8.8.8.8 ms-dns 8.8.4.4

Также добавляем метод mschap2: require-mschap-v2

cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak

cat >/etc/ppp/options.pptpd<<EOF
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 8.8.4.4
EOF

cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak

Устанавливаем права на файл паролей, чтобы только root его мог читать:

chmod 600 /etc/ppp/chap-secrets

cp /etc/sysctl.conf /etc/sysctl.conf.bak

cat >/etc/sysctl.conf<<EOF
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.ip_forward = 1
EOF

На этом установка и настройка VPN PPTP сервера закончена.

Удаляем firewalld (если не удален или не отключен):

systemctl stop firewalld systemctl disable firewalld

и вместо него ставим IPTABLES:

yum install iptables-services iptables

Включим автозапуск iptables:

systemctl enable iptables chmod +x /etc/rc.d/rc.local

Cохраняем и перезапускаем всё: файерволл и сервер PPTP VPN.

service iptables save service iptables restart systemctl start pptpd

Обратите внимание, если при редактировании конфигурационного файла iptables не сохраняются настройки, а после перезагрузки файл принимает своё первоначальное значение, то для того, чтобы после редактирования файла изменения вступили в силу, необходимо перед редактированием отключить файервол iptables:

systemctl stop iptables

Затем отредактировать файл /etc/sysconfig/iptables, сохранить изменения

service iptables save

И, наконец, запустить сервиc

systemctl start iptables

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE iptables -I INPUT -s 172.16.0.0/24 -i ppp0 -j ACCEPT iptables --append FORWARD --in-interface eth0 -j ACCEPT

Если вы решили не отключать firewalld и не использовать iptables, то вам потребуются следующие команды для настройки файрвола:

firewall-cmd --permanent --add-service=pptpd firewall-cmd --permanent --add-port=1723/tcp firewall-cmd --permanent --add-port=22/tcp firewall-cmd --permanent --add-service=ipsec firewall-cmd --permanent --add-service=l2tpd firewall-cmd --permanent --add-port=1701/udp firewall-cmd --permanent --add-port=4500/udp firewall-cmd --permanent --add-masquerade firewall-cmd --reload

ps ax | grep pptpd

Проверяем, слушается ли наш порт:

netstat -an | grep -i listen

Дополнительная команда для проверки статуса pptpd:

systemctl status pptpd

Настройка L2TP VPN

Второй уровень, протокол туннелирования второго уровня (L2TP), настраивается намного проще, чем IPsec, поэтому начнем с него. L2TP абсолютно небезопасен и не должен быть доступен вне соединения IPsec. При использовании iptables, примените следующие правила, чтобы заблокировать все соединения L2TP вне ipsec:

iptables -t filter -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT iptables -t filter -A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable iptables -t filter -A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT iptables -t filter -A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable

yum install -y xl2tpd libreswan lsof

Бэкапим дефолтный конфиг:

cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.orig

Правим /etc/xl2tpd/xl2tpd.conf, указывая свои IP. В отличие от других серверов L2TP, xl2tpd может поддерживать пул IP-адресов без серверов DHCP или RADIUS.

В секцию [global] добавим (это обязательно для CentOS 6, не в 7.6 мне не потребовалось):

[global] ipsec saref = yes force userspace = yes [lns default] ip range = 172.21.118.2-172.21.118.254 local ip = 172.21.118.1 require authentication = yes name = LinuxVPN pppoptfile = /etc/ppp/options.xl2tpd

Для использования сервера RADIUS или DHCP, оставьте отключенными опции ip range и local ip . Если соединение нестабильно, попробуйте добавить length bit = yes в раздел lns default . Чтобы не использовать PPP аутентификацию, замените require authentication = yes на refuse authentication = yes .

Создаем новый файл options.xl2tpd опций с таким содержимым:

ipcp-accept-local ipcp-accept-remote ms-dns 8.8.8.8 ms-dns 8.8.4.4 auth idle 1800 mtu 1410 mru 1410 nodefaultroute debug proxyarp connect-delay 5000 name xl2tpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 persist logfile /var/log/xl2tpd.log

Настройка IPsec

Есть несколько вариантов и пакетов для настройки IPsec: ipsec-tools, LibreSwan (OpenSwan) и strongSwan. ipsec-tools (racoon) наименее функционален, но для тех, кто пришёл из *BSD, он может быть более близок. Однако, в отличие от *BSD, Linux не использует отдельный интерфейс для IPsec. strongSwan – это ответвление от FreeS/WAN. LibreSwan – ответвление от Openswan (который сам является ответвлением от FreeS/WAN) с сохранением его оригинальных разработчиков. Мы будем использовать именно LibreSwan, который мы уже ранее установили. Обход NAT установлен по умолчанию в файле конфигурации LibreSwan, таким образом никаких особых этапов настройки не требуется.

Желательно иметь каждую настройку VPN в своём собственном файле, что может быть сделано раскомментированием последней строки в /etc/ipsec.conf:

Основные конфигурационные файлы для LibreSwan это:

  • /etc/ipsec.conf – определяет параметры IPSEC-соединений и параметры подключений в целом;
  • /etc/ipsec.secrets – ключи и пароли для шифрования

Файл /etc/ipsec.conf разбит на разделы:

  • config setup – глобальные параметры и опции
  • conn %default – параметры ipsec-соединений по-умолчанию. Если в отдельных параметрах соединений не указан параметр, то используются параметры отсюда.

Например: conn SomeTunnel – раздел с параметрами соединения SomeTunnel

Файл /etc/ipsec.secrets содержит неограниченное количество типов ключей (паролей).

Основные параметры команды ipsec, которая управляет подключениями LibreSwan :

  • start|restart|stop;
  • ipsec status|statusall — для просмотра состояния IPSEC-соединений;
  • up|down|route|unroute — для управления IPSEC-соединений.

Логи хранятся в /var/log/auth.log и /var/log/daemon.log.

Создаем файл настроек с таким содержимым:

conn L2TP-PSK-NAT rightsubnet=0.0.0.0/0 dpddelay=10 dpdtimeout=20 dpdaction=clear forceencaps=yes also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=1.1.1.1 leftprotoport=17/1701 right=%any rightprotoport=17/%any

Ну и так как мы задали тип авторизации с помощью PSK , то давайте запишем секретное слово в файл ipsec . secrets .

Ключ может быть задан строкой в кавычках или шестнадцатеричным числом. В следующем примере PUT_VPN_SERVER_IP должен быть заменён на IP-адрес сервера. Можно использовать доменное имя, но оно не рекомендовано разработчиками LibreSwan. Опция %any позволяет любым клиентам использовать этот PSK. Также можно IP не указывать как в нашей конфигурации выше.

Это простая (относительно) и на 100% рабочая инструкция по настройке PPTP на CentOS 7. Проще не бывает, PPTP поддерживается большинством софта, не надо ставить никаких программ-клиентов, работает "из коробки". Уточню, что это конфиг, заточенный для учреждения локальной сети - чтобы подсоединившиеся компьютеры нормально видели друг друга, как в локалке. Но в принципе, и для целей выхода в интернет сгодится (неясно только, зачем; можно пользовать прекрасный TOR).

Итак, у вас есть установленная CentOS 7. Обновим всю систему (это никогда не помешает).

Устанавливаем net-tools (из него нужен ifconfig).

Устанавливаем сервер pptpd.

Возможно, пакет pptpd.x86_64 у вас не найдётся. Не проблема, подключаем репозиторий (после подключения, разумеется, вновь пробуем установить сервер pptpd).

Правим файл /etc/sysctl.conf.

Правим файл /etc/pptpd.conf.

Проверяем чтобы в /etc/pptpd.conf была строка.

Лирическое отступление: тут мои рекомендации расходятся с 99% инструкций, потому что под VPN-локалку лучше выделить диапазон 172.16.0.х (или любой подобный из рекомендованных). В других инструкциях настраивают на 10.0.0.х, и вот тут нас поджидает множество сюрпризов. Например, провайдер YOTA сам использует адресное пространство 10.0.0.х для своих модемов, поэтому - гарантированно испытаем боль. 172.16.0.х в теории ни с кем конфликтовать не должен.

Правим файл /etc/ppp/options.pptpd.

Добавляем пользователей с паролями в файл /etc/ppp/chap-secrets.

user1 pptpd user1password 172.16.0.2
user2 pptpd user2password 172.16.0.3

Между значениями лучше ставить один символ TAB (табуляция). Желательно не заходить под одним пользователем с двух и более компьютеров. Вместо 172.16.0.2 (и т.д.) можно ставить звёздочку - тогда пользователю будет выдан динамический IP из подсети, указанной выше (172.16.0.100-200). Я полагаю, лучше всем настроить статику - для тех же Windows, она стабильнее работает.

Обновляем параметры ядра.

Правим файл /etc/ppp/ip-up - перед последней строчкой вставить

Останавливаем и запрещаем firewalld (если при удалении показывает ошибку - у вас его просто нет; в некоторых минимальных конфигах он не включен).

Ставим вместо него iptables.

Разрешаем старт iptables и pptpd при старте сервера.

Нужно знать, как у вас называется внешний сетевой интерфейс. В 99% случаев это eth0, но могут быть варианты. Чтобы удостовериться, смотрим папку /etc/sysconfig/network-scripts; в случае с eth0 там будет файл ifcfg-eth0, если нет - название интерфейса будет после ifcfg-.

Теперь правим конфиг iptables /etc/sysconfig/iptables. Если интерфейс eth0 - просто копируем отсюда текст. Если интерфейс называется по-другому - заменить везде "eth0" на его название.

Обращаю внимание на строку -A FORWARD -i ppp+ -o ppp+ -j ACCEPT - это очередная фича "от меня"; в большинстве инструкций её нет, и компьютеры в "локалке" не будут видеть друг друга (такой VPN нам не нужен).

Перезапускаем iptables и сервер.

Какие могут быть подводные камни?

Ваш провайдер (особенно мобильный) может не пропускать протокол GRE, необходимый для работы PPTP. Это встречается сплошь и рядом (та же YOTA, например). В логах сервера при этом можно видеть строчки LCP: timeout sending Config-Requests. Некоторые роутеры также не дружат с GRE (впрочем, в основном самые затрапезные; чаще всего проблема всё-таки в прове). Это "пичальбеда", и не всегда её можно бескровно решить.

Как посмотреть список подключенных пользователей?

от автора статьи ;)

©2019, Анатолий Савенков
опубликовано: 03.05.2019

Читайте также: