本文へ移動

インフラ転職コンパスわからないところから、ひとつずつ。

メニュー

IPプロトコル番号とは?一覧とポート番号との違い・ACLでの指定

「TCPは6」「HTTPSは443」。どちらも通信を表す数字ですが、同じ種類の番号ではありません。ここを混ぜると、ACLやWiresharkの条件を書いたときに迷います。

IPプロトコル番号は、IPヘッダーで次に続くプロトコルを示す番号です。ポート番号は、TCPやUDPの中で通信の送り先を区別する番号。どのヘッダーに入っているかから見ていくと、ICMPやESPにポートがない理由もつながります。

IPの中に、次のプロトコルを示す欄がある

IPv4ヘッダーのProtocol欄には、TCPなら6、UDPなら17、ICMPなら1という値が入ります。受信側は、その値を見てIPパケットの中身をどのプロトコルとして扱うか判断します。

IPv6ではNext Headerという欄です。拡張ヘッダーがある場合は、それぞれが次のヘッダーを指すため、最初の欄が必ずTCPやUDPを示すとは限りません。

バージョン フィールド名 サイズ 役割
IPv4 Protocol 8ビット ペイロードに入っている上位プロトコルを示す
IPv6 Next Header 8ビット 次に続くヘッダー(拡張ヘッダーまたは上位プロトコル)を示す
番号 キーワード プロトコル どこで出てくるか
1 ICMP Internet Control Message ping、traceroute、Path MTU Discovery
2 IGMP Internet Group Management マルチキャストの参加・離脱
4 IPv4 IPv4 encapsulation IPv4 over IPv4トンネル
6 TCP Transmission Control HTTP/HTTPS、SSH、SMTPなど大半の業務通信
17 UDP User Datagram DNS、DHCP、SNMP、Syslog、NTP
41 IPv6 IPv6 encapsulation 6in4トンネル
47 GRE Generic Routing Encapsulation 拠点間トンネル、DMVPN
50 ESP Encap Security Payload IPsec VPNの暗号化データ
51 AH Authentication Header IPsecの認証のみの構成
58 IPv6-ICMP ICMP for IPv6 IPv6のping、近隣探索(NDP)
88 EIGRP EIGRP Ciscoのルーティングプロトコル
89 OSPFIGP OSPFIGP OSPFの隣接確立とLSA交換
103 PIM Protocol Independent Multicast マルチキャストの経路制御
112 VRRP Virtual Router Redundancy Protocol デフォルトゲートウェイの冗長化
115 L2TP Layer Two Tunneling Protocol リモートアクセスVPN
132 SCTP Stream Control Transmission Protocol 通信事業者系のシグナリング

番号はIANAの登録表で確認できます。表をすべて暗記するより、実際に扱う通信について、プロトコル名と番号を対応させると使いやすくなります。

TCPの6と、HTTPSの443は別の欄

TCPでHTTPSサーバーへ接続する例では、IPのProtocolが6、TCPの宛先ポートが443です。「TCPの通信か」を選び、その中で「宛先ポートが443か」を選ぶ二段階になります。

IPプロトコル番号は8ビット、TCP/UDPのポート番号は16ビットです。桁数だけでなく、入っている場所と用途が違います。

IPプロトコル番号 ポート番号
どのヘッダーにあるか IPヘッダー TCPヘッダー/UDPヘッダー
ビット数 8ビット(0〜255) 16ビット(0〜65535)
何を識別するか 上位プロトコルの種類 そのホスト上のアプリケーション
持たないものがあるか すべてのIPパケットが持つ ICMPやOSPFなどは持たない
例 TCP=6、UDP=17、GRE=47 HTTPS=TCP/443またはUDP/443、SSH=TCP/22、DNS=UDP/TCP 53

443というポートだけを書いても、TCPかUDPかは決まりません。QUICなどを使う通信ではUDP443もあります。要件にはプロトコルとポートを両方書きます。

クライアントの送信元ポートは、通常、接続ごとに選ばれる一時ポートです。宛先のサービス用ポートと同じものだと思わないようにします。

ICMPやESPは、TCP/UDPのポートを持たない

ICMP、GRE、直接送るESPなどにはTCP/UDPヘッダーがないため、そのポート番号もありません。ICMPのpingなら、IPプロトコルとICMPのタイプなどで条件を考えます。

IPsecは外側から見える形式に注意します。ESPをそのまま運ぶならIPv4のProtocolは50です。NAT-TでUDPへ包む構成なら、外側はUDPで、通常4500のポートを使います。

