Upload
h-otter
View
119
Download
4
Embed Size (px)
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