บทความนี้จะมาแนะนำวิธีการ Forward port เพื่อให้สามารถเข้าถึง Network ข้างในบ้าน ร่วมกับ dynamic dns อย่าง No-ip กัน
โดยทั่วไปแล้ว ถ้ามีหากมี request จากข้างนอกเข้ามา จะโดน router กันไว้ก่อน จะไม่สามารถทะลวงเข้าหา local ip เครืองหลัง router ได้ (เหมือนมี Firewall กันไว้อยู่นั้นเอง)
ทำให้เครือง หรือ service ต่างๆ ที่อยู่หลัง router มีความปลอดภัยจากการบุกรุกจากข้างนอกนั้นเอง ดังนั้นถ้าอยากทำให้ local ip ข้างใน หรือ หลัง router เปิดให้บริการ service ต่างๆ
หรือทำเป็น server เพื่อให้คนข้างนอกเข้าถึงและใช้บริการได้ ก็จำเป็นที่จะต้อง forward port หรือทำ NAT นั้นเอง
Q : ถ้าถามว่า ทำไมถึงต้องมา forward port ละ ?
A : ก็เพราะว่าปรกติแล้ว internet ที่ใช้ตามบ้าน (Home use internet) “ส่วนใหญ่” จะเป็น Dynamic IP
นั้นก็หมายความว่า หมายเลข wan ip ของ router ที่ทาง ISP (ผู้ให้บริการ internet) แจกมานั้น จะไม่ได้ Fix นั้นเอง ซึ่งมัน “อาจจะ” เปลี่ยนแปลงไปเรื่อยๆ ทุกๆ ครั้งที่มีการ connect ใหม่ หรือแม้กระทั้ง เปลี่ยนทุกครั้งที่มีการ restart router ก็จะได้ ip ใหม่นั้นเอง
ดังนั้นถ้าหากเราเข้าผ่าน ip เดิมจากข้างนอก ก็จะกลับเข้ามาเข้าอีกไม่ได้นั้นเอง เพราะ wan ip เปลี่ยนไปแล้ว แต่ถ้าอยากได้แบบ Fixed IP ก็สามารถติดต่อโดยตรงกับ ISP ได้เหมือนกัน เหมือนจะมีค่าใช้จ่ายเพิ่มเติมนั้นเอง
การ Forward port นั้น ก็เปรียบเสมือนการกำหนดเส้นทางของข้อมูล ที่ติดต่อเข้ามาจากข้างนอก เพื่อเข้าถึง local ip ผ่าน service ต่างๆ หลัง router
โดยจะมีการพิจารณาจากหมายเลข port เป็นหลัก โดย router จะเป็นตัวกำหนดว่า จะให้ mapping port ดังกล่าวไปยัง port ของ service ไหน และ map กับ local ip ไร
นั้นก็หมายความว่า port ที่เปิดนั้น ก็จะเป็นพวก service หรือ application ต่างๆ โดยเราจะต้องเปิด service เหล่านั้นไว้ด้วย
เพื่อที่จะให้ TCP/UDP request จากข้างนอก สามารถเข้าถึง local ip ข้างใน ผ่านทาง port ที่เรากำหนดนั้นเอง
ยกตัวอย่างเช่น. ถ้าต้องการเปิดบริการ web server เพื่อให้คนข้างนอกเข้าถึง เราก็จะต้องมีเครือง computer เปิดให้บริการ web server port 80 นั้นเอง (จริงๆ port ไรก็ได้)
ในการ mapping นั้น เราจะต้อง map port ไปหา local ip ของเครือง computer ข้างใน ที่เปิดบริการ service ไว้แล้ว โดยแล้วระบุ port : 80 เป็นต้น
1 2 3 4 5 |
Ex. HTTP 80 ==> 192.168.1.100 Port : 80 FTP 21 ==> 192.168.1.200 Port 21 SSH 22 ==> 192.168.1.200 port 22 Telnet 23 ==> 192.168.1.1 port 23 |
อย่าลืมว่า router บางรุ่นนั้น จะมี limit อยู่ว่า สามารถ forward port ไม่เกินจากที่กำหนด อย่างของผม TP-Link TD-W8968 ก็สามารถ forward สูงสุดได้แค่ 15 port
ในกรณี ถ้าขี้เกียจมานั้นใส่ที่ละ port หรือต้องการ forward port ได้เยอะๆ ก็สามารถเลือกแบบ DMZ ได้เลย โดยการใช้ DMZ นั้น router บางยี่ห้อ จะไม่สามารถใช้ร่วมกับ NAT/Forward port ได้ จะต้องเลือกอย่างได อย่างหนึ่ง
DMZ (Demilitarized Zone) ก็เปรียบเสมือนเอาเครืองไปตั้งไว้ หน้า router โดยไม่มีการ firewall กั้น ในการกำหนด dmz นั้น สามารถระบุ local ip ได้เลย โดยไม่จำเป็นต้องใส่ port ดังนั้น request ที่วิ่งเข้ามาจากข้างนอก ก็จะสามารถเข้าถึง local ip ข้างในแบบเต็มๆ ส่วนใหญ่ local ip zone นี้จะนิยมทำเป็น server กัน แต่ของเสียอีกอย่างคือ ส่วนใหญ่ router (Home use) แทบจะทุกรุ่นจะใส่ DMZ ได้แค่ ip เดียว (ผมยังไม่เคยเห็นรุ่นไหน ใส่มากกว่า 1 local ip)
สรุป : ถ้าต้องการเปิดหลายๆ port เพื่อให้ข้องนอกเข้าถึงแบบเต็มที่ ก็เลือก DMZ (แต่จะได้แค่ local ip เดียว)
แต่ถ้าอยากเปิดเป็นบาง port หรือ บาง service และมี service คนละ local ip ก็ให้เลือกแบบ Forward เป็น port ๆ ไป
ด้วยเหตุนี้เอง เราถึงต้องมีตัวทำการชี้ dns ไปหา IP ของ router ในที่นี้จะขอแนะนำ No-ip ซึ่งมันก็เป็น Free Dynamic DNS ที่ยอดฮิตมากๆ ในขณะ นี้
ก่อนที่จะทำการตั้งค่า Forward port หรือ NAT บน Router เราจะต้องทำการลงทะเบียน No-ip ก่อน
โดยเข้าไปที่ https://www.noip.com/sign-up ทำการสมัครสมาชิก ให้เรียบร้อย
ในที่นี้ ถ้าต้องการฟรี ให้เลือกภายใต้ Free นะครับ อย่างตัวอย่าง ผมขอเลือก .ddns.net ละกัน (มันมีให้เลือก เยอะอยู่นะ)
ถ้าใช้ Hostnames ภายใต้ของฟรีนั้น จะมีข้อจำกัดอยู่เหมือนกัน เช่น สามารถใช้ได้แค่ 3 HostNames (ก็มันของฟรีนิ อิ อิ) จริงๆ แค่นี้ก็เพียงพอละครับ
ข้อดี
– ทำให้สามารถเข้าถึงอุปกณ์ Network ได้ เช่น PC/Notebook, กล้อง IP Cam, Printer หรือแม้กระทั้งยังสามารถเข้าถึง Application ต่างๆ เช่น Web Server, Database Server, uTorrent , Bitcomet , Transmission bit .. ฯลฯ เพื่อสะดวกในการควบคุมระยะไกลจากข้างนอก เป็นตัน
ข้อเสีย
– เมื่อสามารถเข้าถึงจากข้างนอกได้ อาจจะมีผู้ไม่หวังดีทำการ Hack เข้าผ่านทาง Service ที่เปิดไว้ได้ เช่น โดยการ Brute-force, หรือ Hack เข้าผ่านทาง web application ดังนั้นเราจะต้องเปิด service ที่จำเป็น เพราะตั้งค่าความปลอดภัยเข้าไปด้วย .. เดียวบทความหน้าจะมาพูดถึงตรงนี้อีกที
คำเตือน : การ Forward port เพื่อให้ข้างนอกสามารถเข้าถึง Service ต่างๆ นั้น จะมีทั้งผลดี และผลเสียนะครับ ถ้าใครใช้อยู่อย่าลืมนึกถึงตรงนีด้วย
ในการลงทะเบียนครั้งแรก มันจะให้เราทำการสร้าง Hostnames ขึ้นมา ในที่นี้ เราตั้งอะไรก็ได้ ให้ดูเทห์ๆ เข้าไว้ (ถ้ามีคนสร้างแล้ว ก็ให้สร้างชื่ออื่น)
หรือถ้าไม่อยากสรา้งตอนนี้ ก็ติ๊กช่อง Create my hosname later
เมื่อทำการกรอกข้อมูลเรียบร้อยแล้ว ก็กด Submit (Fee sign Up) ได้เลย (ถ้าผ่านตรงนี้ ก็ให้รอ active ผ่าน email อีกที)
เมื่อทำการลงทะเบียน เสร็จ มันจะ link เพื่อยื่นยันอีกที เข้าอีเมล์ที่สมัคร
ทำการ Login เข้า email เพื่อทำการ Activate ให้เรียบร้อยด้วยนะครับ
ก็แค่ กด Link จาก Email เพื่อทำการยืนยันตัวตนนั้นเอง
เมือเข้ามาถึงหน้านี้แล้ว ผมแนะนำให้ทำการ สร้างกลุ่มด้วย นะครับ จะได้จัดการง่ายหน่อย
https://www.noip.com/members/dns/
ในที่นี้จะตั้งชื่อกลุ่มว่าไรก็ได้ แล้วทำการเพิ่ม Hostnames เข้าไปในกลุ่ม แล้วกด Confirm changes
สำหรับถ้าหากต้องการที่จะสร้าง Hostnames เพิ่มเข้าไปอีก ก็สามารถทำได้เช่นกัน โดยการกดที่ Add A Host
จากนั้น ให้เราทำการตั้งค่าในส่วนของ Update host
โดยในที่นี้ ผมเลือกเป็น
Host Type : DNS Host (A)
IP Address : อันนี้มันจะ Default IP Getway ของเรา ณ. ตอนนั้น (ไม่ต้องกรอกไร)
Assing to Group : เลือก Group ที่เรา ได้ทำการสร้างไว้ตั้งแต่ข้างบน
หลังจากที่เราได้ทำการ Register เสร็จ ก็สามารถนำ Credential ไปใส่ที่ Config ของ Dynamic DNS ที่ตัว Router ได้เลย
ถ้า Router รุ่นใหม่ๆ น่าจะรองรับอยู่แล้ว
แล้วถ้า Router ไม่ support : No-ip ล่ะ ทำไง ?
ตอบ : เราสามารถใช้ DUC (Dynamic Update Client) แทนได้เหมือนกัน โดยจะต้องติดตั้งบนระบบปฏิบัติการ OS
แต่อาจจะต้องเปิดเครืองทั้งไว้ด้วย หรือถ้า Router มัน support อยู่แล้ว ก็ไม่จำเป็นต้องเปิดเครืองทั้งไว้นั้นเอง
ในที่นี้ผมจะใช้ Rasberry Pi ในการติดตั้ง DUC เพื่อให้ update dynamic dns ของ no-ip ส่วนการ Forward port ผมจะทำบน Router
ปล. บทความนี้จะเป็นการ Forward port เพื่อให้เข้าถึง Service ของ Raspberry Pi
มาถึงตรงนี้แล้ว เราจะต้อง Download ตัว DUC มาติดตั้งก่อน
DUC มีทั้ง Windows/Mac/Linux (ใช้ OS ไหน ก็โหลดมาติดตั้งตามใจชอบ)
https://www.noip.com/download?page=win (สำหรับ Windows)
https://www.noip.com/download?page=linux (สำหรับ Linux)
https://www.noip.com/download?page=mac (สำหรับ Mac OSX)
อย่างในที่นี้ผมจะแนะนำติดตั้งบน Raspberry Pi ซึ่งเปิดทั้งไว้ทั้งวัน ได้สบายเลย เพราะกินไฟนิดเดียวเอง ไม่จำเป็นต้องเปิด PC/Notebook ทั้งไว้
วิธีการติดตั้งนั้น สามารถทำตามขั้นตอนดังนี้
1 2 3 4 5 6 7 8 9 10 11 |
mkdir /home/pi/noip cd /home/pi/noip wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz tar vzxf noip-duc-linux.tar.gz cd noip-2.1.9-1 sudo make sudo make install sudo /usr/local/bin/noip2 ทำการติดตั้ง กรณีอยากสร้างใหม่ sudo /usr/local/bin/noip2 -C (Recreate) สร้างใหม่เพือทับ config เดิม |
จากนั้นทำการสร้าง file เพือให้ service no-ip มัน start ทุกครั้งเมือมีการ boot เข้า OS หรือ เปิดเครื่อง
โดยให้ทำการสร้างไฟล์ noip ใน /etc/init.d/
sudo vim /etc/init.d/noip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#! /bin/sh # /etc/init.d/noip ### BEGIN INIT INFO # Provides: noip # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the NOIP Client at boot # Description: Init.d script to start / stop NOIP Client at boot / shutdown. ### END INIT INFO # If you want a command to always run, put it here # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting noip" # run application you want to start /usr/local/bin/noip2 ;; stop) echo "Stopping noip" # kill application you want to stop killall noip2 ;; *) echo "Usage: /etc/init.d/noip {start|stop}" exit 1 ;; esac exit 0 |
จากนั้นทำการ chmod และสั่งให้ service มันรันทุกครั้งที่มีการ reboot
1 2 3 |
sudo chmod 755 /etc/init.d/noip sudo update-rc.d noip defaults sudo reboot |
เพื่อให้ชัวส์ ลองทำการตรวจสอบว่า status มัน run อยู่หรือป่าวโดยใช้คำสั่งนี้
1 |
sudo /usr/local/bin/noip2 -S (Check Status) |
กรณีต้องการที่จะถอนการติดตั้ง
1 2 3 |
sudo update-rc.d -f noip remove rm /usr/local/bin/noip2 rm -rf /home/pi/noip |
จากนั้นให้ Login เข้า Router แล้วมองหาหัวข้อ Forward port บางรุ่นก็อาจจะเป็น Virsual Network หรือ NAT ก็ได้
แล้วทำการ Map IP ของเครื่อง Local และ Port ที่ต้องการเข้าถึงจากข้างนอกได้เลย
ตัวอย่างจากรูป ผมจะ forward port ให้วิ่งหาเครือง local ด้วย port 443 (HTTPS/SSL)
เวลาเข้าจากข้างนอก ก็สามารถใช้ mydomain.ddns.net:443 เป็นต้น
แถมๆ
สำหรับการ Forward port หรือ NAT นั้น บาง ISP (บางเจ้า) เค้าก็จะทำการ Blocked บาง port ไว้นะครับ
ถ้า forward ไม่ผ่าน ก็แสดงว่า อาจจะโดนผู้ให้บริการปิด port ดังกล่าวไว้ (เค้าปิดไว้ ก็เพราะเพื่อความปลอดภัยจากการโจมตีข้างนอกนั้นเอง)
อย่าง case ของผม ใช้ 3BB ที่ผมเคยเจอมา คือ ISP เค้าปิด port 80 และ 22, 23 ไว้ (ตอนแรก ผมก็งม ตั้งนาน ทำไง ก็เข้าข้างนอกไมได้)
สุดท้าย เลยตัดสินใจ โทรถาม call center ให้ตรวจสอบให้ ปรากฏว่า โดน ISP blocked ไว้จริงๆ นั้นเอง ^ ^”
จริงๆ เราสามารถแจ้งให้เค้าเปิดให้ได้ครับ ก็อ้างเหตุผลว่า เราต้องการเปิด server ที่บ้าน หรือต้องการติดต่อ service กับ local ip ข้างในก็ได้ 😉
อีกอย่าง ถ้าเปิดแล้ว แนะนำเปลี่ยน default password ของ router ด้วยนะ เพราะทุกคนสามารถเข้าถึง router ของเราจากข้างนอกได้
ระวังเดียวมีคนแอบ brutefore password router เราก็เป็นได้ อิอิ
ขอให้สนุกกับการทำ server ไว้ใช้ที่บ้านนะครับ
Comments are closed