首页 文章

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

提问于
浏览
4

有没有办法将短暂端口的数量加倍并在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循环/时间戳,减少tcp fin超时...我想我们只需要超过65k端口用于此代理机器 . )

4 回答

  • 3

    似乎's a way, but it'不是免费的 . 它被称为"bind before connect" . 见this short but dense article,总结得非常好 .

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

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

    所以这很糟糕,你必须通过几个正确的设置(你已经找到它们中的大部分)来改善你的起始位置,并通过一个聪明的套接字分配技术来绕过全局限制 . 结果是您将手动控制所有传出IP . 这似乎也无法与使用传统“连接”方式的系统上的其他应用程序很好地配合 .

  • 1

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

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

  • 0

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

  • 0

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

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

相关问题