5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

エフェメラルポート(ダイナミックポート)の確認及び変更する方法

Posted at

1. エフェメラルポート(ダイナミックポート)とは

エフェメラルポート(ダイナミックポート)とは、インターネットプロトコル(IP)を用いた通信を行うため、TCP/IPプロトコルスタックが事前に定義されている範囲内から自動的に割り当てるポートです。
主に、サーバ側のポートはあらかじめ決められているウェルノウンポートが使用されますが、クライアント側のポートは、一時的に使用するポートとして、エフェメラルポートの中から動的に選択されます。
例えば、クライアントからサーバーにHTTPS通信する場合、クライアントは宛先ポートとして「443」のポート、送信元ポートとしてエフェメラルポートの中から動的に1つのポートを選択します。サーバーはHTTPS通信の応答を送信元ポート宛てに返します。

2. Linux(CentOS8)でのエフェメラルポートの確認及び変更

2.1. Linuxでのエフェメラルポートの確認

Linux(CentOS8)でエフェメラルポートを確認するには、以下のコマンドを実行します。
sysctl -a | grep net.ipv4.ip_local_port_range

実行結果
[root@centos8 ~]# sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    60999
[root@centos8 ~]#

エフェメラルポートとして、32768~60999番が割り当てられていることがわかります。
なお、TCP、UDP、及びIPv4、IPv6ともに、エフェメラルポートとして、上記の範囲が使用されます。

2.2. Linuxでのエフェメラルポートの変更

エフェメラルポートを変更する手順を2つ紹介します。(実際は「変更方法その1」の方法が良いと思います。)
ここでは、現在エフェメラルポートとして、32768~60999番が割り当てられているのを、49152~65535番の割り当てに変更します。
(下記はCentOS8上で実行しています。)

2.2.1. 変更方法その1(/etc/sysctl.confを修正)

/etc/sysctl.confのファイルに、以下を追記します。

net.ipv4.ip_local_port_range=49152 65535

/etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_local_port_range=49152 65535

以下のコマンドで、設定を反映させます。
sysctl -p

実行結果
[root@centos8 ~]# sysctl -p
net.ipv4.ip_local_port_range = 49152 65535
[root@centos8 ~]#

以下のコマンドでエフェメラルポートを確認します。
sysctl -a | grep net.ipv4.ip_local_port_range

実行結果
[root@centos8 ~]# sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 49152    65535
[root@centos8 ~]#

エフェメラルポートとして、49152~65535番が割り当てられました。

2.2.2. 変更方法その2(/proc/sys/net/ipv4/ip_local_port_rangeを修正)

以下のコマンドで/proc/sys/net/ipv4/ip_local_port_rangeのファイルを確認します。
cat /proc/sys/net/ipv4/ip_local_port_range

実行結果
[root@centos8 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999
[root@centos8 ~]#

以下のコマンドで、/proc/sys/net/ipv4/ip_local_port_rangeの内容を49152 65535に書き換えます。
echo 49152 65535 > /proc/sys/net/ipv4/ip_local_port_range

実行結果
[root@centos8 ~]# echo 49152 65535 > /proc/sys/net/ipv4/ip_local_port_range
[root@centos8 ~]#

以下のコマンドで、ネットワークを再起動します。
systemctl restart NetworkManager

実行結果
[root@centos8 ~]# systemctl restart NetworkManager
[root@centos8 ~]#

以下のコマンドでエフェメラルポートを確認します。
sysctl -a | grep net.ipv4.ip_local_port_range

実行結果
[root@centos8 ~]# sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 49152    65535
[root@centos8 ~]#

エフェメラルポートとして、49152~65535番が割り当てられました。

3. Windowsでのエフェメラルポートの確認及び変更

3.1. Windowsでのエフェメラルポートの確認

Windowsでエフェメラルポートを確認するには、コマンドプロンプトを管理者権限で開き、以下のコマンドを実行します。

  • IPv4、TCPの場合
    netsh int ipv4 show dynamicport tcp
  • IPv4、UDPの場合
    netsh int ipv4 show dynamicport udp
  • IPv6、TCPの場合
    netsh int ipv6 show dynamicport tcp
  • IPv6、UDPの場合
    netsh int ipv6 show dynamicport udp
実行結果
C:\WINDOWS\system32>netsh int ipv4 show dynamicport tcp

プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>netsh int ipv4 show dynamicport udp

プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>netsh int ipv6 show dynamicport tcp

プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>netsh int ipv6 show dynamicport udp

プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>

TCPもUDPもエフェメラルポートとして、49152番から16384個、すなわち49152~65535番が割り当てられていることがわかります。

3.2. Windowsでのエフェメラルポートの変更

Windowsでエフェメラルポートを変更する場合、コマンドプロンプトを管理者権限で開き、以下のコマンドを使用します。

  • IPv4、TCPの場合
    netsh int ipv4 set dynamicport tcp start=<開始ポート番号> num=<個数>
  • IPv4、UDPの場合
    netsh int ipv4 set dynamicport udp start=<開始ポート番号> num=<個数>
  • IPv6、TCPの場合
    netsh int ipv6 set dynamicport tcp start=<開始ポート番号> num=<個数>
  • IPv6、UDPの場合
    netsh int ipv6 set dynamicport udp start=<開始ポート番号> num=<個数>

ここでは、以下のコマンドで、IPv4、TCP のエフェメラルポートを32768~60999番(32768番から28232個)に変更してみます。
netsh int ipv4 set dynamicport tcp start=32768 num=28232

実行結果
C:\WINDOWS\system32>netsh int ipv4 set dynamicport tcp start=32768 num=28232
OK


C:\WINDOWS\system32>

以下のコマンドで、変更後のエフェメラルポートを確認します。
netsh int ipv4 show dynamicport tcp

実行結果
C:\WINDOWS\system32>netsh int ipv4 show dynamicport tcp

プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 32768
ポート数        : 28232


C:\WINDOWS\system32>

IPv4、TCPのエフェメラルポートとして、32768番から28232個、すなわち32768~60999番が割り当てられたことがわかります。

「IPv4、UDP」「IPv6、TCP」「IPv6、UDP」も見てみます。
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp

実行結果
C:\WINDOWS\system32>netsh int ipv4 show dynamicport udp

プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>netsh int ipv6 show dynamicport tcp

プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 32768
ポート数        : 28232


C:\WINDOWS\system32>netsh int ipv6 show dynamicport udp

プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384


C:\WINDOWS\system32>

「IPv4、UDP」「IPv6、UDP」は変更されていませんが、「IPv6、TCP」が変更されていることがわかります。
IPv4のエフェメラルポートを変更すると、同時にIPv6のエフェメラルポートも変更されるようです。


以上

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?