วันนี้มีโอกาสได้เขียนวิธีการติดตั้ง PPTPD VPN Server บน CentOS เพราะต้องทำให้พนักงานที่บริษัทใช้หน่ะครับ ที่จริงตอนนี้ก็มี OpenVPN ใช้อยู่แล้ว แต่บางคนก็บอกว่ามันชอบ Hang อยากได้ VPN ตัวใหม่ (แต่ส่วนมากก็ไม่บ่นไรนะครับ) ก็เลยลองตัวนี้ซะเลย บางคนก็บอกว่าอยากได้ VPN ที่รันบน Windows Mobile หรือ IPhone ได้ด้วย เอาไว้เช็คเมล์ของบริษัท ผมก็จัดให้ครับ
เอาหล่ะครับ มาเริ่มติดตั้ง PPTPD VPN กันเลยดีกว่า
1. ความต้องการระบบ
1.1 Centos 5
1.2 Kernel 2.6.15 ขึ้นไป ที่ต้องใช้เวอร์ชั่นไม่ต่ำกว่านี้เพราะใน Kernel จะมีโมดูล MPPE อยู่แล้ว จำเป็นต่อการรัน MSCHAPv2
เช็คเวอร์ชั่น kernel โดยพิมพ์คำสั่ง
- โค้ด: เลือกทั้งหมด
uname -r
ผลลัพธ์
2.6.18-53.1.19.el5
แสดงว่าเป็นเวอร์ชั่น 2.6.18 ซึ่งโอเคเลย
หรือลองพิมพ์คำสั่งต่อไปนี้นะครับ ถ้าได้ OK ตอบกลับมาแสดงว่า Kernel รองรับ MPPE
- โค้ด: เลือกทั้งหมด
modprobe ppp-compress-18 && echo ok
ผลลัพธ์
ok
1.3 โปรแกรม ppp เวอร์ชั่น 2.4.4 ขึ้นไป
เช็คในเครื่องว่าติดตั้งหรือยัง และเวอร์ชั่นอะไร (ดีฟอลท์จะติดตั้งพร้อมกับ centos 5 อยู่แล้วครับ)
- โค้ด: เลือกทั้งหมด
rpm -qa | grep ppp
ผลลัพธ์
ppp-2.4.4-1.el5
แสดงว่าติดตั้งไว้แล้ว และเป็นเวอร์ชั่น 2.4.4-1 แล้ว
2. ติดตั้ง
**ข้ามไปหัวข้อ 2.2 เลยก็ได้ครับ **
** เช็คเวอร์ชั่นใหม่ http://poptop.sourceforge.net/yum/stable/packages **
2.1 ติดตั้ง pptp แบบช้า
ดาวน์โหลดไฟล์ rpm ที่มีชื่อว่า pptpd-1.3.4-1.rhel5.1.i386.rpm หรือเวอร์ชั่นที่ใหม่กว่า หรือเป็นแบบ x86_64 เลือกให้เหมาะกับ OS นะครับ
เวอร์ชั่น 32 บิต http://ywko.googlecode.com/files/pptpd- ... 1.i386.rpm
เวอร์ชั่น 64 บิต http://ywko.googlecode.com/files/pptpd- ... x86_64.rpm
หรือจะโหลดจากเว็บนี้ก็ได้ครับ
เวอร์ชั่น 32 บิต sources/pptpd-1.3.4-1.rhel5.1.i386.rpm
เวอร์ชั่น 64 บิต sources/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
แล้วติดตั้ง
สำหรับ 32 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
สำหรับ 64 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm
2.2 ติดตั้ง pptpd แบบด่วน
ติดตั้งเลยโดยไม่ต้องดาวน์โหลดก่อน
สำหรับ 32 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh 'http://www.voip4share.com/sources/pptpd-1.3.4-1.rhel5.1.i386.rpm'
สำหรับ 64 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh 'http://www.voip4share.com/sources/pptpd-1.3.4-1.rhel5.1.x86_64.rpm'
2.3 ไฟล์คอนฟิก options.pptpd
** ไฟล์นี้ดูเฉยๆครับ เอาไว้กำหนดออปชั่นต่างๆของโปรแกรม pptpd เช่น authentication, encryption
ไฟล์ /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
#ms-dns 192.168.63.1
#ms-wins 192.168.63.1
nobsdcomp
novj
novjccomp
nologfd
2.4 ไฟล์คอนฟิก pptpd.conf
ไฟล์ /etc/pptpd.conf ให้แก้ไขบรรทัด localip และ remoteip ครับ เอาเครื่องหมาย # หน้าทั้งสองบรรทัดออกด้วย
localip 192.168.63.1
remoteip 192.168.63.11-15
ซึ่ง localip คือ IP Address ของเครื่อง Server เมื่อมันรันเป็น PPTPD server ส่วน remoteip เป็น IP Address ที่จะแจกจ่ายให้ PPTP Client เวลาคอนเน็คเข้ามา การตั้ง localip, remoteip ควรอยู่ในวงเดียวกัน และไม่ซ้ำกับวงอื่นๆที่อยู่บน Server นะครับ
** แนะนำครับ ตามหลักแล้วการกำหนดค่า localip, remoteip ควรให้อยู่คนละวงกับไอพีวงแลนครับ ถ้าใช้งานแค่ไม่กี่ไอพี และไอพีวงแลนก็ยังพอว่างอยู่ ให้ใช้ไอพีเป็นวงแลนเลยก็ได้ครับ แต่ต้องมั่นใจว่าไอพีมันไม่ชนกัน **
2.5 คอนฟิก Username/Password ของ Users
เพิ่ม username (nuiz) และ password (1234) ของแต่ละ user ไว้ในไฟล์ /etc/ppp/chap-secrets
- โค้ด: เลือกทั้งหมด
nuiz pptpd 1234 *
user2 pptpd 2345 *
user8 pptpd abcd *
สร้างเพิ่มได้เรื่อยๆครับ จะกี่ร้อยยูสเซอร์ก็ได้ แต่ควรให้เหมาะสมกับจำนวน ip address ที่กันไว้ (กรณีที่อาจมีโอกาสที่ client จะคอนเน็คเข้ามาพร้อมๆกัน) ช่องว่างควรเคาะปุ่ม Spacebar นะครับ ไม่ควรกดปุ่ม Tab
ส่วน * หมายถึงไอพีแอดเดรสที่ pptpd จะจ่ายให้แก่ clients ที่เชื่อมต่อเข้ามา ไอพีที่จ่ายจะอยู่ในช่วง remoteip ในไฟล์ /etc/pptpd.conf ครับ เราจะระบุไอพีตรงๆเลยก็ได้ เช่น 192.168.63.11 (ตัวอย่าง) ซึ่งยูสเซอร์ nuiz จะได้ไอพีนี้ทุกครั้ง แต่ถ้าใส่เป็น * จะได้ไอพีที่ pptpd กำหนดให้แทน
หากมีการเพิ่มหรือแก้ไข user ภายหลัง ต้องรีโหลด pptpd ใหม่ทุกครั้งนะครับ
2.6 ทำให้ pptpd รันเป็นเซอร์วิส
- โค้ด: เลือกทั้งหมด
chkconfig --level 35 pptpd on
2.7 สตาร์ท pptpd
- โค้ด: เลือกทั้งหมด
service pptpd start
แล้วเช็คว่ามีพอร์ต tcp 1723 รันอยู่หรือไม่
- โค้ด: เลือกทั้งหมด
netstat -ln | grep 1723
ถ้าเห็นแบบนี้แสดงว่า pptpd ของเราทำงานอยู่ครับ
- โค้ด: เลือกทั้งหมด
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN
หรือรีสตาร์ท pptpd
- โค้ด: เลือกทั้งหมด
service pptpd stop
service pptpd start
2.8 (ข้อนี้เป็นออปชั่น) เซ็ต Forward
** ขั้นตอนนี้ทำเฉพาะเมื่อต้องการให้ Client ออกเน็ตโดยผ่านทาง Server นะครับ ถ้าแค่ต้องการให้ Client คอนเน็คเข้า Server แล้วใช้ Resource บน Server เฉยๆ ไม่ได้ออกไปไหนต่อ ก็ไม่ต้องทำขั้นตอนนี้ **
เซ็ตให้ CentOS ฟอร์เวอร์ด Packet (รับ data จาก cleint แล้วส่งต่อ)
โดยแก้ไขไฟล์ /etc/sysctl.conf
บรรทัด net.ipv4.ip_forware แก้ตัวเลขด้านขวามือจาก 0 เป็น 1 ดังตัวอย่าง ซึ่งจะทำให้ client สามารถติดต่อกับ hosts เครื่องอื่นๆบน lan ได้ด้วย
- โค้ด: เลือกทั้งหมด
net.ipv4.ip_forward = 1
และทำให้มีผลทันที ใช้คำสั่ง
- โค้ด: เลือกทั้งหมด
sysctl -p
2.9 (ข้อนี้เป็นออปชั่น) เปิดพอร์ต firewall หรือ iptables (ถ้ารัน iptables ไว้)
โปรแกรม pptpd รันบน tcp 1723 ดังนั้นในไฟล์ iptables ให้เพิ่มบรรทัดนี้เข้าไป
- โค้ด: เลือกทั้งหมด
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT
2.10 (ข้อนี้เป็นออปชั่น) ถ้าต้องการให้ pptp client สามารถออกเน็ตผ่านเซอร์เวอร์ได้ด้วย
** ถ้าต้องการแบบนี้ค่อยทำหัวข้อนี้นะครับ **
ให้แก้ไขไฟล์ /etc/sysconfig/iptables ตามนี้ครับ
ของเดิม
- โค้ด: เลือกทั้งหมด
*filter
...
COMMIT
ให้เพิ่มบรรทัดด้านล่างนี้เข้าไปต่อท้าย COMMIT (ของ *filter)
- โค้ด: เลือกทั้งหมด
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.63.0/24 -o eth0 -j MASQUERADE
COMMIT
โดยที่ 192.168.63.0/24 เป็น IP Address ของพวก PPTP Clients ส่วน eth0 คือ Interface ที่ออกอินเตอร์เน็ตได้
2.11 เทสคอนเน็คมาจาก PPTP Client บนเครื่อง Windows
วิธีการคอนฟิก PPTP Client บน Windows XP
วิธีการคอนฟิก PPTP Client บน iPhone 4
3. การรีสตาร์ท
ถ้าเปลี่ยนคอนฟิกของ PPTPD เช่นเปลี่ยนออปชั่นในไฟล์คอนฟิก ให้ดิสคอนเน็ค Session ด้วย เพราะอาจจะมีปัญหาที่ Server อาจจจะจ่าย IP Address ซ้ำกัน
- โค้ด: เลือกทั้งหมด
service pptpd restart-kill
service pptpd start
4. วิธีการคอนฟิก PPTP Clients
มาดูวิธีการคอนฟิก PPTP Clients บนระบบปฏิบัติการต่างๆกันครับ ลิ้งค์นี้เลยครับ
http://wiki.witopia.net/wiki/Main_Page# ... vice_Setup
5. (ข้อนี้เป็นออปชั่น) ฟอร์เวอร์ดพอร์ตบน Router
กรณีที่เราติดตั้ง pptpd ไว้บนเครื่องในวงแลนและต้องการให้คอนเน็คเข้ามาจากภายนอกได้ด้วย ให้เราเซ็ต Port forwarding บนตัว Router ด้วยนะครับ โดยฟอร์เวอร์ดมาที่พอร์ต tcp 1723 ของเครื่อง Server
บทความที่เกี่ยวข้อง
เทคนิคการเพิ่ม Security ให้กับเว็บ Elastix/FreePBX
วิธีการคอนฟิก PPTP Client บน Windows XP
วิธีการคอนฟิก PPTP Client บน iPhone 4
วิธีการคอนฟิก PPTP VPN Client บน Android
เทคนิคการคอนฟิก PPTP VPN Client บน Windows 7