หน้า 1 จากทั้งหมด 2

เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 15 ธ.ค. 2009 23:59
โดย voip4share
มาดูเน็ตเวอร์คไดอะแกรมกันครับว่า วาง Asterisk ไว้หลัง NAT Device นั้นเขาวางไว้ตรงไหนกัน
asterisk_behind_nat.png
Asterisk Behind NAT
asterisk_behind_nat.png (43.16 KiB) เปิดดู 19001 ครั้ง

จากรูปนะครับ มีติดตั้ง Asterisk ไว้ในวงแลนของออฟฟิศ (จุดประสงค์เพื่อต้องการประหยัดเงินไม่ต้องเสียค่าเช่าโคโล หรือส่วนใหญ่ใช้งานโทรกันภายในออฟฟิศ) อุปกรณ์ VoIP ที่นำมาใช้รีจิสเตอร์ก็ติดตั้งไว้ในออฟฟิศ ในออฟฟิศใช้ไอพีปลอมหรือที่เรียกว่าไพรเวทไอพี (Private IP) วง 192.168.1.x โดยที่ไปไอพีขาแลนของเร้าท์เตอร์คือ 192.168.1.1 ทำหน้าที่เป็นเกตเวย์ให้วงแลนด้วย ส่วน Asterisk มีไอพีเป็น 192.168.1.254

ออฟฟิศมีต่ออินเตอร์เน็ตด้วยโดยต่อแบบ ADSL ธรรมดาๆ แต่เนื่องจากเป็นออฟฟิศไม่ใหญ่มากจึงไม่มีงบประมาณพอที่จะเช่าวงจรอินเตอร์เน็ตแบบลีสไลน์ (Leased Line) หรือเอ็มพีแอลเอส (MPLS) ดังนั้นเมื่อเชื่อมต่ออินเตอร์เน็ต ขา WAN ของเร้าท์เตอร์จึงได้ไอพีจริง (Public IP) แบบสุ่ม (Dynamic) หมายความว่าทุกครั้งที่ลิ้งค์ดาวน์หรือปิดเปิดเร้าท์เตอร์ใหม่ ไอพีขาแวนจะเปลี่ยนไป

เมื่ออุปกรณ์ภายในวงแลนต้องการออกสู่อินเตอร์เน็ต ข้อมูลที่ส่งออกมาจะไหลไปที่ ADSL Router (ผมขอเรียกว่า เร้าท์เตอร์ นะครับ) ต่อจากนั้นเร้าท์เตอร์จะทำการแปลงหมายเลขไอพีแอดเดรสของเครื่องที่ส่งมา ซึ่งอยู่ในส่วนที่เรียกว่า เฮดเดอร์ ของข้อมูล ให้กลายเป็นไอพีของพอร์ตแวนก่อนและแปลงหมายเลขพอร์ตซึ่งก็มีระบุไว้ในเฮดเดอร์อีกเช่นเดียวกัน โดยเร้าท์เตอร์จะสุ่มหมายเลขพอร์ตขึ้นมาใช้เองซึ่งจะไม่ซ้ำ จากนั้นจึงส่งออกไปที่อินเตอร์เน็ต และผู้ให้บริการอินเตอร์เน็ตจะส่งต่อเพื่อไปให้ถึงจุดหมายปลายทาง
nat_process.png
NAT Processing
nat_process.png (45.69 KiB) เปิดดู 19000 ครั้ง


กระบวนการแปลงหมายเลขไอพีแอดเดรสต้นทางและหมายเลขพอร์ตของเร้าท์เตอร์นี้ เราเรียกว่า "NAT" ย่อมาจาก Network Address Translation" และเราเรียกอุปกรณ์ที่ทำหน้าที่นี้ว่า "NAT Device" ตัวอย่างของ NAT Device ที่เห็นได้ง่ายที่สุดและเจอแทบทุกวันก็คือ ADSL Router นั่นเอง

เมื่อปลายทางส่งข้อมูลกลับคืนมา เร้าท์เตอร์ก็จะแปลงหมายเลขไอพีแอดเดรสและหมายเลขพอร์ตให้ โดยเร้าท์เตอร์มีข้อมูลอยู่แล้วว่าต้องแปลงเป็นอะไร เพราะมันจำไว้ตั้งแต่ตอนที่เปลี่ยนก่อนส่งออกไปแล้ว ข้อมูลก็จะส่งกลับมายังเครื่องต้นทางได้อย่างถูกต้อง

การทำงานผ่านอุปกรณ์ NAT จะไม่มีปัญหาถ้าเครื่องต้นทางที่เริ่มต้นส่งข้อมูลเป็นเครื่องที่อยู่ใน "วงแลน" เพราะว่าเร้าท์เตอร์มันรู้ว่า "ส่งมาจากไหน" และจะ "ส่งไปไหน" มันจึงแปลงไอพีแอดเดรสและพอร์ตกลับไปกลับมาได้อย่างถูกต้อง

แต่ถ้าเครื่องที่เริ่มต้นส่งข้อมูลเป็นเครื่องในอินเตอร์เน็ตส่งข้อมูลมายังวงแลน เร้าท์เตอร์จะบล๊อกข้อมูลไว้ เพราะมันไม่รู้ว่ามันต้องส่งต่อไปให้เครื่องไหนในวงแลน ยกเว้นได้มีการเซ็ต Port Forwarding ไว้บนตัวเร้าท์เตอร์ ซึ่งเร้าท์เตอร์จะแปลงและส่งข้อมูลไปยังไอพีแอดเดรสของเครื่องที่ระบุไว้ในคำสั่ง Port Forward
nat_port_forwarding.png
Packets Flow
nat_port_forwarding.png (53.91 KiB) เปิดดู 18998 ครั้ง


หมายเหตุ
1. การเชื่อมต่ออินเตอร์เน็ตแบบ Leased Line หรือ MPLS ปกติจะได้ไอพีจริงมากลุ่มหนึ่ง อาจจะได้ 8 (ใช้ได้จริงแค่ 6), 16 (ใช้ได้จริงแค่ 14), 32 (ใช้ได้จริงแค่ 30) เป็นต้น เราสามารถเอาไอพีเหล่านี้มาใช้กับเครื่องในวงแลนที่สำคัญๆ หรือทุกเครื่องก็ได้ถ้ามีไอพีมากพอ แต่อัตราค่าบริการจะแพงมากเมื่อเทียบกับอินเตอร์เน็ตแบบธรรมดาๆที่ไม่ฟิกซ์ไอพี
เครื่องที่เซ็ตไอพีจริงให้เวลาออกเน็ตจะไม่ได้ผ่านการแปลงไอพีแอดเดรสและพอร์ต เครื่องเหล่านี้สามารถเชื่อมต่ออินเตอร์เน็ตได้โดยตรงและเครื่องที่อยู่ในอินเตอร์เน็ตก็สามารถเชื่อมต่อมาที่เครื่องนี้ได้โดยตรง เช่นเดียวกัน

2. การเชื่อมต่ออินเตอร์เน็ตแบบที่ฟิกซ์ไอพีแต่มีแค่ไอพีเดียว ทุกเครื่องที่อยู่ในแลนจะต้องถูก NAT

บทความที่เกี่ยวข้อง
เทคนิคการตรวจสอบและแก้ไขปัญหาไม่สามารถโทรหากันได้บน Elastix เมื่อ Net ดาวน์

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 16 ธ.ค. 2009 15:09
โดย voip4share
มาดูพอร์ตที่ Asterisk ใช้ ทั้งที่เป็น Signaling และ RTP Port ครับ

ถึงแม้ว่าเราจะติดตั้ง Asterisk ไว้ตามรูปนั้นก็ตาม เราไม่ต้องกังวลไปครับว่ามันจะใช้งานไม่ได้ตราบใดที่อุปกรณ์ VoIP ยังอยู่ในวงแลนเดียวกับเซอร์เวอร์ ก็ต้องใช้งานได้อยู่แล้ว ถ้าเซ็ตไม่ผิดพลาด :D

