webrtcの裏側にあるnatの話 - a talk on nat behind webrtc

102
WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC - @iwashi86 2014/11/26 WebRTC Meetup Tokyo #5

Upload: iwashi86

Post on 08-Jul-2015

4.192 views

Category:

Technology


3 download

DESCRIPTION

WebRTC Meetup Tokyo #5で講演した 「WebRTCの裏側にあるNATの話」の資料です。 ●誤記修正 (2015/1/25追記) P.66  誤 元 1.1.1.200:80  正 元 1.1.1.100:80 P.69  誤 元 1.1.1.200:80  正 元 1.1.1.100:80

TRANSCRIPT

Page 1: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

WebRTCの裏側にあるNATの話- A talk on NAT behind WebRTC -

@iwashi86

2014/11/26 WebRTC Meetup Tokyo #5

Page 2: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

●AttributeName Yoshimasa Iwase

@iwashi86web iwashi.co

●Work

・Web Engineer@NTT Com

・HTML5 Experts.jp Editor

●Recently

・HTML5 Experts.jpにてWebRTC特集掲載!

Page 3: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

本題今日はNATの話

(WebRTCなので特にUDPのNAT)

Page 4: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/4HKJE1

なぜ、いまさらNAT?

Page 5: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Internet

NAT NAT

WebRTCのクライアントはNAT配下に居ることが多い

Page 6: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Internet

NAT NAT

クライアント達は何の工夫も無しには直接通信できない・・・

Dropped…

Page 7: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Internet

NAT NAT

そこで、WebRTCでは主にSTUN※を使って

なんとか穴あけしている

Reached!

STUN STUN

※UDP Hole Punchも

Page 8: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Internet

NAT NAT

でも、ダメなケースもある…(その場合はTURNで中継)

STUN STUN

Dropped…

Page 9: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

そもそも

Page 10: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/b6WaSP

なんで通ったり落ちたりするの?

Page 11: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/oH1mPu

気になる!(技術者的な意味で)

N

A

T

Page 12: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

そんなあなたに良いRFC(4787)

Page 13: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

UDP向けNATの振舞いについて熱く語っているRFC

Page 14: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

あと、Obsoleteだけど3489(Classic STUN)も参考になる

Page 15: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Full Coneとか、Symmetric NATとか、その辺りの用語はこのRFCで登場

(ただし、区分けがちょっと足りない)

Page 16: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

続きはRFCで!

Page 17: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/6n5y3k

が、RFC読むと1分で、こうなる↓

Page 18: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

そこで本トークでは特にWebRTCに関係するNAT振舞い

のエッセンス(12章)を紹介(=RFC 4787をざっくりと)

免責:正確性はRFC原典の用語を参照のこと

Page 19: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/p1Q8WT

Requirement

Page 20: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

RFCの抜粋です

Page 21: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC
Page 22: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

マッピングの話から

Page 23: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 24: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

Page 25: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:192.168.1.2:10000

先:1.1.1.100:80

Page 26: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

Page 27: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.200:80

Page 28: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:1.1.1.1:12345

先:1.1.1.200:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.200:80

Page 29: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:1.1.1.1:12345

先:1.1.1.200:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.200:80

エンドポイント(宛先)

に拘らないマッピング

Page 30: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

Page 31: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

Page 32: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.200:80

Page 33: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.200:80元:1.1.1.1:54321

先:1.1.1.200:80

今回は、同じマッピングじゃない(下図だとPortが異なる)

Page 34: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:8888

じゃあ、同じホストの別ポートに送ると??

Page 35: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:8888

同じマッピング!つまり、宛先にのみ依存している。

元:1.1.1.1:12345

先:1.1.1.100:8888

同じマッピング!つまり、宛先にのみ依存している

Page 36: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

Page 37: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:8888

3つ目のケースで、同じホストで違うポートに送ると???

Page 38: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のマッピング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:8888

