Сейчас все чаще и чаще пользователи стараются подключать свои АТС к операторам связи через VPN канал, это чуть более безопасно, чем подключение через публичную сеть, а у некоторых сидящих в бизнес-центрах компаний просто нет выхода, так как местный интернет провайдер блокирует определенные порты, и навязывает свои услуги связи. Из всех возможных вариантов наиболее оптимальным является выбор между PPTP и OpenVPN. Point-To-Point Tunneling Protocol (PPTP) совместим с большинством мобильных устройств и позволяет поднять свой VPN очень быстро. И хотя PPTP менее безопасен, чем OpenVPN, он быстрее и использует меньше ресурсов процессора.
В сегодняшней статье мы расскажем как установить и настроить PPTP клиента, маршруты и Asterisk для подключения к оператору связи через VPN.
Установка PPTP
Добавляем репозиорий EPEL и устанавливаем нужные нам пакеты:
CentOS 6 32-Bit
rpm –Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmyum -y install ppp pptpd pptp-setup pptp
CentOS 6 64-Bit
rpm –Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum -y install ppp pptpd pptp-setup pptp
CentOS 7
rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpmyum -y install ppp pptpd pptp-setup pptp
Перезагружаем PPTP
CentOS 6:service pptpd restart
CentOS 7:systemctl restart pptpd.service
Проверяем, работает ли и принимает соединения:
netstat -alpn | grep pptpd

Настройка PPTP
Теперь создадим новый файл /etc/ppp/peers/pptpoperator и добавим туда следующие строчки, заменяя логин, пароль и IP-адрес-VPN-сервера Вашими значениями:
pty "pptp IP-адрес-VPN-сервера --nolaunchpppd"
name Логин
password Пароль
remotename PPTP
refuse-chap
nodeflate
mtu 1492
nobsdcomp
noauth
persist
nodefaultroute
maxfail 0
unit 0
На VPN-сервере могут поддерживаться различные протоколы аутентификации, вот некоторые из них:
refuse-pap # Незашифрованный пароль PAP
refuse-chap # Протокол проверки пароля CHAP
refuse-mschap # Протокол проверки пароля MS-CHAP
require-mschap-v2 # Протокол проверки пароля MS-CHAP v2
require-mppe-128 # Использоавть MPPE128 шифрование при проверке пароля
Настройки Iptables
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
service iptables save
service iptables restart
service pptpd restart
Настройки firewalld
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --direct --add-rule ipv6 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd -reload
systemctl restart pptpd.service
Теперь мы можем “поднять” туннель с PPTP-сервером. В команде pppd call необходимо использовать имя, которое Вы дали файлу с пирами (peers) в директории /etc/ppp/peers/. В нашем примере мы назвали pptpoperator, так что команда будет следующая :
pppd call pptpoperator
Теперь командой ifconfig проверяем, поднялся наш туннель или нет. Если все сделано правильно, то Вы должны увидеть следующее:
ppp0: flags=4305 mtu 1492
inet 10.81.26.14 netmask 255.255.255.255 destination 109.234.34.68
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 9 bytes 66 (66.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 76 (76.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Если PPTP не поднялся, советуем перезагрузить сервер и попробовать еще раз pppd call pptpoperator
Теперь необходимо настроить маршрутизацию на Вашу приватную сеть через интерфейс ppp0. В нашем примере АТС оператора имеет внутренний IP-адрес 192.168.20.0. Так что добавим маршрут к нему через интерфейс ppp0 :
ip route add 192.168.20.0 dev ppp0
Теперь переходим к настройкам Asterisk. В зависимости от типа подключения (с привязкой по ip адресу, или с использованием схемы регистрации логином паролем), конфигурация транков будет отличаться:
nano /etc/asterisk/sip.conf
С регистрацией:
[general]
register => login:pass@192.168.20.52:5060/Номер_телефона_если_есть
[Operator]
type=friend
host=192.168.20.52
defaultuser=*******
secret=******
insecure=port,invite
canreinvite=no
nat=force_rport,comedia
qualify=no
context=incoming_calls
dtmfmode=rfc2833
disallow=all
allow=alaw,ulaw,g729
Без регистрации:
[Operator]
type=friend
host=192.168.20.52
insecure=port, invite
disallow=all
allow=g729
canreinvite=no
context=from-trunk
dtmfmode=rfc2833
qualify=no
Теперь делаем sip reload в консоли Asterisk и проверяем регистрацию и прохождение вызовов, все должно работать.
Все настройки PPTP, сделанные выше после перезагрузки сервера, работать не будут, пока вы заново не пропишите маршрут и не сделаете pppd call pptpoperator. Для того, чтобы сделать маршрут постоянным и PPTP туннель поднимался автоматически, сделаем следующие настройки.
Создаем файл /etc/sysconfig/network-scripts/ifcfg-pptp со следующим содержанием:
DEVICE=ppp0
TYPE=Modem
ONBOOT=yes
USERCTL=yes
PEERDNS=no
PROVIDER=pptpoperator
PERSIST=yes
DEMAND=no
DEFROUTE=no
Для маршрута создаем файл /etc/sysconfig/network-scripts/route-pptp со следующим содержанием:
192.168.20.0/25 via 0.0.0.0 dev ppp0
Поднимаем сетевой интерфейс
ifup pptpoperator
Теперь даже после перезагрузки сервера маршруты ppp0 останутся, и PPTP туннель поднимется автоматически.
На этом наша настройка закончена. Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.