Skip to main content

Особенности прослушивания на конкретных IP-адресах

Если кеширующий DNS-сервер находится на другой машине, то допускается указывать в ключе listen секции [proxy] IP-адрес 0.0.0.0. В этом случае, isp-go-dnsproxy будет принимать запросы на всех сетевых интерфейсах, в том числе на еще не существовавших в момент его запуска. Такой подход не работает, если кеширующий DNS-сервер установлен локально (и прослушивает адрес 127.0.0.1). В этом случае следует указывать конкретный IP-адрес одного из сетевых интерфейсов.

Могут также существовать соображения, заставляющие поместить конкретный IP-адрес в директиву listen в настройках Nginx.

В случае, если в одной из этих директив listen прописан конкретный IP-адрес, ничто в системе не гарантирует, что сетевой интерфейс с этим адресом будет существовать в момент запуска демонов ISP Go или Nginx. Он может появиться на несколько миллисекунд позже. Поэтому запуск этих демонов будет, если не принять дополнительных мер, происходить ненадежно. «Политика партии» freedesktop.org утверждает, что прописывать зависимость от «полностью настроенной сети» архитектурно неправильно, и что вместо этого следует делать так, чтобы сетевые приложения корректно запускались, даже если IP-адрес, на котором им предстоит слушать, еще не существует в системе.

Для того, чтобы разрешить всем сетевым приложениям слушать на еще не существующих адресах, достаточно выполнить следующие команды:

echo "net.ipv4.ip_nonlocal_bind = 1" > /etc/sysctl.d/99-nonlocal-bind.conf
sysctl -p /etc/sysctl.d/99-nonlocal-bind.conf

К сожалению, эта настройка является общесистемной, и может сломать другие программные продукты.