แต่ถ้าอุปกรณ์ VoIP อยู่ในอินเตอร์เน็ตต้องการรีจิสเตอร์มาที่ Asterisk และสื่อสารกับอุปกรณ์ VoIP อื่นๆในวงแลน ปัญหาจะเกิดขึ้นตามมาทันทีเลยครับ อย่างน้อยๆก็มีปัญหาแรกก่อนเลยได้แก่ รีจิสเตอร์ไม่ได้และปัญหาต่อมาคือโทรแล้วไม่ได้ยินเสียง ที่เป็นเช่นนี้เพราะว่า เมื่อเครื่องในอินเตอร์เน็ตมันรีจิสเตอร์เข้ามา (สมมติว่ารู้ไอพีของเร้าท์เตอร์แล้วนะครับ) เนื่องจากเร้าท์เตอร์มันทำงานเป็น NAT อยู่ จึงไม่รู้ว่าจะส่งไปที่ไอพีอะไรในวงแลน จึงดร๊อปทิ้ง ทำให้ข้อมูลรีจิสเตอร์ไปไม่ถึง Asterisk

เราต้องเซ็ต Port Forwarding ที่ตัวเร้าท์เตอร์ครับโดยตั้งเงื่อนไขการเซ็ตว่าถ้ามีการเชื่อมต่อจากอินเตอร์เน็ตมาที่พอร์ต WAN แล้วมีหมายเลขพอร์ตตรงตามที่กำหนดก็ให้ส่งต่อไปที่ไอพีแอดเดรสของ Asterisk เท่านี้เองครับ เวอร์คแน่นอน แต่ปัญหาคือต้องฟอร์เวอร์ดพอร์ตอะไรบ้าง

พอร์ตที่ต้องฟอร์เวอร์ดเพื่อให้ VoIP เวอร์คมีอยู่ 2 ประเภทครับ ได้แก่
1. พอร์ต Signaling พอร์ตนี้มีค่าเป็นเท่าไหร่ จะเป็นโปรโตคอลแบบ TCP หรือ UDP ก็ขึ้นอยู่กับ Signaling ของ VoIP ครับ เช่น SIP ใช้พอร์ต UDP 5060, H.323 ใช้พอร์ต TCP 1720, IAX ใช้พอร์ต UDP 4569 ครับ มีอยู่แบบละพอร์ตเดียวครับแต่สามารถรองรับได้หลายเซสชั่น
2. พอร์ต RTP เป็นพอร์ตสำหรับวอยส์ครับ มีอยู่หลายพอร์ตเพื่อให้เซอร์เวอร์บริการได้มาก รองรับได้หลายๆคอลพร้อมๆกัน จะได้ยินเสียงหรือไม่ได้ยินเสียงก็ขึ้นอยู่กับพอร์ต RTP นี้แหล่ะครับ

ใน Asterisk เรามีวิธีดูพอร์ต Signaling และ RTP ดังนี้ครับ
รีโมทเข้าไปที่ Asterisk ครับ อาจจะใช้ Console หน้าจอ หรือใช้ PuTTY หรือใช้เว็บอินเตอร์เฟสก็ได้ จากนั้นเปิดไฟล์ที่เกี่ยวข้องขึ้นมาดู ดังนี้ครับ ผมจะแนะนำวิธีใช้ PuTTY นะครับ เพราะผมสะดวกกว่าวิธีอื่น

รูปภาพ

1. วิธีดูพอร์ต Signaling
ที่พร้อมท์ของ CentOS ตามรูปข้างบน เปลี่ยนโฟลเดอร์ไปที่ "/etc/asterisk" ครับ โดยพิมพ์คำสั่ง cd /etc/asterisk (เว้นวรรคระหว่าง cd และ /etc/asterisk ด้วยนะครับ) แล้วกดปุ่ม enter
putty-asterisk_small.png
Change Folder to /etc/asterisk
putty-asterisk_small.png (13.18 KiB) เปิดดู 18995 ครั้ง

