しばらく 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 ポート番号を書き換える方法を説明しました。