Upload
tomoya-hibi
View
1.054
Download
3
Embed Size (px)
Citation preview
Copyright©2014 NTT corp. All Rights Reserved.
OpenFlowソフトウェアスイッチ
Lagopusで遊ぶ(仮)
2015/08/08
NTT未来ねっと研究所
日比 智也
1 Copyright©2014 NTT corp. All Rights Reserved.
ところで
ご覧になったことありますか?
@stereocatさん, Tremaday #4
http://www.slideshare.net/stereocat55/tremafirewall
2 Copyright©2014 NTT corp. All Rights Reserved.
@stereocatさんのスライドです
http://www.slideshare.net/stereocat55/tremafirewall
3 Copyright©2014 NTT corp. All Rights Reserved.
@stereocatさんのスライドです
http://www.slideshare.net/stereocat55/tremafirewall
4 Copyright©2014 NTT corp. All Rights Reserved.
@stereocatさんのスライドです
http://www.slideshare.net/stereocat55/tremafirewall
5 Copyright©2014 NTT corp. All Rights Reserved.
ところで,,,,
実装はOpenFlow1.0ベース
RangeはBitmaskでどう表現するの???
そもそもL4はbitmask掛けれない...
FWをOpenFlowで表現するのは無理?
簡単なテストにしか使えない?
6 Copyright©2014 NTT corp. All Rights Reserved.
ところで,,,,
実装はOpenFlow1.0ベース
RangeはBitmaskでどう表現するの???
そもそもL4はbitmask掛けれない...
それでもLagopusなら,,, Lagopusならなんとかしてくれる,,,
Copyright©2014 NTT corp. All Rights Reserved.
Lagopusで試すFirewall
OpenFlow1.3で実現する
FW運用のテストツール試作
Copyright©2014 NTT corp. All Rights Reserved.
Lagopusで試すFirewall
OpenFlow1.3で実現する
FW運用のテストツール試作
ココが違う
9 Copyright©2014 NTT corp. All Rights Reserved.
Agenda
Rangeの表記どうする?
TCP/UDPポートどうする?
実装どうする?
10 Copyright©2014 NTT corp. All Rights Reserved.
Agenda
Rangeの表記どうする?
TCP/UDPポートどうする?
実装どうする?
11 Copyright©2014 NTT corp. All Rights Reserved.
Rangeの表記どうする?
そもそもTCAMで検索できているはず
TCAMは{0,1,don’t care}で検索
RangeもTCAMで検索しているなら,Lagopusでも検索できるはず.
再起アルゴリズムで
Range -> Bitmask表記のルールに変換
12 Copyright©2014 NTT corp. All Rights Reserved.
例題
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0110 ~ 1111 をbitmaskのルールに分割
13 Copyright©2014 NTT corp. All Rights Reserved.
例題
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0110 ~ 1111 をbitmaskのルールに分割
14 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
1. ****が範囲に含まれるかチェック
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
****
15 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
2. ****の範囲を2つに分割
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1*** 0***
16 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
3. 1***はRangeに含まれる
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1*** 0***
17 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
2’. 0***を2つに分割
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1*** 00** 01**
18 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
2’’. 01**を2つに分割
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
00** 010* 1*** 011*
19 Copyright©2014 NTT corp. All Rights Reserved.
Algorithm 簡単(?)に
2’’. 01**を2つに分割
0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
00** 010* 1*** 011*
0110 ~ 1111 で表されるレンジは,{011*, 1***}で表されるルールの集合でちょうどカバー出来る.
20 Copyright©2014 NTT corp. All Rights Reserved.
Agenda
Rangeの表記どうする?
Bitmask表記に変換できる!
TCP/UDPポートどうする?
実装どうする?
21 Copyright©2014 NTT corp. All Rights Reserved.
Bitmaskが使えないTCP/UDP
OpenFlow1.0からの違いといえば,
Metadata & Multi table
Metadataにコピーすればいいじゃん
しかし,Copy_Fieldは未対応....
Metadata (64bit) L4 src L4 dst
22 Copyright©2014 NTT corp. All Rights Reserved.
Bitmaskが使えないTCP/UDP
書き下せばいいじゃない.
※ルール数が65536 * 2 * 2 = 26万
for i in range(0, 65535): # SRC for ip_proto in [6, 17] : flow = {"table_id":0,"priority":1000, "actions":[{"type":"WRITE_METADATA","metadata":i << 16, "metadata_mask":0x00000000FFFF0000}], "match":{"dl_type":2048,"ip_proto":ip_proto,"tp_src":i}} mod_flow_entry(datapath, flow, ofproto.OFPFC_ADD) # DST ...
23 Copyright©2014 NTT corp. All Rights Reserved.
それでもLagopusなら....
Lagopusならなんとかしてくれる...
私の戦闘力は 100万です.
24 Copyright©2014 NTT corp. All Rights Reserved.
そんなことしなくても...
リアクティブに登録しても実現できる
1. TCP/UDPパケットが来たらPacket-In
2. ポート番号のメタデータコピーのルール追加
未登録のPort番号であれば,Packet-In
Port番号コピーのルール+ Packet-Out
コントローラ
スイッチ
データプレーン
コントロールプレーン
25 Copyright©2014 NTT corp. All Rights Reserved.
Agenda
Rangeの表記どうする?
Bitmask表記に変換できる!
TCP/UDPポートどうする?
Metadataにコピーする!
きっとLagopusならなんとかしてくれる!
実装どうする?
26 Copyright©2014 NTT corp. All Rights Reserved.
実装どうする?
テーブル設計
table 0:
L4 srcポートをmetadataにコピー(32~16bitに)
table 1:
L4 dstポートをmetadataにコピー (16~0bitに)
table 2:
Range -> Bitmask変換したルール群投入
マッチしたら落とす or OUTPUT
or Next table (他のアプリケーション)
27 Copyright©2014 NTT corp. All Rights Reserved.
実装どうする?
Table 0のルール例
{'priority': 1000, 'table_id': 0, 'match': {'dl_type': 2048, 'ip_proto': 6, 'tp_src': 5}, 'actions': [ {'metadata_mask': 4294901760, ‘type': 'WRITE_METADATA', 'metadata': 327680} ] }
0xFFFF0000
UDP/TCP両方で ルール登録
0x00050000
28 Copyright©2014 NTT corp. All Rights Reserved.
実装どうする?
Table 1のルール例
{'priority': 1000, 'table_id': 1, 'match': {'dl_type': 2048, 'ip_proto': 17, 'tp_dst': 8}, 'actions': [ {'metadata_mask': 65535, 'type': 'WRITE_METADATA', 'metadata': 8} ] }
29 Copyright©2014 NTT corp. All Rights Reserved.
実装どうする?
Table 2のルール例
(アドレスに意味はありません)
{"table_id":2,"priority":65535,"cookie":0, "actions":[], "match":{ "dl_type":2048, "ipv4_src":“192.168.1.10/255.255.255.240", "ipv4_dst":“192.168.1.171/255.255.255.240", "ip_proto":17, "metadata":"0x0000000000580050/0x00000000ffffffff"} }
30 Copyright©2014 NTT corp. All Rights Reserved.
単体利用できます.
ルールの追加/削除が動的に出来ます.
priorityをちゃんと考えれば.
他のアプリと組み合わせられます.
テーブル設計の競合注意
iptablesをより速い?(試してない)
31 Copyright©2014 NTT corp. All Rights Reserved.
デモ
ルール追加だけです><
32 Copyright©2014 NTT corp. All Rights Reserved.
まとめ
Lagopusで試すFWを実現
Lagopusならなんとかしてくれるはず
33 Copyright©2014 NTT corp. All Rights Reserved.
注意
現在はルール投入に時間がかかります.
新Lookupだと高速になりそうだが,まだ動作が怪しい..
良い子はコピーフィールドが使えるOpenFlow Switchの利用も考えましょう.
できる子はLagopusにコピーフィールド実装してください.
34 Copyright©2014 NTT corp. All Rights Reserved.
Thank you for your attention
This research is a part of the project for “Research and Development of Network Virtualization Technology” supported by the Ministry of Internal Affairs and Communications.