環境情報
- Rocky Linux 8
発生した問題
「ネットワークを制限した環境でアプリケーションを動作させるため、アプリケーションが利用する送信元ポートアドレスを知りたい」という依頼があった。
通信を受け付けるサーバが Listen するポートや、 curl などで利用する送信先ポートアドレス (80、443 など) はわかれど、送信元ポートアドレスを知る方法は全く分からなかったため調べた。
解決方法
アプリケーション側で特に送信元ポートアドレスについての管理などはしていなかったため、利用する送信元ポートアドレスについては OS 依存だということが分かった。
どうも、「送信元ポートアドレスとして利用されるポート」は、 Ephemeral port という用語が該当するらしい。この用語で検索をかけると色々と情報が出てきた。
- Ephemeral port - Wikipedia
- unix - How to view and edit the ephemeral port range on Linux? - Stack Overflow
Ephemeral port の範囲は、 net.ipv4.ip_local_port_range というカーネルパラメータとして設定されている。現在の設定は、以下のように確認できる。
# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
もしくは、 /proc/sys/net/ipv4/ip_local_port_range
の内容を直接確認することでも同じ情報が得られる。
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
このシステムで使われる送信元ポートの範囲は、 32768 ~ 60999 である。
なおこれは、 Linux のカーネルとして広く使われている範囲らしい。