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

Post on 20-Jun-2015

2.906 views 2 download

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

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に出展します。