Назад | Перейти на главную страницу

PPTP: Включить интерфейс ppp0 при загрузке?

tl; dr Могу ли я гарантировать, что интерфейс PPTP ppp0 всегда доступен, чтобы nginx и другие службы могли связываться с его IP-адресом?

У меня есть сервер nginx на Ubuntu 12.04, на котором размещено несколько общедоступных сайтов. Этот блок также действует как PPTP VPN со следующей конфигурацией:

localip 10.76.44.1
remoteip 10.76.44.100-110

Я устанавливаю новый сервис, проксируемый за nginx, и хотел ограничить доступ клиентов к VPN. Я думал, что могу просто сказать серверу, чтобы он слушал localip порт:

server {
    listen 10.76.44.1:80;
    ...
}

Это работало нормально, когда я первоначально тестировал его, но когда я перезапустил службу nginx вне активного PPTP-соединения, интерфейс ppp0 был недоступен, и nginx не смог привязаться к IP-адресу:

nginx: [emerg] bind() to 10.76.44.1:80 failed (99: Cannot assign requested address)
nginx: configuration file /etc/nginx/nginx.conf test failed

В этом конкретном случае я могу использовать nginx deny директиву для ограничения доступа так, как я хочу, но это может не относиться к другим службам, которые я устанавливаю. Есть ли способ запустить этот интерфейс ppp0 при загрузке, чтобы он был доступен для nginx? Нужен ли мне другой обходной путь, например привязка к внутреннему IP-адресу, и добавление правила переадресации для VPN-клиентов?

Помимо комментария и ответа, я опишу еще один способ решения вашей проблемы / вопроса:

Не уверен, какая ОС у вас работает, потому что вы этого не указали, но если это какой-то вкус Linux: разрешите процессам связывать / прослушивать / на «нелокальных» IP-адресах. Для этого:

echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

Если вы не хотите, чтобы это было постоянным, то есть «при перезагрузках», вы должны поместить его «где-нибудь». Для дистрибутивов на основе Debian это будет, например, /etc/sysctl.conf: Внутри поместите строку чтения

net.ipv4.ip_nonlocal_bind = 1

и выполнить sysctl -p или сделай перезагрузку.

Предполагая, что вы используете Linux, вы можете просто сделать свой интерфейс ppp частью конфигурации системы. Так что он будет включен на старте. Видеть : https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-control.html https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_ppp_connection

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

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