Настройка vpn pptp centos
В контексте последних событий, типа запрета ВК, ОК и Яндекса в/на Украине, думаю, всё большее количество людей захотят использовать 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. В ней:
- IPsec обеспечивает конфиденциальность сетевого соединения и авторизации клиента (системы)
- С L2TP туннель настроен так, что VPN трафик прозрачно проходит через IPsec
- 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<<EOFoption /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<<EOFname 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<<EOFnet.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
Читайте также: