ไม่รู้จะใช้มุกไหนแล้วครับ
งั้นเอาแบบนี้ ผมเดาว่า
INVITE sip:0863278001@61.90.255.132 SIP/2.0..Via: SIP/2.0/UDP
192.168.0.8:5060;branc
h=z9hG4bK018bdf39;rport..From: "170" <sip:98100006478@61.90.255.132>;tag=as22ab0025.
.To: <sip:0863278001@61.90.255.132>..Contact: <sip:98100006478@
192.168.0.8>
#
U 61.90.255.132:5060 -> 192.168.0.8:5060
SIP/2.0 100 Trying..Via: SIP/2.0/UDP 192.168.0.8:5060;received=
124.157.137.171#
ดูไอพีแอดเดรสที่เป็นสีแดงนะครับ ตอนที่มันอยู่ใน INVITE เป็นไอพีปลอม แต่ตอนที่ True ส่งกลับมาเป็นไอพีจริง 124.157.137.171 ผมเดาเอาว่า (อันนี้เดาจริงๆครับ) มันเช็คไอพีข้างใน SIP Dialog มันไม่ตรงกับไอพีที่อยู่ใน IP Header มันก็เลยไม่ยอม ปกติเวลาผมเทสผมจะใช้เครื่องที่อยู่ในโคโลมันเป็นไอพีจริงทั้งหมด ก็เลยเทสผ่านตลอด
ตอนที่เอา Softphone ลองมันอาจจะมีกลไกช่วยเช่น Stun Server
เอางี้ครับ ลองเพิ่ม 3 บรรทัดต่อไปนี้ในไฟล์ sip.conf เอาไว้ภายใน [general]
localnet=192.168.0.0/255.255.255.0
stunaddr=stun.xten.com:3478
externrefresh=60
ถ้ายังเป็นเหมือนเดิมอีก ก็ให้ลบบรรทัด stunaddr ออก (หรือใส่ ; ไว้หน้าบรรทัด) แล้วใส่บรรทัดต่อไปนี้แทนครับ
externhost=asterisk170.dyndns.org
ชื่อ asterisk170.dyndns.org เป็นชื่อที่เอา ADSL Router ไปลงทะเบียนกับเว็บ
DynDNS.org นะครับ แล้ว Asterisk จะคอยเช็คกับ DNS Server ว่าตอนนี้โฮสต์ asterisk170.dyndns.org ตอนนี้มีไอพีเป็นอะไร แล้วมันก็จะรู้ไอพีขานอกของมัน และเวลามันติดต่อออกไปภายนอกมันก็จะใช้ไอพีนั้นแทน ไม่ได้ใช้ไอพีปลอมเหมือนแต่ก่อน
แต่ถ้ามีไอพีจริงแบบ Fixed เช่น 58.59.60.61 ก็ใส่บรรทัดต่อไปนี้ แทนบรรทัด extenhost ครับ ส่วนบรรทัด externrefresh ไม่ต้องใส่ก็ได้นะครับ
externip=58.59.60.61
เวอร์คๆ