linux下设置ip_local_port_range参数

2020-09-03 15:30:06 浏览数 (2)

在对于繁忙的网络服务器,如代理服务器或负载平衡器,我们可能需要增加网络端口范围来增强它的处理能力。

在Linux上,有一个sysctl参数ip_local_port_range,可用于定义网络连接可用作其源(本地)端口的最小和最大端口的限制,同时适用于TCP和UDP连接。

查看当前系统开放端口范围,命令如下:

代码语言:javascript复制
# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000

要么:

代码语言:javascript复制
# sysctl net.ipv4.ip_local_port_rangenet.ipv4.ip_local_port_range = 32768 61000

如上命令显示"最小最大值",因此新连接的本地端口将介于32768和61000之间,默认情况下28232个随机端口,看起来很多,但在繁忙的流量服务器的时候可能很容易达到这个限制。

对于繁忙的流量服务器,可以如下操作增加随机端口范围。

代码语言:javascript复制
# sysctl -w net.ipv4.ip_local_port_range="15000 64000"net.ipv4.ip_local_port_range = 15000 64000

或者直接通过使用echo直接传递值给/proc目录下的文件。

代码语言:javascript复制
echo "15000 64000" > /proc/sys/net/ipv4/ip_local_port_range

如果想要持久生效,并且重启不会失效,请将配置保存在/etc/sysctl.conf的配置文件中。

代码语言:javascript复制
# cat /etc/sysctl.d/net.ipv4.ip_local_port_range.confnet.ipv4.ip_local_port_range = 15000 65000

要了解服务器当前处理的会话数,请使用如下命令查看:

代码语言:javascript复制
# ss -sTotal: 2933 (kernel 3131)
TCP:   43915 (estab 2655, closed 41080, orphaned 159, synrecv 0, timewait 41080/0), ports 30347Transport Total     IP        IPv6*     3131      -         -
RAW   0         0         0
UDP   17        11        6
TCP   2835      2832      3
INET      2852      2843      9
FRAG      0         0         0# netstat -anp | more...
tcp        0      0 10.50.1.6:41205        10.50.1.10:80           TIME_WAIT   -
tcp        0      0 10.50.1.6:42515        10.50.1.10:80           TIME_WAIT   -
tcp        0      0 10.50.1.6:59845        10.50.1.10:80           TIME_WAIT   -

请注意增加TCP端口范围,但有限制!

TIPS: 如果服务器有较多程序开放端口,请注意程序的端口开放范围,以避免随机端口跟设置的端口范围冲突。

比如如下场景:

代码语言:javascript复制
1. 多服务程序在一台机器,会造成有的服务启动监听端口跟系统开放的端口范围冲突2. 比如有的服务随机端口去连接zookeeper,如果这个随机端口跟本机服务监听的端口冲突的话,就造成次服务连接zookeeper失败,从而会造成你意想不到的服务故障发生

如上的一些场景尽量避免,可以根据业务情况设置不同的开放端口范围。

0 人点赞