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, чтобы он просто включал интерфейс перед запуском и отключал его при остановке службы.