通过添加额外的以太网接口来增加临时端口

时间:2013-09-09 14:53:08

标签: linux tcp port ethernet ifconfig

有没有办法将短暂端口的数量加倍并在16位限制附近工作?我尝试在eth0上创建虚拟以太网接口,并希望能够解除限制。虽然应用程序在出站流量中使用新的虚拟IP,但它似乎仍然达到了相同的临时端口限制。我想虚拟端口与物理接口上的端口有一对一的映射。

ifconfig eth0:1 10.10.10.210 netmask 255.255.255.192 ifconfig eht0:2 10.10.10.211 netmask 255.255.255.192

有人可以建议我如何在不添加额外NIC的情况下将Linux中的短暂端口总数翻倍?

(仅供参考,我已尝试增加ulimit / max打开文件,更改端口范围,启用tcp recycle / timestamps,减少tcp fin超时...我想我们只需要超过65k端口用于此代理机器。)< / p>

4 个答案:

答案 0 :(得分:3)

如果您在eth0上创建虚拟接口,那么您应该能够为这些接口分配不同的IP地址。有了这个,您可以使用相同的短暂端口号(它们在内核中分配,因此您实际上没有太多控制权),每个端口都绑定到不同的地址 - 您可能需要设置SO_REUSEADDR选项。这将起作用的原因是因为对于传入的数据包(UDP / TCP),通过查看本地源IP和端口号来识别流。

正如@Duck所提到的,由于TCP / UDP报头只为端口号分配16位,因此增加本地堆栈中的短暂范围没有多大意义。

答案 1 :(得分:1)

这是网络协议的限制。 TCP&amp;例如,UDP具有16位源和目标端口。即使你可以增加端口数量,也没有人可以解决它们。

答案 2 :(得分:0)

事实证明,如果要超过65535限制,则不能使用0来绑定临时端口。相反,您需要使用显式端口号。

并启用tcp_tw_reuse可能会有所帮助:http://krenel.org/tcp-time_wait-and-ephemeral-ports-bad-friends.html

答案 3 :(得分:0)

这似乎是一种方式,但它不是免费的。在连接之前它被称为&#34;绑定&#34;。请参阅this short but dense article,它总结得非常好。

拥有多个虚拟IP只是一个开始。引用链接文章:

  

在Linux上,短暂的端口范围是全局资源,它不是IP地址本地的特定设置。

这很糟糕,你必须通过几个正确的设置(你已经找到大部分设置)来改善你的起始位置,并通过一个聪明的套接字分配技术来绕过全局限制。结果是您将手动控制所有传出IP。这似乎也不能很好地处理使用传统&#34; connect&#34;的系统上的其他应用程序。方式。