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

(Linux) Могут ли несколько процессов связываться с одним и тем же портом TCP для каждого использования?

В рамках пилотного проекта я пытаюсь настроить среду тонкого клиента для группы разработчиков, использующих NoMachine. Каждый разработчик войдет в один и тот же Linux-сервер и будет заниматься разработкой через X-сессию. В настоящее время каждый разработчик запускает собственный демон HTTP на своей локальной рабочей станции, который прослушивает 127.0.0.1:5000. Однако, если я переведу всех на один и тот же компьютер, это, очевидно, создаст проблему с конфликтами портов.

В идеале я бы хотел, чтобы их рабочий процесс остался прежним. Если мне придется назначить каждому уникальный порт, это вызовет массу проблем и замешательства. Есть ли способ сделать это? Могут ли разные процессы связываться с одним и тем же портом для каждого пользователя? Я обнаружил способ использовать iptables для перенаправления портов для каждого пользователя, но это решает только часть проблемы:

iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 5000 -m owner --uid-owner userA -j REDIRECT --to-ports 5001

Это решение по-прежнему не позволяет различным процессам связываться с одним и тем же портом. И я даже не уверен, что нахожусь здесь на правильном пути, ища решение iptables. Какие-либо предложения? Может быть, есть хак, который можно применить в пользовательском пространстве? Спасибо!

Они не могут привязаться к одному и тому же порту.

Свяжите каждый процесс с его собственным портом, а затем отправьте порт INPUT 5000 на 5001, 5002, 5003 в зависимости от ваших условий.

Сколько у вас людей разработчиков? Если их не так много, как насчет настройки KVM (или Xen / VMware) на сервере, чтобы они использовали свою собственную виртуальную машину (каждая со своим IP, конечно).

Адреса TCP-серверов

В адрес прослушивающего TCP-сервера состоит из (IP, порт) (для IP в IPv4 или IPv6), где IP может быть IP-адресом с подстановочным знаком "*", то есть адресом 0.

Клиент TCP подключится к конкретная пара (server_IP, server_port) (здесь нет подстановочных знаков). Должно быть точно один прослушивающий сокет либо с:

  • этот точный адрес (server_IP, server_port)
  • или IP-адрес с подстановкой, и тот же порт; т.е. слушающий сокет будет иметь адрес (0, server_port)

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

Используемое адресное пространство

Хорошая новость заключается в том, что пространство для IPv4 адреса локальных хостов довольно большой: ровно 224 - 2 = ** 16777214 различных IPv4-адресов зарезервированы для этого задания, с 127.0.0.1 до 127.255.255.254.

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