一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

DHCP Relay利用時のDHCPサーバの振る舞い

DHCPでは、通常DHCPクライアントからDHCPサーバへの通信にはポート68からポート67へ、DHCPサーバからDHCPクライアントへの通信にはポート67からポート68へパケットを送信しています。

ところがDHCP Relayを使うと、DHCPサーバの挙動が変わります。DHCPクライアントに対してはポート68に対してパケットを送信していたのが、DHCP Relay Agentにはポート67へ向かって送信しています。

というように、DHCPサーバはDHCPパケットの送信時に、ポート番号67に対してパケットの送信をするようになります。

RFCにはなっていませんが、draft-ietf-dhc-implementation-02 - Implementation Issues with RFC 2131, "Dynamic Host Configuration Protocol (DHCPv4)"の4.7.2 Relay Agent Port Usageには次のように書かれています。

4.7.2 Relay Agent Port Usage

Relay agents should use port 67 as the source port number. Relay agents always listen on port 67, but port 68 has sometimes been used as the source port number probably because it was copied from the source port of the incoming packet.

Cable modem vendors would like to install filters blocking outgoing packets with source port 67.

RECOMMENDATIONS:

  • Relay agents MUST use 67 as their source port number.
  • Relay agents MUST NOT forward packets with non-zero giaddr unless the source port number on the packet is 67.

Relay agentはソースポート番号に67を利用するべきである。Relay agent常に67番でlistenするが、やってきたパケットのソースポート番号がコピーされてしまう為に、ポート68がソースポート番号として利用される場合もある。

ケーブルモデム業者は、ソースポート67から出て行くパケットをブロックするフィルターをインストールしておくようにしていて欲しい。

推奨:

  • Relay agentは、ソースポート番号として67を利用しなければならない
  • Relay agentは、パケットのソースポート番号が67でないならば、giaddrが0でないパケットを転送してはいけない。

同じような事はdhcrelay(8)のmanpageにも書かれていました。

dhcrelay を標準のポート (ポート 67) 以外で待機させたい場合は -p フラグで指定できます。この後には dhcrelay を待機させる udp のポート番号を書きます。これはデバッグの用途に特に便利です。 -p フラグが指定されると、この中継エージェントは指定した番号よりも 1 つ大きなポート番号を用いてクライアントに返事を送ります。つまり -p 67 を指定した場合は、dhcrelay はポート 67 を聴き、ポート 67 に返事を送ります。サーバへの中継は、 -p フラグで指定したのと同じポート番号に送信されます。