違うマッピングができる!

元:1.1.1.1:54321

先:1.1.1.100:8888

Page 39: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/kSFs6b

WebRTC的にイケてるのはどれでしょう?(正確には、P2P的にイケてるのはどれでしょう?)

Page 40: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 41: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 42: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

2と3は、STUNで自分のNATの外側のアドレス(= Server-Reflexive Address、Mapped-Address)を調

べても、結局使えない…。

Page 43: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

なのでRFCも・・・

Page 44: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

MUSTになってる!

Page 45: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Page 46: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

NATはパブリック側(外側)のIPアドレスを複数貯めておける。その貯めたアドレスを使う場合は、

「同じ宛先には同じ送信元アドレス」を使いましょう、ということ。

Page 47: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ポート多重 ダメ・ゼッタイ

Page 48: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ポート多重(Port Overloading)

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.3:10000

先:1.1.1.200:80

192.168.1.3

Page 49: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ポート多重(Port Overloading)

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.3:10000

先:1.1.1.200:80元:1.1.1.1:10000

先:1.1.1.200:80

192.168.1.3

Page 50: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ポート多重(Port Overloading)

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.3:10000

先:1.1.1.200:80元:1.1.1.1:10000

先:1.1.1.200:80

192.168.1.3

同じの使っちゃうケース同じの使っちゃうケース

Page 51: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ちなみに帰り道(復路)は、送信元が大事

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:10000

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:192.168.1.3:10000

先:1.1.1.200:80元:1.1.1.1:10000

先:1.1.1.200:80

192.168.1.3

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.100:80

先:1.1.1.1:10000

元:192.168.1.2:10000

先:1.1.1.100:80

192.168.1.3

往路

復路

元:1.1.1.200:80

先:1.1.1.1:10000このアドレスで復路を打ち分ける

Page 52: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Page 53: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

もともとの送信元ポートが0-1023ならNAT後も0-1023、もともとの送信元ポートが1024-65535ならNAT後も1024-65535、

といったように同じレンジを使うのがRECOMMENDED

Page 54: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

NATするときのポート番号は、Before−>Afterで奇数偶数を同じにしようね ということ。

つまり、もともとのポートが偶数なら、NAT後も偶数ということ。

Page 55: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

マッピングの保持時間は2分以下だとダメだよ。5分以上がオススメで、自由に設定してOK。

ただし、0-1023のウェルノウンポートはIANAに従ってね。

Page 56: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

マッピング更新するトラフィックの向きはアウトバウンド(外向き)のトラフィックがMUST。

インバウンドやってもいいけど、攻撃されちゃうかもね。

Page 57: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

NATによっては、NAT前後のIPレンジが同じことも。例えば、10.0.0.0/Xから10.0.0.0/XのNATもあり得る。

(ご家庭だとあんまり無いけど)

そんなときはには、どっちかで対応すること:(1)内外でアドレスかぶらんように

(2)アドレスがコンフリクト(衝突)してもよしなに翻訳転送してね

Page 58: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

大事!絵!

Page 59: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 60: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

Page 61: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

まず外側に送る

Page 62: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

さっきと宛先が違うホストから来ても通せる

=エンドポイントに依存しない

元:1.1.1.200:80

先:1.1.1.1:12345

Page 63: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

Page 64: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

まず外側に送る

Page 65: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

最初に送ったホストと違うから落ちる

(=アドレスに依存している)

元:1.1.1.200:80

先:1.1.1.1:12345

Page 66: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:1.1.1.200:80

先:1.1.1.1:12345

同じホストからならOK

(上図だと、同じホストで異なるPort)

Page 67: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

Page 68: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

まず外側に送る

Page 69: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

3 種類のフィルタリング:1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

NAT1.1.1.100

1.1.1.200

192.168.1.2

192.168.1.1 1.1.1.1

元:1.1.1.1:12345

先:1.1.1.100:80