1.1 ดูพอร์ต Signaling ของโปรโตคอล IAX ดังนี้ครับ
พิมพ์คำสั่ง cat iax.conf | more แล้วกด enter ครับ (ผมใช้ ออปชั่น | more ต่อท้ายคำสั่งก็เพื่อให้แสดงทีละหน้าครับ จะได้ดูง่ายๆ)
putty_iax.png
Showing IAX Signaling Port
putty_iax.png (27.61 KiB) เปิดดู 18995 ครั้ง

ดูบรรทัด "bindport=4569" ครับ หมายเลข 4569 คือหมายเลขพอร์ตของ IAX ครับ

กดปุ่ม "q" เพื่อออกจากคำสั่งครับ กลับมาสู่พร้อมท์คำสั่งอีกครั้งหนึ่ง

1.2 ดูพอร์ต Signaling ของโปรโตคอล SIP ดังนี้ครับ
พิมพ์คำสั่ง cat sip.conf | more แล้วกด enter ครับ (ผมใช้ ออปชั่น | more ต่อท้ายคำสั่งก็เพื่อให้แสดงทีละหน้าครับ จะได้ดูง่ายๆ)
putty_sip_small.png
Showing SIP Signaling Port
putty_sip_small.png (21.67 KiB) เปิดดู 18995 ครั้ง

ดูบรรทัด "udpbindaddr=0.0.0.0:5060" ซึ่ง 0.0.0.0 คือไอพีแอดเดรสทุกไอพีที่อยู่ในเครื่อง เช่น ไอพีของการ์ดแลน ส่วน 5060 คือหมายเลขพอร์ตครับ เป็นโปรโตคอล UDP

กดปุ่ม "q" เพื่อออกจากคำสั่ง กลับมาสู่พร้อมคำสั่งอีกครั้งหนึ่ง

1.3 ดูพอร์ต RTP
พิมพ์คำสั่ง cat rtp.conf แล้วกด enter ครับ
putty_rtp.png
Asterisk RTP Ports
putty_rtp.png (26.6 KiB) เปิดดู 18995 ครั้ง

บรรทัด "rtpstart=10000" คือพอร์ตเริ่มต้นที่ 10000 ครับ ส่วนบรรทัด "rtpend=30000" เป็นพอร์ตสิ้นสุดที่ 30000 ครับ

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 16 ธ.ค. 2009 16:42
โดย voip4share
มาเซ็ตพอร์ตฟอร์เวอร์ดที่เร้าท์เตอร์กันครับ

จากหัวข้อที่ผ่านมาเราก็ได้รู้วิธีการเข้าไปเช็คพอร์ตต่างๆบน Asterisk แล้วนะครับทั้ง Signaling และ RTP ต่อไปเราจะมาฟอร์เวอร์ดพอร์ตเหล่านี้บนตัวเร้าท์เตอร์ เพื่อที่ว่าจะให้เร้าท์เตอร์ฟอร์เวอร์ดข้อมูลที่เข้ามาจากอินเตอร์เน็ตไปยัง Asterisk

วิธีการเซ็ตฟอร์เวอร์ดก็ขึ้นอยู่ที่เร้าท์เตอร์แต่ละยี่ห้อครับ แต่หลักการจะเหมือนกัน ดังต่อไปนี้

protocol=udp
public port range = 5060 - 5060
local port range = 5060 - 5060
local ip = 192.168.1.254

protocol = udp
public port range = 4569 - 4569
local port range = 4569 - 4569
local ip = 192.168.1.254

protocol = udp
public port range = 10000 - 30000
local port range = 10000 - 30000
local ip = 192.168.1.254

