1. ความต้องการระบบ
1.1 เป็น Centos 5 หรือสูงกว่า
1.2 Kernel 2.6.15 ขึ้นไป ที่ต้องใช้เวอร์ชั่นไม่ต่ำกว่านี้เพราะใน Kernel จะมีโมดูล MPPE อยู่แล้ว จำเป็นต่อการรัน MSCHAPv2
เช็คเวอร์ชั่น kernel โดยพิมพ์คำสั่ง
- โค้ด: เลือกทั้งหมด
uname -r
ผลลัพธ์
2.6.18-409.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-2.el5
แสดงว่าติดตั้งไว้แล้วและเป็นเวอร์ชั่น 2.4.4 แล้ว
2. ติดตั้ง pptpd
เช็คเวอร์ชั่นใหม่ http://poptop.sourceforge.net/yum/stable/packages แล้ว copy link address มาครับ
ติดตั้งเลยโดยไม่ต้องดาวน์โหลดก่อน
สำหรับ CentOS 5 32 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.4.0-1.rhel5.i386.rpm
สำหรับ CentOS 5 64 บิต
- โค้ด: เลือกทั้งหมด
rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.4.0-1.rhel5.x86_64.rpm
แต่สำหรับ CentOS 6 ให้ใช้ตามลิ้งค์นี้นะครับ
http://poptop.sourceforge.net/yum/stable/rhel6/
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
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 ควรให้อยู่คนละวงกับไอพีวงแลนครับ ถ้าใช้งานแค่ไม่กี่ไอพี และไอพีวงแลนก็ยังพอว่างอยู่ ให้ใช้ไอพีเป็นวงแลนเลยก็ได้ครับ แต่ต้องมั่นใจว่าไอพีมันไม่ชนกัน **
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 ใหม่ทุกครั้งนะครับ
6. ทำให้ pptpd รันเป็นเซอร์วิส
- โค้ด: เลือกทั้งหมด
chkconfig pptpd on
7. แก้ไขไฟล์ /etc/ppp/ip-up
เพิ่มบรรทัดนี้
- โค้ด: เลือกทั้งหมด
/sbin/ifconfig $1 mtu 1400
ไว้ก่อนบรรทัด exit 0
ตัวอย่าง
- โค้ด: เลือกทั้งหมด
/sbin/ifconfig $1 mtu 1400
exit 0
8. สตาร์ท 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
9. (ข้อนี้เป็นออปชั่น) ให้ CentOS ฟอร์เวอร์ด Packets จาก Client ไปยัง Interface อื่น
** ขั้นตอนนี้ทำเฉพาะเมื่อต้องการให้ Client ออกเน็ตโดยผ่านทาง Server นะครับ ถ้าแค่ต้องการให้ Client คอนเน็คเข้า Server แล้วใช้ Resource บน Server เฉยๆ ไม่ได้ออกไปไหนต่อ ก็ไม่ต้องทำขั้นตอนนี้ **
เซ็ตให้ CentOS ฟอร์เวอร์ด Packets (รับ Packets จาก PPTP Cleint แล้วส่งต่อไปทาง Interface อื่น)
แก้ไขไฟล์ /etc/sysctl.conf
บรรทัด net.ipv4.ip_forware แก้ตัวเลขด้านขวามือจาก 0 เป็น 1 ดังตัวอย่าง ซึ่งจะทำให้ client สามารถติดต่อกับ hosts เครื่องอื่นๆบน lan ได้ด้วย
- โค้ด: เลือกทั้งหมด
net.ipv4.ip_forward = 1
และทำให้มีผลทันที ใช้คำสั่ง
- โค้ด: เลือกทั้งหมด
sysctl -p
10. (ข้อนี้เป็นออปชั่น) เปิดพอร์ต firewall หรือ iptables (ถ้ารัน iptables ไว้)
โปรแกรม pptpd รันบน tcp 1723 ดังนั้นในไฟล์ iptables ให้เพิ่มบรรทัดนี้เข้าไป
- โค้ด: เลือกทั้งหมด
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT
11. (ข้อนี้เป็นออปชั่น) ถ้าต้องการให้ PPTP client สามารถออกเน็ตผ่านเซอร์เวอร์ได้ด้วย
และยังทำให้ติดต่อกับ PC เครื่องอื่นๆในวงเดียวกับ Server ได้ โดย PC เหล่านั้นจะเห็นว่าเชื่อมต่อมาจากไอพีของ PPTP server
** ถ้าต้องการแบบนี้ค่อยทำหัวข้อนี้นะครับ **
ให้แก้ไขไฟล์ /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 ที่ออกอินเตอร์เน็ตได้
12. เทสคอนเน็คมาจาก PPTP Client บนเครื่อง Windows
วิธีการคอนฟิก PPTP Client บน Windows XP
วิธีการคอนฟิก PPTP Client บน iPhone 4
13. การรีสตาร์ท
ถ้าเปลี่ยนคอนฟิกของ PPTPD เช่นเปลี่ยนออปชั่นในไฟล์คอนฟิก ให้ดิสคอนเน็ค Session ด้วย เพราะอาจจะมีปัญหาที่ Server อาจจจะจ่าย IP Address ซ้ำกัน
- โค้ด: เลือกทั้งหมด
service pptpd restart-kill
service pptpd start
14. วิธีการคอนฟิก PPTP Clients
มาดูวิธีการคอนฟิก PPTP Clients บนระบบปฏิบัติการต่างๆกันครับ ลิ้งค์นี้เลยครับ
http://wiki.witopia.net/wiki/Main_Page# ... vice_Setup
15. (ข้อนี้เป็นออปชั่น) ฟอร์เวอร์ดพอร์ตบน Router
กรณีที่เราติดตั้ง pptpd ไว้บนเครื่องในวงแลนและต้องการให้คอนเน็คเข้ามาจากภายนอกได้ด้วย ให้เราเซ็ต Port forwarding บนตัว Router ด้วยนะครับ โดยฟอร์เวอร์ดมาที่พอร์ต tcp 1723 ของเครื่อง Server
16. (ข้อนี้เป็นออปชั่น) ตัวอย่างไฟล์ iptables ที่ใช้งานจริง
172.30.0.0, 172.31.0.0 เป็นไอพีวง VPN ครับ ส่วน 192.168.0.0 เป็นไอพีวงแลน ลูกค้ามีหลายวง (หลายสาขา)
- โค้ด: เลือกทั้งหมด
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
-A FORWARD -i tun0 -j ACCEPT
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -s 172.30.0.0/16 -j ACCEPT
-A RH-Firewall-1-INPUT -s 172.31.0.0/16 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.0/16 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m multiport --dport 1723 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m multiport --dport 80,137,138,139,443,3306 -j DROP
-A RH-Firewall-1-INPUT -i eth0 -p udp -m multiport --dport 137,138,139,5038 -j DROP
-A RH-Firewall-1-INPUT -i eth0 -j DROP
COMMIT
*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]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 172.30.0.0/16 -o eth0 -j MASQUERADE
-A POSTROUTING -s 172.31.0.0/16 -o eth0 -j MASQUERADE
COMMIT
บทความที่เกี่ยวข้อง
เทคนิคการเพิ่ม Security ให้กับเว็บ Elastix/FreePBX
วิธีการคอนฟิก PPTP Client บน Windows XP
วิธีการคอนฟิก PPTP Client บน iPhone 4
วิธีการคอนฟิก PPTP VPN Client บน Android
เทคนิคการคอนฟิก PPTP VPN Client บน Windows 7