Укороченная версия:
В чем разница между контекстом сервера и разделом виртуального хоста в файле конфигурации proftpd? В смысле, что я могу сделать с первым, я не могу сделать с последним.
Например, я не могу поместить директивы, такие как UseIPv6 или MaxInstances, в виртуальный хост или глобальный раздел, но размещение их в контексте сервера работает просто отлично.
Каково будет правильное использование этих разделов для настройки, упомянутой ниже?
Я думал, что общий процесс был следующим: всякий раз, когда клиент подключается к серверу, сервер проверяет, существует ли виртуальный хост, соответствующий адресу, к которому подключен клиент. Если нет, то выбирается раздел контекста сервера (за исключением того, что для предотвращения этого используется директива DefaultServer). Поэтому я подумал, что контекстный раздел сервера и раздел виртуального хоста одинаково "мощный". Но это не может иметь место, поскольку есть директивы, которые работают только в одном из разделов.
Длинная версия (дополнительная информация):
По сути, все, что я хочу сделать, - это запустить сервер proftp на локальном компьютере дома и сделать этот сервер доступным как из Интернета, так и из моей локальной сети. И это работает. Я скомпилировал proftpd из исходного кода (причина ниже), установил и настроил его, и, похоже, он работает так, как должен. Мне не нужна помощь, чтобы proftpd работал правильно.
Я не мог заставить сервер работать, просто прочитав документацию proftpd, и мне пришлось продолжать возиться с файлом конфигурации, пока все не заработало. Так что есть еще кое-что об использовании виртуальных хостов, о глобальных и серверных контекстных разделах, которые я не понимаю правильно, и именно поэтому я придумал вопросы выше.
Я прочитал о настройке proftpd за маршрутизатором и о значении виртуальных хостов, глобальных и серверных контекстных разделов:
http://www.proftpd.org/docs/howto/NAT.html
http://www.proftpd.org/docs/howto/Vhost.html
Я следовал нескольким гидам и искал на форуме похожие вопросы. Сервер работает, я просто не очень понимаю, почему сейчас, а почему нет.
Это структура моего текущего (рабочего) proftpd.conf:
<Global>
User ...
Group ...
RequireValidShell ...
DefaultRoot ...
...
<IfModule mod_tls.c>
TLSEngine ...
TLSProtocol TLSv1.2
...
</IfModule>
</Global>
#server context managing the config for access over the internet
ServerName "external"
Port 21
#can't be used inside a virtualhost section
UseIPv6 off
...
#need to masquerade ip for external address
MasqueradeAddress myurl.com
#needed for passive ftp mode
PassivePorts 60000 65535
#virtualhost managing the config for lan access
<VirtualHost 192.168.178.54>
ServerName "internal"
Port 21
PassivePorts 60000 65535
</VirtualHost>
Сначала я подумал, что нужно просто создать два раздела виртуального хоста, один для локальной сети и один для внешнего доступа, и отключить раздел контекста сервера, установив порт 0. Но есть и директивы, которые я не могу использовать внутри разделов виртуального хоста. Так что я совершенно не уверен, использую ли я 3 возможных раздела, как я должен. Нужно ли использовать раздел контекста сервера, чтобы иметь какую-то конфигурацию по умолчанию? Это можно сделать с помощью директивы DefaultServer в соответствии с документацией.
uname -a: Linux HOSTNAME 3.16.0-4-amd64 # 1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
proftpd -v: ProFTPD версии 1.3.5 Двоичный пакет proftpd, включенный в репозитории debian, не поддерживает TLS 1.2, и я не хочу использовать FTP с версией TLS ниже этой или даже SSL. Так что я сам скомпилировал.
Это довольно длинный текст. Я попытался сократить его, быть точным, избежать ненужного, но предоставить достаточно информации. Если есть что-то, что я мог бы улучшить, или если мой вопрос скорее относится к unix и linux stackexchange, просто дайте мне знать. Я выбрал superuser вместо serverfault, чтобы задать этот вопрос, потому что речь идет о серверной среде дома.
Спасибо за ваше время и помощь.
январь