Linux

我可以通過附加 IPv4 地址讓單個伺服器偵聽超過 65535 個埠嗎

  • March 5, 2021

我有許多伺服器要通過 SSH 連接,其中一些位於不同的 NAT 後面,可能需要 SSH 隧道。現在我正在為此目的使用單個 VPS。當該數字達到65535 - 1023 = 64512,並且 VPS 用完了埠來連接隧道時,我是啟動另一個 VPS,還是只是將額外的 IP 地址附加到現有 VPS?

換句話說,是每個 Linux 機器還是每個網路介面都設置了 65535 限制?這個答案似乎說它通常是每個 IP 地址,特別是每個 IPv4 地址。那麼5 元組是否意味著引入一個新的 IP 地址將保證一個新的元組,從而重置限制?如果是 IPv4,那麼 IPv6 有什麼不同嗎?

無論是 IPv4 還是 IPv6,偵聽埠的限制都是針對每個地址的。限制來自兩個字節的TCPUDP數據包標頭,因此 TCP 和 UDP 的埠號只能在0x0000(0) 到0xFFFF(65535) 之間。

當任何服務(包括 SSH 伺服器)監聽一個埠時,它可以選擇監聽一個 IP 地址或每個 IP 地址。因此,除非您將每個服務配置為偵聽一個特定的 IP 地址,否則添加新地址不一定有幫助。

但是,只要兩個或多個服務監聽不同的 IP 地址,它們就可以共享同一個埠。


老實說,NAT 一直是一個 hack。IPv6 對它的需求已經下降,每台機器都有自己的面向公眾的 IPv6 地址和限制傳入連接以替換 NAT 的防火牆。


解決這種情況的更常見的方法是使用“堡壘”機器……使用者 ssh 進入堡壘,然後從那裡 ssh 進入他們想要的盒子。

IPv4IPv6都沒有埠的概念,只有源IP地址和目的IP地址。埠限制由TCPUDP協議確定。

如果您想擴展起始埠限制(預設值:1024)以向最終使用者添加更多埠,您可以使用以下命令將特權埠範圍降低到某個較低的數字sysctl

echo "net.ipv4.ip_unprivileged_port_start=100" > /etc/sysctl.d/privileged_ports.conf

您可以使用 IP 別名將多個 IP 地址添加到單個網路介面卡。

使用 systemd,您可以使用.network文件:

[Network]
Address=192.168.55.1/24
Address=192.168.55.2/24
Gateway=...

引用自:https://unix.stackexchange.com/questions/637668