webrtcの裏側にあるnatの話 - a talk on nat behind webrtc
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:80TRANSCRIPT
![Page 1: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/2.jpg)
●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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/3.jpg)
本題今日はNATの話
(WebRTCなので特にUDPのNAT)
![Page 4: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/4.jpg)
https://flic.kr/p/4HKJE1
なぜ、いまさらNAT?
![Page 5: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/5.jpg)
Internet
NAT NAT
WebRTCのクライアントはNAT配下に居ることが多い
![Page 6: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/6.jpg)
Internet
NAT NAT
クライアント達は何の工夫も無しには直接通信できない・・・
Dropped…
![Page 7: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/7.jpg)
Internet
NAT NAT
そこで、WebRTCでは主にSTUN※を使って
なんとか穴あけしている
Reached!
STUN STUN
※UDP Hole Punchも
![Page 8: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/8.jpg)
Internet
NAT NAT
でも、ダメなケースもある…(その場合はTURNで中継)
STUN STUN
Dropped…
![Page 9: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/9.jpg)
そもそも
![Page 10: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/10.jpg)
https://flic.kr/p/b6WaSP
なんで通ったり落ちたりするの?
![Page 11: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/11.jpg)
https://flic.kr/p/oH1mPu
気になる!(技術者的な意味で)
N
A
T
![Page 12: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/12.jpg)
そんなあなたに良いRFC(4787)
![Page 13: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/13.jpg)
UDP向けNATの振舞いについて熱く語っているRFC
![Page 14: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/14.jpg)
あと、Obsoleteだけど3489(Classic STUN)も参考になる
![Page 15: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/15.jpg)
Full Coneとか、Symmetric NATとか、その辺りの用語はこのRFCで登場
(ただし、区分けがちょっと足りない)
![Page 16: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/16.jpg)
続きはRFCで!
![Page 17: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/17.jpg)
https://flic.kr/p/6n5y3k
が、RFC読むと1分で、こうなる↓
![Page 18: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/18.jpg)
そこで本トークでは特にWebRTCに関係するNAT振舞い
のエッセンス(12章)を紹介(=RFC 4787をざっくりと)
免責:正確性はRFC原典の用語を参照のこと
![Page 19: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/19.jpg)
https://flic.kr/p/p1Q8WT
Requirement
![Page 20: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/20.jpg)
RFCの抜粋です
![Page 21: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/21.jpg)
![Page 22: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/22.jpg)
マッピングの話から
![Page 23: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/23.jpg)
3 種類のマッピング:1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 24: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/38.jpg)
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://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/39.jpg)
https://flic.kr/p/kSFs6b
WebRTC的にイケてるのはどれでしょう?(正確には、P2P的にイケてるのはどれでしょう?)
![Page 40: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/40.jpg)
1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 41: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/41.jpg)
1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 42: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/43.jpg)
なのでRFCも・・・
![Page 44: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/44.jpg)
MUSTになってる!
![Page 45: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/45.jpg)
次
![Page 46: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/46.jpg)
NATはパブリック側(外側)のIPアドレスを複数貯めておける。その貯めたアドレスを使う場合は、
「同じ宛先には同じ送信元アドレス」を使いましょう、ということ。
![Page 47: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/47.jpg)
ポート多重 ダメ・ゼッタイ
![Page 48: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/48.jpg)
ポート多重(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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/49.jpg)
ポート多重(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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/50.jpg)
ポート多重(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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/51.jpg)
ちなみに帰り道(復路)は、送信元が大事
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/52.jpg)
次
![Page 53: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/53.jpg)
もともとの送信元ポートが0-1023ならNAT後も0-1023、もともとの送信元ポートが1024-65535ならNAT後も1024-65535、
といったように同じレンジを使うのがRECOMMENDED
![Page 54: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/54.jpg)
NATするときのポート番号は、Before−>Afterで奇数偶数を同じにしようね ということ。
つまり、もともとのポートが偶数なら、NAT後も偶数ということ。
![Page 55: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/55.jpg)
マッピングの保持時間は2分以下だとダメだよ。5分以上がオススメで、自由に設定してOK。
ただし、0-1023のウェルノウンポートはIANAに従ってね。
![Page 56: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/56.jpg)
マッピング更新するトラフィックの向きはアウトバウンド(外向き)のトラフィックがMUST。
インバウンドやってもいいけど、攻撃されちゃうかもね。
![Page 57: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/58.jpg)
大事!絵!
![Page 59: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/59.jpg)
3 種類のフィルタリング:1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 60: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/64.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/65.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/67.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/68.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/69.jpg)
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://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/70.jpg)
https://flic.kr/p/kSFs6b
RFC的にイケてるのはどれでしょう?
(本日2回目)
![Page 71: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/71.jpg)
1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 72: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/72.jpg)
1. Endpoint independent
エンドポイントに依存しない2. Address Dependent
アドレスに依存する3. Address and Port Dependent
アドレスとポートに依存する
![Page 73: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/75.jpg)
次
![Page 76: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/76.jpg)
ヘアピン接続もサポートしてね!
![Page 77: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/77.jpg)
ヘアピン接続点線のマッピングができている状態で、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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/78.jpg)
ALG(Application Level Gateway)の機能はOFFしてね(例:勝手にペイロードの中身も書き換えないでね)
![Page 79: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/79.jpg)
好き勝手に動作を変えないでね(deterministic behaviorしてね)
![Page 80: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/80.jpg)
(力尽きたので)そこまでWebRTCに関係しないので
省略
![Page 81: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/81.jpg)
https://flic.kr/p/4LXLZ2
14個おしまい!(一部ショートカット有り)
![Page 82: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/82.jpg)
ん?そもそも
![Page 83: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/83.jpg)
https://flic.kr/p/b6WaSP
なんで通ったり落ちたりするの?
![Page 84: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/84.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NAT
![Page 85: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/85.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NAT
マッピングが無いので落ちる
![Page 86: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/86.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NAT
マッピングが無いので落ちる
だが、PC-B向けに穴が開いた(マッピングが出来た)
![Page 87: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/87.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NAT次に反対向きに打つと今度は疎通OK
![Page 88: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/88.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NAT次に反対向きに打つと今度は疎通OK
しかも、PC-A
向けの穴が開くということは、
![Page 89: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/89.jpg)
答えの前にUDPホールパンチング
PC-A PC-B
NAT NATいまなら
一発目の向きも疎通OK
![Page 90: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/90.jpg)
https://flic.kr/p/b6WaSP
再掲:なんで通ったり落ちたりするの?
![Page 91: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/91.jpg)
Mapping × Filtering の特性で決まる(特にUDPホールパンチングで通す場合)
![Page 92: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/92.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/93.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/94.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/95.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/96.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/97.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/98.jpg)
おまけMiscellaneous Topics
![Page 99: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/99.jpg)
http://www.netmanias.com/en/?m=view&id=techdocs&no=6065
古いRFCのNAT分類はマッピング×フィルタリングで説明できる
![Page 100: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/100.jpg)
注今日の話はあくまでRFCの話!ホントの動作は装置依存です!
![Page 101: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/101.jpg)
参考資料Further Study
![Page 102: WebRTCの裏側にあるNATの話 - A talk on NAT behind WebRTC](https://reader034.vdocuments.net/reader034/viewer/2022042514/559cdd451a28ab94408b47b6/html5/thumbnails/102.jpg)
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