LINUX.ORG.RU

Сообщения vovkalenka

 

pptpd: не разрывает соединение после потери связи с клиентом, клиент не может повторно подключиться

Всем добрый день! Пытаемся решить такую задачу: в чистом поле на электрическом столбе повесить роутеры с прошивкой OpenWRT, к каждому подключены IP-камеры и 4G-модемы. Роутеры должны подключаться к серверу по PPTP, чтобы камеры было видно. Заменить PPTP на OpenVPN нельзя из-за политики владельцев сервера.

Что не получается: На сервере CentOS 6.3, установлен pptpd,настройки такие:

options.pptpd

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
debug
nobsdcomp
novj
novjccomp
nologfd

Для клиентов в chap-secrets прописаны постоянные ip-адреса, поскольку по PPTP подключаются роутеры с видеокамерами, которые хочется видеть по конкретным адресам. При подключении клиентов для каждого создаётся сетевой интерфейс ppp0, ppp1, ppp2 и т.д. с этим ip-адресом. Если клиент разрывает соединение как положено - то проблем с повторным подключением нет. Созданный интерфейс моментально исчезает из ifconfig, как только нажимаем кнопку «отключить».

А вот если происходит обрыв связи - то повторно подключиться клиент уже не может. Отбивается с ошибкой 619. На сервере в это время такие логи:

GRE: read(fd=6,buffer=611860,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Apr  5 13:09:38 omgtu pptpd[1917]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Кроме того, на сервере в ifconfig продолжает висеть интерфейс ppp0 (или ppp1, ppp2 и т.д.), соответствующий данному клиенту. Как будто клиент не отключался. И висит он сколько угодно долго - наверное, несколько часов. Наверное, можно дописать параметр lock в options.pptpd, который разрешает несколько подключений под одним аккаунтом. Но это ведь не выход: постоянный адрес клиента всё равно занят поднятым интерфейсом.

Как сделать, чтобы pptpd понимал, что клиент отвалился, и затирал у себя все следы его подключения?

Яндекс предлагает в настройки добавить такие директивы в options.pptpd:

lcp-echo-interval 30 # посылать эхо-пакеты каждые 30 секунд
lcp-echo-failure 2 # если ответа на два эхо-пакета нет, разрывать соединение
Но после пробы (ничего не изменилось) и внимательного чтения выяснилось, что эти директивы наоборот не для сервера, а для клиента - это он должен слать эхо-запросы серверу, и отключаться, если нет ответа. По крайней мере, так утверждают более авторитетные источники. С клиентами, кстати, проблем нет: после обрыва они сразу начинают попытки переподключения к серверу.

Подскажите пожалуйста, как заставить pptpd понимать, что клиента не видно.

 , ,

vovkalenka
()

RSS подписка на новые темы