Asterisk その後
STUN というのが実装されていると、NAT に UDP のポートをうまく開けられそうなのだが、現状の Asterisk ではちゃんと実装されていないっぽい。分からないけど。
しょうがないので、一部の UDP ポートを SIP サーバーに固定で振り向けることにした。なんだか気分悪いけど、しようがない。最初、やり方が分からなかったけど、NetBSD ではこんな感じ。実際には、もっと狭い範囲で割り当ててます。(/etc/asterisk/rtp.conf の rtpstart と rtpend で指定できます。)
# cat /etc/ipnat.conf rdr pppoe0 any port 10000-20000 -> 192.168.0.1 port 10000 udp
後記
結局、こんな感じにしています。SIP クライアントも、自分自身(Asterisk)も、それぞれ別々の NAT 配下にいるという前提です。ポイントになりそうな部分だけ書いてます。これで、Twilio の SIP ベータに対して電話かけられています。
[general] udpbindaddr=0.0.0.0 tcpenable=no localnet=192.168.0.0/12 externaddr=1.2.3.4 ; Asterisk サーバーがいる NAT ルーターのグローバルアドレス transport=udp nat=force_rport,comedia directmedia=no [sip-client](!) type=friend context=LocalSets host=dynamic nat=auto_force_rport,auto_comedia