22
2013 年 4 年 年年年年年年年年年年年年年年年年年年 年年 Trema Trema ででででででででででででで ででででででで LAN LAN

Tremaで構築!中小企業の社内LAN #Tremaday 120419

  • Upload
    -

  • View
    2.906

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Tremaで構築!中小企業の社内LAN #Tremaday 120419

2013年 4月

株式会社エーピーコミュニケーションズ:近藤

TremaTremaで構築!で構築!

中小企業の社内中小企業の社内 LANLAN

Page 2: Tremaで構築!中小企業の社内LAN #Tremaday 120419

自己紹介

エーピーコミュニケーションズという会社で働いています。 中小規模の Sierでネットワーク、サーバ、開発をやっています。

でも、私は“フツー“のネットワークエンジニアです。 プログラミングは、趣味でも仕事でもやったことありませんでした

2

Page 3: Tremaで構築!中小企業の社内LAN #Tremaday 120419

今日の目的

社内 LANを Trema+Pica8を使って NW更改した話をします、 Trema.0.3.14 Pica8 Pronto3290(PicOS1.6.1)

Tremaユーザー的な視点で。

そして、地味です。 GUIの実装はしていません。

要はレイヤ 3までのはなしです。

3

Page 4: Tremaで構築!中小企業の社内LAN #Tremaday 120419

目次

社内 LANの構成

動作の仕組みなど

導入後のフローテーブルの状態

性能について

まとめ

4

Page 5: Tremaで構築!中小企業の社内LAN #Tremaday 120419

社内 LANの構成

5

規模と構成(既存) 規模

クライアント :30台(色々な部門)

検証用 SV:40台(仮想&物理)

ファイルサーバ :1台

プリンタ:1台

無線 AP:1台

Page 6: Tremaで構築!中小企業の社内LAN #Tremaday 120419

規模と構成(既存)(続き) 超概略構成

すべてのホストが一つのセグメント。

ちょうど、社内LAN更改の話が出たので、

社内 LANの構成

6

Hub

L2SW

FW

…となった訳です

私の上司

Page 7: Tremaで構築!中小企業の社内LAN #Tremaday 120419

社内 LANの構成

7

移行後 OpenFlow スイッチは物理的な HW*1台

実は、フルメッシュでも動作。経路切替もできます。

スイッチが全セグメントを集約する

各部門ごとに別のセグメントへ移動アドレスのアサインはDHCPをつかう

ブラウジングは、WebProxy経由

一部通信制限あり(コードにベタ書き…)

           …という感じ。です

Page 8: Tremaで構築!中小企業の社内LAN #Tremaday 120419

社内 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という特性上リアクティブ型です。

Page 9: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

このスクリプトでできること LLDPのトポロジ管理

CapabilityTLVで簡単な接続機器識別おまけ:トポロジー描画

フルメッシュ・シングル構成での L3ルーティングと L2スイッチング

DHCPリレーエージェント

ARPの返答と L2的な透過

ブロードキャスト /マルチキャスト制限

経路切り替え

9

Page 10: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

転送処理のルール(とエントリの優先度) ARP・ LLDPのような特殊なやつは常に、 Packet_Inで処理

同じセグメント間の ARPであれば、 Flowで通過させてあげる

DHCPパケットは常に、 Packet_Inで処理コントローラで、 DHCPリレーをやらせる

DHCPフィールドをいじる必要がある(後述)

そのほかの IPパケット同じセグメント間通信異なるセグメントへの通信 Internetへの通信

※例外はあるが、基本的にリアクティブにフローを学習

10

Page 11: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

転送処理のルール(とエントリの設計)

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は色々な通信が飛び交う…

Page 12: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

転送処理のルール(とエントリの設計) リアクティブ型エントリを設計する際の注意点・やるべきこと

通信の種類の整理 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。

Page 13: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

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]

Page 14: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

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を指定してあげる。

Page 15: Tremaで構築!中小企業の社内LAN #Tremaday 120419

動作の仕組み

ブロードキャスト転送 ローカルブロードキャストと 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

Page 16: Tremaで構築!中小企業の社内LAN #Tremaday 120419

導入後のフローテーブルの状態

スイッチのフローエントリー数 最大でも、凡そ 600フロー。

この程度なら、まだ余裕※です。 増減の時間帯に規則性がある

※出典: Pica8社製 Prontoのベンチマークでは、公称最大エントリ数 2048。http://www.toyo.co.jp/page.jsp?id=18304

16

Page 17: Tremaで構築!中小企業の社内LAN #Tremaday 120419

性能について

LAN内通信(ファイル転送※1) なぜかアップロードのほうが速度がはやい…※2

※1稼働中なので iperfできないのです※2端末とサーバのディスク書き込み速度のせいか?

http://www.musen-lan.com/speed/

17

Upload Download

=456Mbps =240Mbps

Page 18: Tremaで構築!中小企業の社内LAN #Tremaday 120419

性能について

インターネット向け(下り)…

http://www.musen-lan.com/speed/

18

Page 19: Tremaで構築!中小企業の社内LAN #Tremaday 120419

性能について

インターネット向け(上り)…

http://www.musen-lan.com/speed/

19

Page 20: Tremaで構築!中小企業の社内LAN #Tremaday 120419

性能について

コントローラの CPU 負荷とメモリ使用率 全時間帯でメモリは 2.5%(51MB)

利用可能メモリ: 2G

全時間帯で CPUは 30% 程度で稼働中… Intel(R) Xeon(R)2.4Ghz*2core

20

Page 21: Tremaで構築!中小企業の社内LAN #Tremaday 120419

まとめなど

21

小規模ですが、 Rubyコードでも性能面では全く問題なし! もっと小さなノート PCでもこの規模であれば、きっと大丈夫。かも

サーバのスペックなどいろいろベースはできたはず。

スループット、文句なしに実用的。 もちろん、実装次第。今回は、 Trema(Ruby)+HWスイッチの構成。

やっぱり、動的に ACLを書くような GUIツールがほしい。 これは、べつの件で開発中。

CLI だけなら(割と)簡単な方法あります!かっこいい GUIもつくってます!

今後の OpenFlowスイッチ開発に期待したいです。 おそらく、大きな NWや使いかたによっては、絶対に TCAMの容量が足りなくなる…

小さい規模の NWに GE48ポートは、すこしオーバースペック…

SDNなみなさま、小さな NWで OpenFlow。どう思います?

Page 22: Tremaで構築!中小企業の社内LAN #Tremaday 120419

まとめなど

22

              質問?

    私たちは、 Interop 2013に出展します。