net.ipv4.ip_local_port_range vs net.ipv4.ip_local_reserved_ports
net.ipv4.ip_local_port_range(出站端口范围)
作用:定义内核在为本地客户端连接自动分配临时端口(ephemeral port)**时,可以使用的端口范围。
默认值:
一般是32768 60999(在 Linux 3.x/4.x),在一些发行版上可能是49152 65535(符合 IANA 建议)。影响场景:
当进程调用connect()发起出站连接(没指定源端口时),内核会从这个范围里挑选一个可用端口。调优点:
如果服务器并发出站连接特别多(如反向代理、NAT 网关),需要扩大范围避免 “cannot assign requested address (EADDRNOTAVAIL)” 错误。
修改命令:
1
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
net.ipv4.ip_local_reserved_ports(监听端口范围)
作用:指定一组不能分配给临时端口的保留端口(黑名单)。
配置格式:
- 逗号分隔(如
8080,3306,5432) - 范围(如
5000-5100) - 可以混合(如
8080,3306,5432,5000-5100)
- 逗号分隔(如
应用场景:
- 有些服务监听在高位端口(例如
8080),如果不排除它,内核可能会把8080分配给临时出站连接,造成 端口冲突。 - 适合 应用监听端口和临时端口范围冲突 时使用。
- 有些服务监听在高位端口(例如
注意事项:
- 只会影响 自动分配的 ephemeral port,不会阻止你手动
bind()到这些端口。 - 保留端口太多会缩小可用范围,导致连接数受限。
- 建议只保留真正有冲突风险的端口。
- 只会影响 自动分配的 ephemeral port,不会阻止你手动
关系 & 区别总结
| 参数 | 控制对象 | 默认值 | 典型用途 |
|---|---|---|---|
net.ipv4.ip_local_port_range |
可用的临时端口范围(白名单) | 32768 60999 |
控制并发出站连接总容量 |
net.ipv4.ip_local_reserved_ports |
不可用的临时端口(黑名单) | 空 | 避免和服务监听端口冲突 |
⚡ 一句话总结:
ip_local_port_range定义“内核能用哪些端口”。ip_local_reserved_ports定义“这些端口即使在范围内也不能用”。
查看当前值
1 | sysctl net.ipv4.ip_local_port_range |
调整示例(扩大范围以防端口耗尽)
1 | # 临时生效 |