Ephemeral Port(エフェメラルポート)から特定のポート番号を除外する方法

経緯

Tomcat起動→ 「アドレスは既に使用中です」のErrorで起動失敗→ netstatで競合ポートを探すも該当なし→ Ephemeral Portの範囲とTomcatのポートが被ってることが発覚

なんらかの通信が一時的にTomcatで使うポートと競合してしまったようです。

Ephemeral Portの範囲からTomcatで使うポートを除外すれば良さそう。

Ephemeral Port とは

クライアントがサーバと通信を行うために、一時的に割り当てるポート番号の範囲。
またはサーバがWellknown Portを使わずに、クライアントと通信する場合にも使われる。
Ephemeral(短命な)の名の通り、セッション終了後はポートが解放される。


Ephemeral Portの確認方法

# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

または

# sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000


この場合は、32768~61000がEphemeral Portの範囲

Ephemeral Portから特定のポート番号を除外する

# vi /etc/sysctl.conf

末尾に以下を追加

net.ipv4.ip_local_reserved_ports = 51200,51201,51210-51300 

※複数値はカンマ,区切りで。範囲指定はハイフン-で。
※ポート番号は環境に合わせて。

設定反映

# sysctl -p


確認

# sysctl -a | grep ip_local_reserved_ports
net.ipv4.ip_local_reserved_ports = 51200-51201,51210-51300