UDP Hole Punching
文字通りはUDPの穴開けを意味する。NAT/Firewall越え技術の一つである。
通信モデルは、NAT(a)の内側にエンドポイント(クライアントA)が配置され、同様に別のNAT(b)の内側に相手エンドポイント(クライアントB)が配置される。その他にパブリック・ネットワーク上にサーバSが置かれる。
クライアントAはサーバSとUDP接続し(NATの内側から外側へなので接続可能)、同様にクライアントBとサーバSがUDP接続する。サーバはこのときのクライアントAとクライアントBのトランスポート・アドレス(IPアドレスとポート番号)を記憶する。同時にNAT(A)とNAT(B)はそれぞれNATの内側プライベート・アドレス及びポート番号と外側パブリック・アドレス及びポート番号の対応関係を記憶する。クライアントAからはサーバSに対しクライアントBのトランスポート・アドレスを要求して獲得する。クライアントBも同様にクライアントAのトランスポート・アドレスを獲得する。
この後、クライアントAとクライアントBはそれぞれ相手に対し獲得したトランスポート・アドレス宛てにUDPパケットを送出すると相手側NATを越えて目的のクライアントに到達する。最初UDPパケットが届かなかったとしてもNATにはその記録が残るため逆方向のパケットは通過し、そうすれば元の方向のパケットもNATを通過する。
ただしNATには複数のタイプがあり、この技術が適用できないタイプもあることに注意を要する。なお、この技術はSTUNプロトコルでも使われている。