คอนฟิก PPTP Server บนลีนุกซ์ รองรับ iPhone, Android

เพื่อให้สามารถใช้งานเซิร์ฟเวอร์ในบริษัทจากที่ไหนก็ได้ ผ่านทางมือถือไม่ว่าจะเป็น 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

ข้อมูลอ้างอิง

1 thought on “คอนฟิก PPTP Server บนลีนุกซ์ รองรับ iPhone, Android”

  1. connect vpn ได้ แต่เข้าเน็ตอื่นไม่ได้เลยค่ะ แก้ไขยังไงได้บ้างค่ะ

Leave a Reply