เร้าท์เตอร์บางรุ่นอาจจะเซ็ตพอร์ตเป็นช่วงกว้างๆไม่ได้ แต่ส่วนมากจะเซ็ตได้ ถ้าเซ็ตพอร์ตฟอร์เวอร์ดได้สำเร็จรับรองว่าเวอร์คแน่นอนครับ

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 16 ธ.ค. 2009 16:59
โดย voip4share
เอาเร้าท์เตอร์ไปรีจิสเตอร์กับผู้ให้บริการ Dynamic DNS

ในการต่ออินเตอร์เน็ตแบบไม่ฟิกซ์ไอพีนั้น ถ้าไอพีแอดเดรสเปลี่ยนไป ซึ่งตามปกติจะเปลี่ยนวันละครั้งหรือเปลี่ยนทุกครั้งที่ลิ้งค์ดาวน์ จะทำให้เครื่องอุปกรณ์ VoIP ที่อยู่ในอินเตอร์เน็ตไม่สามารถเชื่อมต่อเข้ามาได้ (เพราะไอพีเดิมมันใช้งานไม่ได้แล้ว)

แต่เราก็มีทางแก้ปัญหาดังกล่าว 2 ทางคือ เปลี่ยนไปใช้บริการแบบฟิกซ์ไอพี (แน่นอนว่าค่าบริการอินเตอร์ก็ต้องสูงขึ้น) หรือไปใช้บริการ Dynamic DNS ผมแนะนำวิธีที่ 2 นะครับเพราะไม่มีค่าใช้จ่าย เราต้องคอนฟิกตัวเร้าท์เตอร์ให้ไปลงทะเบียน (หรือเรียกว่าไปอัพเดทไอพีแอดเดรสให้โลกรู้) กับผู้ให้บริการ Dynamic DNS

สมมติว่าลงทะเบียนเป็นชื่อ "kikka.dyndns.org" นะครับ ต่อไปก็เอาชื่อนี้ไปใช้งานต่อครับ ทั้งบนตัว Asterisk และอุปกรณ์ VoIP ในอินเตอร์เน็ต

1. เริ่มที่ตัว Asterisk ก่อนเลยครับ
ต้องเอาชื่อนี้ไปใส่ไว้ในไฟล์ "sip.conf" ดังนี้
เปิดไฟล์ sip.conf ครับ ผมแนะนำให้ใช้โปรแกรม FileZilla ทำจะดีกว่าครับ ง่ายดี
ใช้โปรแกรม FileZilla เชื่อมต่อเข้าไปที่ Asterisk แล้วเปลี่ยนโฟลเดอร์ไปที่ /etc/asterisk ดังรูปต่อไปนี้
sip_config.png
Editing sip.conf
sip_config.png (26.62 KiB) เปิดดู 18993 ครั้ง

เปลี่ยนโฟลเดอร์ไปที่ "/etc/asterisk" จากนั้นหาไฟล์ชื่อ "sip.conf" คลิ๊กขวาที่ชื่อไฟล์แล้วเลือก "View/Edit"
sip_conf_notepad.png
Select Program to Edit
sip_conf_notepad.png (17.2 KiB) เปิดดู 18993 ครั้ง

คลิ๊ก "OK"

แก้ไข (ถ้ามีอยู่แล้ว) หรือเพิ่มบรรทัดต่อไปนี้ (ถ้ายังไม่มี)

externhost=kikka.dyndns.org
externrefresh=10
localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
localnet=172.16.0.0/12
localnet=169.254.0.0/255.255.0.0

แล้วเซฟไฟล์ครับ

จากนั้นทำการรีโหลด Asterisk ใหม่ครับ โดยเข้าไปที่ Asterisk Console แล้วพิมพ์คำสั่ง sip reload แค่นี้ครับ

2. ที่อุปกรณ์ VoIP ในอินเตอร์เน็ต
เวลาจะคอนฟิกไอพีแอดเดรสของ Asterisk ให้ใส่เป็นชื่อแทนครับ ซึ่งก็คือ kikka.dyndns.org

