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

    View full-size slide

  2. ●Attribute
     Name Yoshimasa Iwase
         @iwashi86
     web  iwashi.co
    ●Work
     ・Web Engineer@NTT Com
     ・HTML5 Experts.jp Editor
    ●Recently
     ・HTML5 Experts.jpにてWebRTC特集掲載!
      

    View full-size slide

  3. 本題
    今日はNATの話
    (WebRTCなので特にUDPのNAT)

    View full-size slide

  4. https://flic.kr/p/4HKJE1
    なぜ、いまさらNAT?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. Internet
    NAT NAT
    そこで、WebRTCでは主にSTUN※
    を使って
    なんとか穴あけしている
    Reached! ☺
    STUN STUN
    ※UDP Hole Punchも

    View full-size slide

  8. Internet
    NAT NAT
    でも、ダメなケースもある…
    (その場合はTURNで中継)
    STUN STUN
    Dropped…

    View full-size slide

  9. そもそも

    View full-size slide

  10. https://flic.kr/p/b6WaSP
    なんで通ったり
    落ちたりするの?

    View full-size slide

  11. https://flic.kr/p/oH1mPu
    気になる!(技術者的な意味で)
    N
    A
    T

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. Full Coneとか、Symmetric NATとか、
    その辺りの用語はこのRFCで登場
    (ただし、区分けがちょっと足りない)

    View full-size slide

  16. 続きは
    RFCで!

    View full-size slide

  17. https://flic.kr/p/6n5y3k
    が、RFC読むと1分で、こうなる↓

    View full-size slide

  18. そこで本トークでは
    特にWebRTCに関係するNAT振舞いの
    エッセンス(12章)を紹介
    (=RFC 4787をざっくりと)
    免責:正確性はRFC原典の用語を参照のこと

    View full-size slide

  19. https://flic.kr/p/p1Q8WT
    Requirement

    View full-size slide

  20. RFCの抜粋です

    View full-size slide

  21. マッピングの話から

    View full-size slide

  22. 3 種類のマッピング:
    1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

  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

    View full-size slide

  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
    元:192.168.1.2:10000
    先:1.1.1.100:80

    View full-size slide

  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
    元:1.1.1.1:12345
    先:1.1.1.100:80
    元:192.168.1.2:10000
    先:1.1.1.100:80

    View full-size slide

  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
    元:192.168.1.2:10000
    先:1.1.1.200:80

    View full-size slide

  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
    元: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

    View full-size slide

  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
    元: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
    エンドポイント(宛先)
    に拘らないマッピング

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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
    元:192.168.1.2:10000
    先:1.1.1.200:80

    View full-size slide

  32. 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が異なる)

    View full-size slide

  33. 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
    じゃあ、
    同じホストの別ポートに送ると??

    View full-size slide

  34. 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
    同じマッピング!
    つまり、宛先にのみ依存している

    View full-size slide

  35. 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

    View full-size slide

  36. 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つ目のケースで、同じホストで違うポー
    トに送ると???

    View full-size slide

  37. 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

    View full-size slide

  38. https://flic.kr/p/kSFs6b
    WebRTC的にイケてるの
    はどれでしょう?
    (正確には、P2P的にイケてるのはどれでしょう?)

    View full-size slide

  39. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

  40. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

  41. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する
    2と3は、STUNで自分のNATの外側のアドレス
    (= Server-Reflexive Address、Mapped-Address)を調べ
    ても、結局使えない…。

    View full-size slide

  42. なのでRFCも・・・

    View full-size slide

  43. MUSTになってる!

    View full-size slide

  44. NATはパブリック側(外側)のIPアドレスを複数貯めておける。
    その貯めたアドレスを使う場合は、
    「同じ宛先には同じ送信元アドレス」を使いましょう、ということ。

    View full-size slide

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

    View full-size slide

  46. ポート多重(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

    View full-size slide

  47. ポート多重(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

    View full-size slide

  48. ポート多重(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
    同じの使っちゃうケース
    同じの使っちゃうケース

    View full-size slide

  49. ちなみに帰り道(復路)は、送信元が大事
    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
    このアドレスで復路を打ち分ける

    View full-size slide

  50. もともとの送信元ポートが0-1023ならNAT後も0-1023、
    もともとの送信元ポートが1024-65535ならNAT後も1024-65535、
    といったように同じレンジを使うのがRECOMMENDED

    View full-size slide

  51. NATするときのポート番号は、
    Before−>Afterで奇数偶数を同じにしようね ということ。
    つまり、もともとのポートが偶数なら、NAT後も偶数ということ。

    View full-size slide

  52. マッピングの保持時間は2分以下だとダメだよ。
    5分以上がオススメで、自由に設定してOK。
    ただし、0-1023のウェルノウンポートはIANAに従ってね。

    View full-size slide

  53. マッピング更新するトラフィックの向きは
    アウトバウンド(外向き)のトラフィックがMUST。
    インバウンドやってもいいけど、攻撃されちゃうかもね。

    View full-size slide

  54. NATによっては、NAT前後のIPレンジが同じことも。
    例えば、10.0.0.0/Xから10.0.0.0/XのNATもあり得る。
    (ご家庭だとあんまり無いけど)
    そんなときはには、どっちかで対応すること:
    (1)内外でアドレスかぶらんように
    (2)アドレスがコンフリクト(衝突)してもよしなに翻訳転送してね

    View full-size slide

  55. 大事!絵!

    View full-size slide

  56. 3 種類のフィルタリング:
    1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

  57. 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

    View full-size slide

  58. 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
    まず外側に送る

    View full-size slide

  59. 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

    View full-size slide

  60. 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

    View full-size slide

  61. 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
    まず外側に送る

    View full-size slide

  62. 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

    View full-size slide

  63. 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)

    View full-size slide

  64. 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

    View full-size slide

  65. 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
    まず外側に送る

    View full-size slide

  66. 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
    (かなり厳しいフィルタリング)

    View full-size slide

  67. https://flic.kr/p/kSFs6b
    RFC的にイケてるのはど
    れでしょう?
    (本日2回目)

    View full-size slide

  68. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

  69. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する

    View full-size slide

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

    View full-size slide

  71. 1. Endpoint independent
    エンドポイントに依存しない
    2. Address Dependent
    アドレスに依存する
    3. Address and Port Dependent
    アドレスとポートに依存する
    WebRTC的に言えば、Mappingとの組み合わせが需要で、
    「3. Address and Port Dependent」でもつながるはず

    View full-size slide

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

    View full-size slide

  73. ヘアピン接続
     点線のマッピングができている状態で、
     PC-Aから、PC-BのNAT後のアドレスを指定して、
     NAT折り返しで接続すること
    NAT
    PC-A
    192.168.1.1 1.1.1.1
    PC-B
    送信先アドレスとして
    外側のアドレスを指定するのが
    ポイント

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  77. https://flic.kr/p/4LXLZ2
    14個おしまい!
    (一部ショートカット有り)

    View full-size slide

  78. ん?そもそも

    View full-size slide

  79. https://flic.kr/p/b6WaSP
    なんで通ったり
    落ちたりするの?

    View full-size slide

  80. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT

    View full-size slide

  81. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT
    マッピングが無い
    ので落ちる

    View full-size slide

  82. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT
    マッピングが無い
    ので落ちる
    だが、PC-B向け
    に穴が開いた
    (マッピングが出
    来た)

    View full-size slide

  83. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT
    次に反対向きに
    打つと今度は
    疎通OK

    View full-size slide

  84. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT
    次に反対向きに
    打つと今度は
    疎通OK
    しかも、PC-A向
    けの穴が開く
    ということは、

    View full-size slide

  85. 答えの前にUDPホールパンチング
    PC-A PC-B
    NAT NAT
    いまなら
    一発目の向きも
    疎通OK

    View full-size slide

  86. https://flic.kr/p/b6WaSP
    再掲:なんで通ったり
    落ちたりするの?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  90. Mapping × Filtering の特性で決まる
    (特にUDPホールパンチングで通す場合)
    NAT
    - Endpoint Independent Mapping
    - Endpoint Independent Filtering
    NAT
    - Endpoint Independent Mapping
    - Endpoint Independent Filtering
    いつなんとき
    誰のでも挑戦を待つ
    猪木的NAT

    View full-size slide

  91. 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

    View full-size slide

  92. 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

    View full-size slide

  93. 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)

    View full-size slide

  94. おまけ
    Miscellaneous Topics

    View full-size slide

  95. http://www.netmanias.com/en/?m=view&id=techdocs&no=6065
    古いRFCのNAT分類は
    マッピング×フィルタリングで説明できる

    View full-size slide


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

    View full-size slide

  97. 参考資料
    Further Study

    View full-size slide

  98. 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

    View full-size slide