元:192.168.1.2:10000

先:1.1.1.100:80

元:1.1.1.200:80

先:1.1.1.1:12345

同じホストでも、ポートが異なるとNG

(かなり厳しいフィルタリング)

Page 70: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/kSFs6b

RFC的にイケてるのはどれでしょう?

(本日2回目)

Page 71: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 72: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

Page 73: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

ただし、RFC4787ではセキュリティを気にする場合は、2. Address DependentもRECOMMENDEDとしている。

Page 74: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

1. Endpoint independent

エンドポイントに依存しない2. Address Dependent

アドレスに依存する3. Address and Port Dependent

アドレスとポートに依存する

WebRTC的に言えば、Mappingとの組み合わせが需要で、「3. Address and Port Dependent」でもつながるはず

Page 75: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Page 76: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ヘアピン接続もサポートしてね!

Page 77: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ヘアピン接続点線のマッピングができている状態で、PC-Aから、PC-BのNAT後のアドレスを指定して、NAT折り返しで接続すること

NATPC-A

192.168.1.1 1.1.1.1

PC-B

送信先アドレスとして外側のアドレスを指定する

のがポイント

Page 78: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ALG(Application Level Gateway)の機能はOFFしてね(例:勝手にペイロードの中身も書き換えないでね)

Page 79: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

好き勝手に動作を変えないでね(deterministic behaviorしてね)

Page 80: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

(力尽きたので)そこまでWebRTCに関係しないので

省略

Page 81: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/4LXLZ2

14個おしまい!(一部ショートカット有り)

Page 82: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

ん?そもそも

Page 83: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/b6WaSP

なんで通ったり落ちたりするの?

Page 84: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NAT

Page 85: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NAT

マッピングが無いので落ちる

Page 86: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NAT

マッピングが無いので落ちる

だが、PC-B向けに穴が開いた(マッピングが出来た)

Page 87: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NAT次に反対向きに打つと今度は疎通OK

Page 88: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NAT次に反対向きに打つと今度は疎通OK

しかも、PC-A

向けの穴が開くということは、

Page 89: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

答えの前にUDPホールパンチング

PC-A PC-B

NAT NATいまなら

一発目の向きも疎通OK

Page 90: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

https://flic.kr/p/b6WaSP

再掲:なんで通ったり落ちたりするの?

Page 91: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

Page 92: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

Page 93: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

Page 94: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filteringいつなんとき

誰のでも挑戦を待つ猪木的NAT

Page 95: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

Page 96: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

Page 97: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Endpoint Independent Mapping

- Endpoint Independent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

NAT

- Address Dependent Mapping

- Address Dependent Filtering

相手が狙うべきアドレスが変わっちゃうから通らない(STUNで調べたアドレスが

NG)

Page 98: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

おまけMiscellaneous Topics

Page 99: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

http://www.netmanias.com/en/?m=view&id=techdocs&no=6065

古いRFCのNAT分類はマッピング×フィルタリングで説明できる

Page 100: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

注今日の話はあくまでRFCの話!ホントの動作は装置依存です!

Page 101: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

参考資料Further Study

Page 102: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC

P2P通信技術:NAT超え 〜STUNとUPnPと、時々、TURN〜http://homepage3.nifty.com/toremoro/study/voip2008/NATTraversal.p

df

NAT技術者にお勧めするRFCとドラフトhttp://toremoro.tea-nifty.com/tomos_hotline/2008/06/natrfc_e2f2.html

P2Pとファイアウォールhttp://homepage3.nifty.com/toremoro/p2p/firewall.html

ISPのNATには何が求められるか?http://www.janog.gr.jp/meeting/janog22/program/day1/data/day1-5-

1_Nishitani.pdf

参考資料:

共存/移行技術とP2P対戦ゲームの相性https://www.janog.gr.jp/meeting/janog30/doc/janog30-v64-pre-stun-

ryosato-02.pdf