Share
Embed
WebRTCの裏側にあるNATの話 / A talk on NAT behind WebRTC
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
iwashi
November 27, 2022
Transcript
102 slides
-
WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC - @iwashi86
/ 岩瀬 義昌 2014/11/26 WebRTC Meetup Tokyo #5 -
•Attribute Name Yoshimasa Iwase @iwashi86 web iwashi.co •Work ・Web Engineer@NTT
Com ・HTML5 Experts.jp Editor •Recently ・HTML5 Experts.jpにてWebRTC特集掲載! -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.1.1.100 1.1.1.200 192.168.1.2 192.168.1.1 1.1.1.1 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 エンドポイント(宛先) に拘らないマッピング -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.1.1.100 1.1.1.200 192.168.1.2 192.168.1.1 1.1.1.1 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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が異なる) -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 同じマッピング! つまり、宛先にのみ依存している -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.1.1.100 1.1.1.200 192.168.1.2 192.168.1.1 1.1.1.1 -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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つ目のケースで、同じホストで違うポー トに送ると??? -
3 種類のマッピング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する 2と3は、STUNで自分のNATの外側のアドレス (= Server-Reflexive Address、Mapped-Address)を調べ ても、結局使えない…。 -
ポート多重(Port Overloading) NAT 1.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 -
ポート多重(Port Overloading) NAT 1.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 -
ポート多重(Port Overloading) NAT 1.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 同じの使っちゃうケース 同じの使っちゃうケース -
ちなみに帰り道(復路)は、送信元が大事 NAT 1.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 NAT 1.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 このアドレスで復路を打ち分ける -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 まず外側に送る -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.1.1.100 1.1.1.200 192.168.1.2 192.168.1.1 1.1.1.1 -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 まず外側に送る -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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) -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.1.1.100 1.1.1.200 192.168.1.2 192.168.1.1 1.1.1.1 -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 まず外側に送る -
3 種類のフィルタリング: 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する
3. Address and Port Dependent アドレスとポートに依存する NAT 1.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 (かなり厳しいフィルタリング) -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する ただし、RFC4787ではセキュリティを気にする場合は、 2. Address DependentもRECOMMENDEDとしている。 -
1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address
and Port Dependent アドレスとポートに依存する WebRTC的に言えば、Mappingとの組み合わせが需要で、 「3. Address and Port Dependent」でもつながるはず -
Mapping × Filtering の特性で決まる (特にUDPホールパンチングで通す場合) NAT - Endpoint Independent Mapping -
Endpoint Independent Filtering NAT - Endpoint Independent Mapping - Endpoint Independent Filtering -
Mapping × Filtering の特性で決まる (特にUDPホールパンチングで通す場合) NAT - Endpoint Independent Mapping -
Endpoint Independent Filtering NAT - Endpoint Independent Mapping - Endpoint Independent Filtering -
Mapping × Filtering の特性で決まる (特にUDPホールパンチングで通す場合) NAT - Endpoint Independent Mapping -
Endpoint Independent Filtering NAT - Endpoint Independent Mapping - Endpoint Independent Filtering いつなんとき 誰のでも挑戦を待つ 猪木的NAT -
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 -
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 -
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) -
P2P通信技術:NAT超え 〜STUNとUPnPと、時々、TURN〜 http://homepage3.nifty.com/toremoro/study/voip2008/NATTrave rsal.pdf 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