パケットの送信元・宛先 TCP/UDP ポート番号を書き換える

しばらく Modify-Field アクションでパケットを書き換える記事が続いています。今日はパケットの送信元・宛先 TCP/UDP ポート番号を書き換える方法です。

TCP/UDP のポート番号書き換えアクションを作る

TCP/UDP のポート番号を書き換えるアクションは ActionSetTpSrc とActionSetTpDst です。

# 送信元 TCP/UDP ポート番号を指定した値に書き換える
ActionSetTpSrc.new( 5555 )

# 宛先 TCP/UDP ポート番号を指定した値に書き換える
ActionSetTpDst.new( 80 )

:new の引数にポート番号を指定するだけなので、特にむずかしい点はありません。

Flow Mod でアクションを指定する

こうして作ったアクションはいつもの通り Flow Mod の :actions オプションに指定できます。

def packet_in datapath_id, message
  # ..

  send_flow_mod_add(
    datapath_id,
    :match => Match.new( :dl_src => message.macsa, :dl_dst => message.macda ),
    :actions => [ ActionSetTpDst.new( 80 ), ActionOutput.new( switch_port_no ) ]
  )

Packet Out のアクションも同様です。

まとめ

ActionSetTpSrc と ActionSetTpDst でパケットの送信元・宛先 TCP/UDP ポート番号を書き換える方法を説明しました。

Tagged , ,

Leave a Reply