Иногда внезапно приходит время поговорить о королях и о капусте о временных (динамически назначаемых) портах.
TCP/IP соединение состоит из двух конечных точек, и каждая конечная точка состоит из IP-адреса и номер порта. Поэтому, когда клиент подключается к серверу, установленное соединение может рассматриваться как набор из 4 значений (IP сервера, порт сервера, IP клиента, порт клиента). Обычно три значения из четырех уже известны — клиентская машина использует свой собственный IP-адрес и при подключении к удаленному сервису, IP-адрес сервера и номер порта службы должны быть уже известны.
Не совсем очевидно то, что, когда соединение установлено, оно использует порт и на стороне клиента. Если клиентская программа не запрашивает явно определенный номер порта, то используется временный (динамически назначаемый системой) номер порта. Временные порты выдаются IP-стеком машины, и назначаются из определенного диапазона портов, выделенного для этой цели. Когда соединение разрывается, временный порт становится доступен для повторного использования, хотя большинство реализаций IP-стека не будет повторно использовать этот номер порта, пока все доступные временные порты из диапазона не будут использованы. Так что, если клиентская программа переподключится, ей будет назначен другой номер порта для её стороны нового соединения. Аналогично, для UDP/IP, когда клиент посылает датаграмму с не заданного номер порта, номер порта назначается автоматически системой, так что сервер на другом конце соединения может ответить отправителю.
Некоторые программы (например, Oracle) могут требовать установить определённый диапазон временных портов. Здесь описано как сделать это на разных операционных системах и не потерять эти настройки при перезагрузке.
AIX использует команду no, чтобы установить параметры сети. AIX использует два разных диапазона временных портов, по одному для TCP и UDP, и оба имеют значения по-умолчанию от 32768 до 65535:
Изменить диапазоны по-умолчанию можно с помощью команды no. Вот так можно установить диапазоны временных портов для TCP и UDP c 49152 до 65535:
Установка этих параметров должна быть сделана каждый раз при запуске системы. Один из способов сделать это заключается в редактировании файла /etc/rc.tcpip и вставке команд no перед тем, как скрипт начинает запускать сетевые демоны.
Диапазон временных портов по-умолчанию от 49152 до 65535, как определено в файле /usr/include/netinet/in.h:
Похоже, не существует run-time настройки ядра для этого (то есть не доступны соответствующие sysctl параметры), так что для изменения диапазона нужно будет перекомпилировать ядро после изменения этих определений.
FreeBSD использует три диапазона: обычный диапазон временных портов, альтернативный «высокий» диапазон временных портов, альтернативный «низкий» зарезервированный диапазон портов для программ, использующих функцию rresvport(). Эти диапазоны кратко описаны в системном заголовочном файле /usr/include/netinet/in.h:
Запуск sysctl показывает значения по-умолчанию для этих диапазонов:
Чтобы изменить эти значения, отредактируйте файл /etc/sysctl.conf и добавьте (или измените существующие) строки, такие как:
Это заставит обычный диапазон временных портов использовать порты от 32768 до 49151, альтернативный диапазон от 49152 до 65535, и оставит зарезервированный диапазон портов без изменений. Система должна быть перезагружена, чтобы изменения в /etc/sysctl.conf вступили в силу, хотя можно вызвать команду sysctl вручную, чтобы внести изменения сразу.
HP-UX использует команду ndd для изменения настраиваемых параметров IP-стека. Временные порты на HP-UX могут быть настроены индивидуально для TCP и UDP, поэтому на самом деле существует два отдельных диапазона временных портов. HP-UX также предоставляет средства для изменения привилегированного диапазона портов (эти порты могут использовать только процессы, запущенные с привилегиями суперпользователя).
Ниже показано, как запросить существующие значения для временных портов TCP, а также изменить их диапазон:
Заметьте, что если вы измените диапазон портов, вам придётся делать это каждый раз при загрузке системы. Предпочтительный способ сделать это для HP-UX заключается в редактировании файла /etc/rc.config.d/nddconf и добавлении записей. Например, вы можете добавить эти строки в ваш файл /etc/rc.config.d/nddconf:
Если вы сделаете это, убедитесь, что записи нумеруются соответственно. Например, если 4 записи уже присутствуют, то вы увидите их пронумерованными от 0 до 3. В этом случае записи которые вы добавляете должны быть пронумерованы после существующих записей.
К сожалению, IRIX, кажется, не позволяет настроить диапазон временных портов и он статически установлен от 1024 до 65535. Вот выдержка из файла /usr/include/netinet/in.h:
Также в команде systune не указаны соответствующие параметры, хотя другие параметры TCP и IP могут быть изменены.
Linux позволяет просмотреть и изменить диапазон временных портов просто используя файл /proc/sys/net/ipv4/ip_local_port_range или параметр ядра net.ipv4.ip_local_port_range:
Чтобы поменять границы диапазона, выполните от root:
или
Заметьте, что это нужно будет делать каждый раз при загрузке системы. Так что добавьте одну из команд выше в стартовый системный скрипт вроде /etc/rc.local или (более правильный способ) в файл /etc/sysctl.conf:
OpenBSD использует команду sysctl чтобы настраивать параметры ядра. У временных портов в OpenBSD на самом деле два отдельных диапазона, обычный диапазон и альтернативный «высокий» диапазон. Ниже приведен пример, показывающий, как использовать sysctl, чтобы просмотреть текущую конфигурацию этих двух диапазонов:
Чтобы изменить границы диапазонов, отредактируйте файл /etc/sysctl.conf и добавьте (или измените существующие) строки, такие как:
Эти настройки устанавливают границы обычного диапазона временных портов от 32768 до 49151, а альтернативного диапазона от 49152 до 65535. Система должна быть перезагружена чтобы изменения в /etc/sysctl.conf вступили в силу, хотя вы можете использовать команду sysctl , чтобы применить изменения сразу.
Solaris использует команду ndd для изменения настраиваемых параметров IP-стека. Временные порты в Solaris могут быть настроены отдельно для TCP и UDP, поэтому на самом деле существует два отдельных диапазона временных портов. Solaris также предоставляет средства для изменения привилегированного диапазона портов (эти порты могут использовать только процессы, запущенные с привилегиями суперпользователя).
Ниже показано, как запросить существующие значения для временных портов TCP, а также изменить их диапазон от 49152 до 61000:
Заметьте, что если вы хотите изменить диапазон значений, вы должны делать это каждый раз при загрузке системы. Вы можете добавить эти команды в какой-нибудь системный стартовый скрипт типа /etc/rc3.d/S99local.
Tru64 Unix от Compaq (бывший Digital Unix и Digital OSF/1) использует традиционный для BSD-систем диапазон от 1024 до 4999 как диапазон временных портов. Следующий пример иллюстрирует использование команды sysconfig для запроса текущего диапазона:
Следующий пример показывает как с помощью sysconfig установить предпочтительный диапазон временных портов:
Команда sysconfig применяет изменения только для текущего цикла загрузки. Для того, чтобы изменения автоматически применялись каждый раз при загрузке системы, вы можете либо создать системный стартовый скрипт для запуска команды sysconfig, либо используйте команду sysconfigdb для настройки файла /etc/sysconfigtab. Вот пример:
Файл /tmp/inet.stanza который мы используем должен выглядеть следующим образом. Убедитесь, что этом файле на первой строке стоит только слово inet: а перед следующими двумя строками стоит один символ табуляции (не используйте пробелы).
Всё, что касается Windows — это сами. Для установки диапазона временных портов почитайте следующие статьи из базы знаний Microsoft (на английском):
- Windows Vista и Windows Server 2008 — http://support.microsoft.com/kb/929851/e
n-us, локальная копия вот. - Windows Server 2003, Windows XP Professional и Microsoft Windows 2000 — http://support.microsoft.com/kb/812873/e
n-us, локальная копия вот.
Вообще говоря, всё что выше — это вольный перевод вот этой статьи (локальная копия вот) от аффтараф сервера NcFTPd. За что им ссылка, всяческий респект и большая уважуха.
Пыщь! Оригинал поста размещен в блоге Ад, ненависть и локалхост. Комментить? Набигай. Подкат? ОИНЧ.