3. อุปกรณ์ VoIP ในวงแลน
คอนฟิกไอพีแอดเดรสของ Asterisk เป็น 192.168.1.254 เหมือนเดิมครับ

มีตัวอย่างให้เห็นจริงๆด้วยนะครับ ที่บทความนี้ Asterisk behind NAT

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 27 ก.พ. 2010 00:06
โดย haeha
สอบถามข้อมูลเพิ่มเติมครับ

บรรทัดนี้ ต้องใส่ให้ครบหมดเลยเหรอครับ

localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
localnet=172.16.0.0/12
localnet=169.254.0.0/255.255.0.0

ถ้า ip ในวงแลนเครื่องผมเป็น 192.168.1.5 ก็ต้องเซตค่าตามนี้ด้วยเหรอครับ

localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
localnet=172.16.0.0/12
localnet=169.254.0.0/255.255.0.0

และอีกคำถาม ค่าที่เซตไว้นี้หมายถึงอะไรเหรอครับ

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 27 ก.พ. 2010 01:15
โดย voip4share
บรรทัด localnet เช่น

localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
localnet=172.16.0.0/12
localnet=169.254.0.0/255.255.0.0

เป็นการบอก Asterisk ให้รู้ว่า IP วงไหนเป็นวง Internal ของมันครับ เพื่อตอนที่มันส่งส่งข้อมูลคุยกับ IP วงนี้มันจะใช้ไอพีขา Private ของมันคุย ไม่อย่างนั้นมันอาจใช้ Public IP แทนซึ่งจะมีปัญหาในการใช้งานครับ ไอพีจะอยู่ที่ Field ต่างๆของ SIP Message ครับ เช่น To, From, Contact

ส่วน IP ที่อยู่นอกเหนือจากที่กำหนดไว้ในบรรทัด localnet เวลา Asterisk มันคุยมันจะคุยด้วยไอพี Public ของมันครับ

ในการใช้งานจริงไม่ต้องใส่ทั้ง 4 บรรทัดก็ได้ครับ ใส่แค่วงแลนที่เราใช้งาน ตัวอย่างไอพีของคุณ haeha คือ 192.168.1.5 เวลาใส่ ใส่แบบนี้ครับ อ่อผมสมมติว่าซับเน็ตมาร์คคือ 255.255.255.0 นะครับ

localnet=192.168.1.0/255.255.255.0

บรรทัดเดียวก็พอ หรือจะใส่ localnet=192.168.0.0/255.255.0.0 ก็ได้ ซึ่งมันจะครอบคลุม 192.168.x.x ทั้งหมด

แต่ถ้าเราวาง Asterisk ไว้ที่โคโล ไอพีมันจะเป็นไอพีจริงอยู่แล้ว ไม่ผ่าน NAT Device บรรทัดพวกนี้ไม่จำเป็นเลยครับ

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 27 ก.พ. 2010 03:20
โดย haeha
ขอบคุณครับ
หายข้องใจและครับ
เห็นจากตัวอย่างให้ใส่
localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
localnet=172.16.0.0/12
localnet=169.254.0.0/255.255.0.0
เลยไม่แน่ใจว่ามีอะไรที่ผมไม่ทราบอีก เลยถามเพื่อความแน่ใจ ^ ^

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 11 ต.ค. 2015 13:15
โดย max0405
อาการ register ผ่านแต่โทรออกไม่ได้ยินเสียง asterisk อยู่หลัง nat ได้ทำการ forword port ดังรูปแล้ว ไม่ทราบเกิดจากอะไรครับ

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 12 ต.ค. 2015 21:38
โดย max0405
ได้แล้วครับเป็นที่ soft phone เล่นเอางง

Re: เทคนิคการติดตั้ง Asterisk ไว้หลัง NAT device

โพสต์โพสต์แล้ว: 12 ต.ค. 2015 21:38
โดย max0405
ได้แล้วครับเป็นที่ soft phone เล่นเอางง