เพื่อให้สามารถใช้งานเซิร์ฟเวอร์ในบริษัทจากที่ไหนก็ได้ ผ่านทางมือถือไม่ว่าจะเป็น Android หรือ iPhone แทนที่จะเปิดพอร์ตแล้วให้เครื่อง client เชื่อมต่อโดยตรงจากอินเตอร์เน็ต ซึ่งค่อนข้างอันตรายต่อความปลอดภัยของระบบ
วิธีการหนึ่งที่ทำได้คือใช้การเชื่อมต่อ VPN แบบ PPTP ซึ่งติดตั้งมาอยู่แล้วไม่ว่าจะเป็น iPhone, Android หรือแม้กระทั่ง Windows เวอร์ชั่นต่างๆ เชื่อมต่อเข้า PPTP Server จะทำให้มีความปลอดภัยเพิ่มขึ้น เพราะจะมีการตรวจสอบ user, password ก่อนที่จะเชื่อมต่อได้
ในที่นี้จะแนะนำวิธีการติดตั้งและคอนฟิก PPTP Server บนลีนุกซ์ โดยทดสอบบน CentOS 6
ติดตั้งโปรแกรม ppp, pptpd
ติดตั้ง ppp ด้วย yum
[root@cent6 ~]# yum install ppp
ดาวน์โหลดไฟล์ rpm ติดตั้งโปรแกรม pptpd จากเว็บไซต์ http://poptop.sourceforge.net/yum/stable/packages/
ในลิ้งค์นี้จะมีไฟล์แพ็คเกจ rpm ให้เลือกติดตั้งบนลีนุกซ์เวอร์ชั่นต่างๆ เช่นถ้าต้องการติดตั้งบน CentOS 6 ก็เลือกดาวน์โหลดไฟล์ pptpd-1.3.4-2.el6.x86_64.rpm
[root@cent6 ~]# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm
[root@cent6 ~]# ls -l pptpd-1.3.4-2.el6.x86_64.rpm -rw-r--r--. 1 root root 74392 Dec 7 2010 pptpd-1.3.4-2.el6.x86_64.rpm
[root@cent6 ~]# rpm -i pptpd-1.3.4-2.el6.x86_64.rpm
แก้ไขไฟล์คอนฟิก pptpd.conf โดยเพิ่มต่อจากบรรทัดสุดท้าย ใส่คอนฟิก ip ที่จะใช้ระหว่าง pptp server (localip) และ pptp client (remoteip) ที่จะเชื่อมต่อเข้ามา
[root@cent6 ~]# vi /etc/pptpd.conf ... localip 192.168.100.254 remoteip 192.168.100.1-10
แก้ไขไฟล์คอนฟิก options.pptpd โดยต่อจากบรรทัดสุดท้าย ระบุ dns ที่จะจ่ายให้กับ client ในที่นี้จ่าย dns ของ google (8.8.8.8)
[root@cent6 ~]# vi /etc/ppp/options.pptpd ... ms-dns 8.8.8.8
แก้ไขไฟล์คอนฟิก chap-secrets ใส่ user, password สำหรับ client ที่จะเชื่อมต่อเข้ามา
[root@cent6 ~]# vi /etc/ppp/chap-secrets ... vpnuser1 pptpd vpnpassword1 *
รันเซอร์วิส pptpd
[root@cent6 ~]# service pptpd start Starting pptpd: [ OK ]
ใช้คำสั่ง ps เพื่อดูโปรเซส pptpd
[root@cent6 ~]# ps -ef | grep pptpd root 1499 1 0 22:18 ? 00:00:00 /usr/sbin/pptpd
พอร์ตที่ใช้สำหรับ pptpd (server) คือ TCP พอร์ต 1723
[root@cent6 ~]# netstat -an | grep 1723 tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN
ถ้ามี iptables รันอยู่ ต้องเพิ่ม rule เพื่ออนุญาตให้เครื่องอื่นเข้าใช้พอร์ต 1723 ได้ ตัวอย่างเช่น
[root@cent6 ~]# iptables -I INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
คอนฟิก Android 2.3 เชื่อมต่อ PPTP
บน Android 2.3 ถ้าต้องการคอนฟิก pptp สามารถทำได้โดย เข้าไปที่ Settings -> Wireless and network -> VPN settings -> Add VPN -> Add PPTP VPN
- VPN name – ตั้งชื่อ VPN
- Set VPN Server – ระบุ ip address ของเครื่องที่รัน PPTP Server
กดที่ชื่อ VPN ที่ตั้งไว้ เพื่อเชื่อมต่อ (Connect to network) หน้าจอจะให้ใส่ User name และ Password
ใส่ user, password ตามที่ตั้งไว้ในไฟล์ chap-secrets
หากเชื่อมต่อสำเร็จ จะมีรูปไอคอนกุญแจอยู่ด้านซ้ายบน
หากต้องการปิดการเชื่อมต่อ ก็กดที่ชื่อ VPN แล้วเลือก Disconnect
คอนฟิก iPhone (iOS 5.1) เชื่อมต่อ PPTP
ส่วนบน iPhone ถ้าต้องการคอนฟิก pptp สามารถทำได้โดย เข้าไปที่ Settings -> General -> Network -> VPN -> Add VPN Configuration
เลือกแท็บ PPTP
- Description – ตั้งชื่อ VPN
- Server – ใส่ ip address ของเครื่องที่รัน PPTP Server
- Account – ใส่ username (ไฟล์ chap-secrets)
- Password – ใส่ password (ไฟล์ chap-secrets)
กดที่ VPN เปลี่ยนจาก OFF เป็น ON เมื่อต้องการเชื่อมต่อ
หากเชื่อมต่อสำเร็จ จะมีไอคอน VPN อยู่แถบด้านบน
หากต้องการปิด ก็เปลี่ยน VPN เป็น OFF
ดูสถานะการเชื่อมต่อ pptp บนเซิรฟ์เวอร์
ตัวอย่าง log file ที่เกิดขึ้น ระหว่างการเชื่อมต่อ pptp จาก client 192.168.1.3 แล้วได้ vpn ip (remote IP address) 192.168.100.1
[root@cent6 ~]# tail -f /var/log/messages Sep 1 22:55:33 cent6 pptpd[1700]: CTRL: Client 192.168.1.3 control connection started Sep 1 22:55:33 cent6 pptpd[1700]: CTRL: Starting call (launching pppd, opening GRE) Sep 1 22:55:33 cent6 pppd[1701]: Warning: can't open options file /root/.ppprc: Permission denied Sep 1 22:55:33 cent6 pppd[1701]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so loaded. Sep 1 22:55:33 cent6 pppd[1701]: pppd 2.4.5 started by root, uid 0 Sep 1 22:55:33 cent6 pppd[1701]: Using interface ppp0 Sep 1 22:55:33 cent6 pppd[1701]: Connect: ppp0 <--> /dev/pts/1 Sep 1 22:55:33 cent6 pptpd[1700]: GRE: Bad checksum from pppd. Sep 1 22:55:33 cent6 pppd[1701]: MPPE 128-bit stateless compression enabled Sep 1 22:55:33 cent6 pppd[1701]: Cannot determine ethernet address for proxy ARP Sep 1 22:55:33 cent6 pppd[1701]: local IP address 192.168.100.254 Sep 1 22:55:33 cent6 pppd[1701]: remote IP address 192.168.100.1
หลังจากมีการเชื่อมต่อ pptp สำเร็จ จะมีพอร์ต ppp เกิดขึ้นบนลีนุกซ์เซิร์ฟเวอร์
[root@cent6 ~]# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:192.168.100.254 P-t-P:192.168.100.1 Mask:255.255.255.255
หากมีการเชื่อมต่อจาก client เครื่องที่ 2 ก็จะมีพอร์ต ppp1 เพิ่มขึ้นมาเป็นลำดับตัวเลข
ตัวอย่าง log file เมื่อ disconnect บนเครื่อง client
[root@cent6 ~]# tail -f /var/log/messages Sep 1 22:57:02 cent6 pppd[1701]: LCP terminated by peer (MPPE disabled) Sep 1 22:57:02 cent6 pppd[1701]: Connect time 1.5 minutes. Sep 1 22:57:02 cent6 pppd[1701]: Sent 0 bytes, received 0 bytes. Sep 1 22:57:02 cent6 pptpd[1700]: CTRL: EOF or bad error reading ctrl packet length. Sep 1 22:57:02 cent6 pptpd[1700]: CTRL: couldn't read packet header (exit) Sep 1 22:57:02 cent6 pptpd[1700]: CTRL: CTRL read failed Sep 1 22:57:02 cent6 pppd[1701]: Modem hangup Sep 1 22:57:02 cent6 pppd[1701]: Connection terminated. Sep 1 22:57:02 cent6 pppd[1701]: Exit. Sep 1 22:57:02 cent6 pptpd[1700]: CTRL: Client 192.168.1.3 control connection finished
connect vpn ได้ แต่เข้าเน็ตอื่นไม่ได้เลยค่ะ แก้ไขยังไงได้บ้างค่ะ