透過 L2 BRIDGE NAT

Preview:

Citation preview

透過 L2 BRIDGE NAT@H-OTTER

ICTSC6

自己紹介 (軽く)Twitter: @_h_otter_

電気通信大学MMA

CTF難しい…

皆さん…

は?

NAT挟んでるのかな?

謎の挙動HOP増えない TRACEROUTE

運営において大変なこと…

運営において大変なこと…

プロビジョニングとオーケストレーション!!

プロビジョニングとオーケストレーション!!

サーバーをチーム分展開することが死ぬほど大変

サーバー同士が通信するようなものだとIPをハードコードする必要があり、展開後書き換える必要がある

プロビジョニングとオーケストレーション!!

Client: 10.1.0.10 Server: 10.1.0.11

Team 1

Client: 10.2.0.10 Server: 10.2.0.11

Team 2

・・・

同じ環境を展開するが、IPなどは変更しなければならない

面倒くさい!

面倒くさい!

⇒ NATを挟もう!!

NATを挟もう!!

Client: 192.168.0.10 Server: 192.168.0.11

Team 1

Client: 192.168.0.10 Server: 192.168.0.11

Team 2

・・・

完全に同じ環境を展開できる!

Team 1: 10.1.0.10

Team 2: 10.2.0.10

NAT

ここまでは普通

要件定義1チーム当たり20VLAN程度をさばく⇒ 20 * 15 = 300VLAN!!

1チーム当たり1つNATルーターを置ければいいが、そんなものはない

Routing はL3SWに任せてトラフィックをしっかり確保したい

Linuxサーバーで処理をすれば柔軟にできるんじゃない?

いける!ブリッジインターフェイスを作成

VLANをもとにチームIDを推定し、IPアドレスを相互に変換する (static NAT)

ARPを正しく処理すればいけるだろ!

Team ID: 1VLAN ID: 101

192.168.0.1

Team ID: 1VLAN ID: 151

10.1.0.1

Team ID: 2VLAN ID: 201

192.168.0.1

Team ID: 2VLAN ID: 251

10.2.0.1

iptables結論から言うとダメ

VLANをそれぞれ処理するには仮想インターフェイスを持つ必要があり、300個のVLANを処理することは難しい

Iptablesは結局 L3の処理しかいじれない

L2まで下りればVLANを柔軟に処理をできる

netfilter hookLinuxのネットワークに関するイベントをフックする機構

IptablesはnetfilterのL3のイベントをパックしたものといえる

Linuxが処理をできるすべてのネットワークについて干渉できる

netfilter hookLinuxのネットワークに関するイベントをフックする機構

IptablesはnetfilterのL3のイベントをパックしたものといえる

Linuxが処理をできるすべてのネットワークについて干渉できる

_人人人人人人人人_> Kernel Module < ̄Y^Y^Y^Y^Y^Y^Y ̄

大変だったこと

ARP tables

Switch tables

Bridge table

Checksum

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

SRC IP: 10.1.0.2DEST IP: 10.1.0.1

SRC HW: ADEST HW: broadcast

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 10.1.0.2DEST IP: 10.1.0.1

SRC HW: ADEST HW: broadcast

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

SRC IP: 10.1.0.2DEST IP: 10.1.0.1

SRC HW: ADEST HW: broadcast

ここで、VLANが同じだとL3SWのVLAN100のmacテーブルが汚れてしまい、直接HW: Bへ通信されてしまう

ARP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

SRC IP: 10.1.0.2DEST IP: 10.1.0.1

SRC HW: ADEST HW: broadcast

L3SWがごみパケットを送信して、flooding することも…

IP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

TCP, UDP

L3SW

IP: 192.168.0.2HW: A

IP: 10.1.0.1HW: B

VLAN100VLAN150 (trunk) VLAN150VLAN100 (trunk)

SRC IP: 192.168.0.2DEST IP: 192.168.0.1

SRC HW: ADEST HW: broadcast

SRC IP: 10.1.0.2DEST IP: 10.1.0.1

SRC HW: ADEST HW: broadcast

TCP, UDP checksumが書き換わってしまい、通信が失敗する

しんどかった…

スペック

帯域:約400Mbps (NIC: 1Gbps * 2)

レイテンシ: 約0.5 msec

スペック

帯域:約400Mbps (NIC: 1Gbps * 2)

レイテンシ:約0.5 msec

@a_r_g_vの発表

https://goo.gl/sTgxnA

透過 L2 BRIDGE NAT@H-OTTER, @A_R_G_V

ICTSC6

Recommended