Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

iwashi
November 27, 2022

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
Tweet

More Decks by iwashi

Other Decks in Technology

Transcript

  1. WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC - @iwashi86

    / 岩瀬 義昌 2014/11/26 WebRTC Meetup Tokyo #5
  2. •Attribute  Name Yoshimasa Iwase      @iwashi86  web  iwashi.co •Work  ・Web Engineer@NTT

    Com  ・HTML5 Experts.jp Editor •Recently  ・HTML5 Experts.jpにてWebRTC特集掲載!   
  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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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 エンドポイント(宛先) に拘らないマッピング
  9. 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
  10. 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
  11. 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
  12. 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が異なる)
  13. 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 じゃあ、 同じホストの別ポートに送ると??
  14. 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 同じマッピング! つまり、宛先にのみ依存している
  15. 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
  16. 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つ目のケースで、同じホストで違うポー トに送ると???
  17. 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
  18. 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address

    and Port Dependent アドレスとポートに依存する 2と3は、STUNで自分のNATの外側のアドレス (= Server-Reflexive Address、Mapped-Address)を調べ ても、結局使えない…。
  19. ポート多重(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
  20. ポート多重(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 同じの使っちゃうケース 同じの使っちゃうケース
  21. ちなみに帰り道(復路)は、送信元が大事 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 このアドレスで復路を打ち分ける
  22. 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
  23. 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 まず外側に送る
  24. 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
  25. 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
  26. 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 まず外側に送る
  27. 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
  28. 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)
  29. 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
  30. 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 まず外側に送る
  31. 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 (かなり厳しいフィルタリング)
  32. 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address

    and Port Dependent アドレスとポートに依存する ただし、RFC4787ではセキュリティを気にする場合は、 2. Address DependentもRECOMMENDEDとしている。
  33. 1. Endpoint independent エンドポイントに依存しない 2. Address Dependent アドレスに依存する 3. Address

    and Port Dependent アドレスとポートに依存する WebRTC的に言えば、Mappingとの組み合わせが需要で、 「3. Address and Port Dependent」でもつながるはず
  34. Mapping × Filtering の特性で決まる (特にUDPホールパンチングで通す場合) NAT - Endpoint Independent Mapping -

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

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

    Endpoint Independent Filtering NAT - Endpoint Independent Mapping - Endpoint Independent Filtering いつなんとき 誰のでも挑戦を待つ 猪木的NAT
  37. 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
  38. 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
  39. 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)