Upload
-
View
2.906
Download
2
Embed Size (px)
Citation preview
2013年 4月
株式会社エーピーコミュニケーションズ:近藤
TremaTremaで構築!で構築!
中小企業の社内中小企業の社内 LANLAN
自己紹介
エーピーコミュニケーションズという会社で働いています。 中小規模の Sierでネットワーク、サーバ、開発をやっています。
でも、私は“フツー“のネットワークエンジニアです。 プログラミングは、趣味でも仕事でもやったことありませんでした
2
今日の目的
社内 LANを Trema+Pica8を使って NW更改した話をします、 Trema.0.3.14 Pica8 Pronto3290(PicOS1.6.1)
Tremaユーザー的な視点で。
そして、地味です。 GUIの実装はしていません。
要はレイヤ 3までのはなしです。
3
目次
社内 LANの構成
動作の仕組みなど
導入後のフローテーブルの状態
性能について
まとめ
4
社内 LANの構成
5
規模と構成(既存) 規模
クライアント :30台(色々な部門)
検証用 SV:40台(仮想&物理)
ファイルサーバ :1台
プリンタ:1台
無線 AP:1台
規模と構成(既存)(続き) 超概略構成
すべてのホストが一つのセグメント。
ちょうど、社内LAN更改の話が出たので、
社内 LANの構成
6
Hub
L2SW
FW
…となった訳です
私の上司
社内 LANの構成
7
移行後 OpenFlow スイッチは物理的な HW*1台
実は、フルメッシュでも動作。経路切替もできます。
スイッチが全セグメントを集約する
各部門ごとに別のセグメントへ移動アドレスのアサインはDHCPをつかう
ブラウジングは、WebProxy経由
一部通信制限あり(コードにベタ書き…)
…という感じ。です
社内 LANの構成
8
移行後(続き) …構成図
Server Seg.DHCP SV
Web Proxy SVFile SV
WLANClient Seg.(DHCP Client*??hosts)
B Group Seg.(DHCP Client*10hosts)
A Group Seg.(DHCP Client*10hosts)
C Seg.*20~30hosts
OF Mgmt Seg.OF Ctrlr SV,
Remo-maintainance SV.Traffic Monitor SV
on ESX
TestSV*40hosts On ESX
Mgmt Eth0
GW Seg.
C. Seg.GW
※今回は、DHCPを使う上、オフィス LANという特性上リアクティブ型です。
動作の仕組み
このスクリプトでできること LLDPのトポロジ管理
CapabilityTLVで簡単な接続機器識別おまけ:トポロジー描画
フルメッシュ・シングル構成での L3ルーティングと L2スイッチング
DHCPリレーエージェント
ARPの返答と L2的な透過
ブロードキャスト /マルチキャスト制限
経路切り替え
9
動作の仕組み
転送処理のルール(とエントリの優先度) ARP・ LLDPのような特殊なやつは常に、 Packet_Inで処理
同じセグメント間の ARPであれば、 Flowで通過させてあげる
DHCPパケットは常に、 Packet_Inで処理コントローラで、 DHCPリレーをやらせる
DHCPフィールドをいじる必要がある(後述)
そのほかの IPパケット同じセグメント間通信異なるセグメントへの通信 Internetへの通信
※例外はあるが、基本的にリアクティブにフローを学習
10
動作の仕組み
転送処理のルール(とエントリの設計)
11
たとえば…サーバからインターネット向けのWeb通信
サーバからDHCPクライアント向けのDHCP通信
たとえば…サーバからインターネット向けのWeb通信
サーバからDHCPクライアント向けのDHCP通信
DHCP
DHCP
WebWeb
In_port:SV Side
In_port:SV Side
Ether src:SV
Ether src:SV
Ether dst:OFS
Ether dst:OFS
Ether type:IP
Ether type:IP
VLAN id:0
VLAN id:0
VLAN pcp:0
VLAN pcp:0
IP src:SV
IP src:SV
IP dst:OFS
IP dst:OFS
IP proto:17
IP proto:17
IP ToS bits:0
IP ToS bits:0
Tp Src:67
Tp Src:67
Tp Dst:68
Tp Dst:68
In_port:SV Side
In_port:SV Side
Ether src:SV
Ether src:SV
Ether dst:OFS
Ether dst:OFS
Ether type:IP
Ether type:IP
VLAN id:0
VLAN id:0
VLAN pcp:0
VLAN pcp:0
IP src:SV
IP src:SV
IP dst:Internet
IP dst:Internet
IP proto:6
IP proto:6
IP ToS bits:0
IP ToS bits:0
Tp Src:80
Tp Src:80
Tp Dst:xxxxx
Tp Dst:xxxxx
DHCPSVWeb proxy
In Segment B
DHCPSVWeb proxy
In Segment B
FirewallFirewallDHCP ClientWeb BrowserIn Segment A
DHCP ClientWeb BrowserIn Segment A
DHCP
DHCP
DNSDNS
WebWeb
SMBSMBWebWebDNSDNS
To And From The InternetTo And From The InternetTo And From The ServerTo And From The Server
OFSOFSオフィス LANは色々な通信が飛び交う…オフィス LANは色々な通信が飛び交う…
動作の仕組み
転送処理のルール(とエントリの設計) リアクティブ型エントリを設計する際の注意点・やるべきこと
通信の種類の整理 HWSWは、TCAMが小さい。「冗長なエントリ」は可能な限り集約。
ほかのエントリとマッチングフィールドが重複しないように注意する。 HW処理からCPU処理に切替わると、驚くほどパフォーマンス悪くなるよ。
フローの優先度。
…だとおもいます。
12
サーバからインターネット向けのWeb通信 と サーバからDHCPクライアント向けのDHCP通信の比較サーバからインターネット向けのWeb通信 と サーバからDHCPクライアント向けのDHCP通信の比較
DHCP
DHCP
WebWeb
In_port:SV Side
In_port:SV Side
Ether src:SV
Ether src:SV
Ether dst:OFS
Ether dst:OFS
Ether type:IP
Ether type:IP
VLAN id:0
VLAN id:0
VLAN pcp:0
VLAN pcp:0
IP src:SV
IP src:SV
IP dst:OFS
IP dst:OFS
IP proto:17
IP proto:17
IP ToS bits:0
IP ToS bits:0
Tp Src:67
Tp Src:67
Tp Dst:68
Tp Dst:68
In_port:SV Side
In_port:SV Side
Ether src:SV
Ether src:SV
Ether dst:OFS
Ether dst:OFS
Ether type:IP
Ether type:IP
VLAN id:0
VLAN id:0
VLAN pcp:0
VLAN pcp:0
IP src:SV
IP src:SV
IP dst:Internet
IP dst:Internet
IP proto:6
IP proto:6
IP ToS bits:0
IP ToS bits:0
Tp Src: xxxxx
Tp Src: xxxxx
Tp Dst:80
Tp Dst:80
アクションが異なるほかのエントリと被る可能性がないフィールド1つ使う。たとえば、 IP dst。アクションが異なるほかのエントリと被る可能性がないフィールド1つ使う。たとえば、 IP dst。
動作の仕組み
DHCPリレーエージェント① …Racketというライブラリ
Message.dataから必要な値を取得して、 Racketにわたして、 パケット生成 ( 赤まるを書き換え )・ Packet_out。「ほぼ」これだけ。
13
n.layers[5] = Racket::L5::BOOTP.newn.layers[5].type = typen.layers[5].hwtype = hwtypen.layers[5].hops = 0n.layers[5].id = tidn.layers[5].secsn.layers[5].flagsn.layers[5].cip = cipn.layers[5].yip = yipn.layers[5].sip = sipn.layers[5].gip = gi_addrn.layers[5].chaddr = macn.layers[5].server = niln.layers[5].file = nil
n.layers[5].fix! payload
n.layers[4].payload = n.layers[5]n.layers[4].fix!(n.layers[3].src_ip, n.layers[3].dst_ip)n.layers[4].payload = ""
frame = ether_h << n.pack
return frame + message.data[-1, 1]
動作の仕組み
DHCPリレーエージェント② …Packet_Inの処理のかきかた。
14
if message.udp_src_port == 68/*仮に、奇数ポートと偶数ポートでアドレス払い出しを替える場合 */ port = ( message.in_port ).modulo(2) if port == 1 gip_addr = "192.168.80.254" else gip_addr = "192.168.81.254“ end data = rewrite_dhcp message, gip_addr
actions = []/*ながいので 省略。ここはブロードキャストをユニキャストに変更する為のアクション */ send_packet_out( dpid, :actions => actions, :data => data ) send_flow_mod_add( dpid, :match => ExactMatch.from( message ), :actions=>SendOutPort.new(:port=>OFPP_CONTROLLER, :max_len=>10000), :priority => 65535, :idle_timeout => 60 )end
DHCPリレーは、フィールドの書き換えを伴う為、コントローラに Packet_Inさせる為の Flowを追加する。デフォルトのmax_lenは 128Byte、 DHCPは 128Byteよりも大きいので、Max_lenを指定してあげる。
動作の仕組み
ブロードキャスト転送 ローカルブロードキャストと DHCPのみ、転送を許可
DHCP だけは、 Packet_inさせてあげる それ以外のブロードキャストは Dropさせてやる
フローを書き込んでおいて、二度と Packet_Inさせないようにする。
15
・ Flow Entrycookie=0x185b56, duration=57.864s, priority=10000,ip,in_port=9,dl_dst=ff:ff:ff:ff:ff:ff,nw_dst=192.168.83.255 actions=output:10,output:6,output:7,output:8,output:12
cookie=0x186b9b, duration=41.695s, priority=65535,udp,dl_dst=ff:ff:ff:ff:ff:ff,tp_src=68 actions=CONTROLLER:10000
導入後のフローテーブルの状態
スイッチのフローエントリー数 最大でも、凡そ 600フロー。
この程度なら、まだ余裕※です。 増減の時間帯に規則性がある
※出典: Pica8社製 Prontoのベンチマークでは、公称最大エントリ数 2048。http://www.toyo.co.jp/page.jsp?id=18304
16
性能について
LAN内通信(ファイル転送※1) なぜかアップロードのほうが速度がはやい…※2
※1稼働中なので iperfできないのです※2端末とサーバのディスク書き込み速度のせいか?
http://www.musen-lan.com/speed/
17
Upload Download
=456Mbps =240Mbps
性能について
インターネット向け(下り)…
http://www.musen-lan.com/speed/
18
性能について
インターネット向け(上り)…
http://www.musen-lan.com/speed/
19
性能について
コントローラの CPU 負荷とメモリ使用率 全時間帯でメモリは 2.5%(51MB)
利用可能メモリ: 2G
全時間帯で CPUは 30% 程度で稼働中… Intel(R) Xeon(R)2.4Ghz*2core
20
まとめなど
21
小規模ですが、 Rubyコードでも性能面では全く問題なし! もっと小さなノート PCでもこの規模であれば、きっと大丈夫。かも
サーバのスペックなどいろいろベースはできたはず。
スループット、文句なしに実用的。 もちろん、実装次第。今回は、 Trema(Ruby)+HWスイッチの構成。
やっぱり、動的に ACLを書くような GUIツールがほしい。 これは、べつの件で開発中。
CLI だけなら(割と)簡単な方法あります!かっこいい GUIもつくってます!
今後の OpenFlowスイッチ開発に期待したいです。 おそらく、大きな NWや使いかたによっては、絶対に TCAMの容量が足りなくなる…
小さい規模の NWに GE48ポートは、すこしオーバースペック…
SDNなみなさま、小さな NWで OpenFlow。どう思います?
まとめなど
22
質問?
私たちは、 Interop 2013に出展します。