Linux

(Linux) 多個程序可以按使用綁定到同一個 TCP 埠嗎?

  • January 7, 2019

作為試點項目的一部分,我正在嘗試為使用 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。

TCP 伺服器地址

偵聽 TCP 伺服器的地址由 (IP, port) 組成(對於 IPv4 或 IPv6 中的 IP),其中 IP 可以是萬用字元 IP“*”,即地址 0。

TCP 客戶端將連接到特定的 (server_IP, server_port) 對(此處沒有萬用字元)。必須有一個監聽套接字,其中之一是:

  • 這個確切的(server_IP,server_port)地址
  • 或萬用字元 IP,以及相同的埠;即監聽套接字將具有地址(0,server_port)

TCP 堆棧不希望必須在套接字之間做出任意選擇,因此它不允許同時創建兩個不同的偵聽 TCP 套接字,它們可以接受來自 TCP 客戶端的相同連接嘗試。

可用地址空間

好消息是 IPv4本地主機地址的空間非常大:正好 2 **24 - 2 = 16777214 個不同的 IPv4 地址被保留用於此作業,從 127.0.0.1 到 127.255.255.254。

引用自:https://serverfault.com/questions/319834