通信の例 外側のIP Protocol ポート FW/ACLで見る対象
ESPを直接転送 50 なし ESPと送受信IP
ESPをNAT-Tでカプセル化 17(UDP) 通常UDP/4500 外側のUDPと送受信IP
GRE 47 なし GREと送受信IP

外側の装置からは、包まれた内側の通信をそのまま見られるとは限りません。どの位置のACLやFWで判断するかを決め、その場所で見えるヘッダーを確認します。

「IPsecだから必ずProtocol50だけ」と固定せず、IKEに必要な通信、データの形式、対象装置の処理を合わせて確認してください。

ACLでは、プロトコルを選んでから条件を足す

Ciscoの拡張ACLでは、permit tcpなどのプロトコル指定のあとに、送信元・宛先やポートを書きます。ESPならespのキーワードや、対応する番号50で指定できます。

要件表に「TCP/443」「ESP/50」のように書いてあれば、数字がポートかIPプロトコル番号かを区別しやすくなります。曖昧な「443許可」を、そのまま設定へ写さないようにします。

! キーワードで指定
Router(config)# ip access-list extended VPN-IN
Router(config-ext-nacl)# permit esp host 172.28.53.10 host 172.28.42.20
Router(config-ext-nacl)# permit udp host 172.28.53.10 host 172.28.42.20 eq 500
Router(config-ext-nacl)# permit gre host 172.28.53.10 host 172.28.42.20

! 番号で指定(キーワードのないプロトコル)
Router(config-ext-nacl)# permit 112 any 224.0.0.18
Router(config-ext-nacl)# permit tcp any host 172.28.42.30 eq 443
  1. ポート番号だけで書く:「443」とだけ記すとTCP/443とUDP/443を区別できません。QUICを使う場合などは、実際のプロトコルと方向を別行で確認します。
  2. IPsecを一律にESP/50とする:直接ESPかNAT-TのUDP/4500かで、外側から見えるヘッダーが異なります。パケットキャプチャと対象装置の設定で方式を確かめます。
  3. 往路だけ許可する:FWがステートフルか、戻り通信が同じ経路を通るかを確認します。非対称経路では、片側の許可設定だけで成立しないことがあります。

設定例は説明用のIPです。適用するインターフェースと方向、NATやトンネルの前後も合わせて確認します。同じ通信でも、観測する場所によって外側の条件が変わるためです。

送信元IP、宛先IP、プロトコル、必要なら送信元・宛先ポートを分けた表を作ると、ACLと試験の条件をそろえられます。

Wiresharkも、調べたいヘッダーで絞る

IPv4のGREならip.proto == 47、ESPならip.proto == 50で絞れます。TCPの443ならtcp.port == 443ですが、これは送信元・宛先のどちらかのポートが443という条件です。

サーバーへ向かう要求だけならtcp.dstport、返信だけならtcp.srcportなど、向きに合わせた欄を使います。ポートのフィルターだけでは、GREやESPは拾えません。

やりたいこと 表示フィルター
GREだけ見る ip.proto == 47
ESPだけ見る ip.proto == 50
TCP以外を見る ip.proto != 6
IPv6の直後に続くヘッダーで絞る ipv6.nxt == 58
HTTPSを見る tcp.port == 443

IPv6のipv6.nxtは直後のヘッダーを見ます。拡張ヘッダーがあるときは、目的のプロトコルまで展開して確認します。

まず対象パケットのIP欄と内側の欄を一つずつ開くと、番号の位置を確認できます。そのあとフィルターにすれば、見えない理由を判断しやすくなります。

番号を覚える前に、入っている場所を説明する

IPプロトコル番号は次のプロトコル、TCP/UDPのポート番号はその中の通信を識別します。ICMPなど、TCP/UDPを使わない通信に同じポートの考え方を当てはめません。

通信一本について、外側のIP、その内側のプロトコル、必要なポートを並べてみてください。ヘッダーの重なりと、ACLがどの欄を見ているかがつながります。

数字だけのメモから、プロトコル名・番号・方向を持つ要件表へ直すと、設定レビューでも取り違えを減らせます。

動画・筆者の投稿で補足する

文章と図で流れをつかんだら、関連する動画も参考にしてください。画面の表示や操作は、機種・ソフトウェアの版によって異なる場合があります。

プロトコル番号とは?(設計構築チャンネル)
確認に使った公式資料
最近の記事
ピックアップ