เทคนิคการติดตั้ง PPTP Server 1.4.0 บน CentOS
โพสต์แล้ว: 24 เม.ย. 2016 11:35
บทความนี้คล้ายๆกับบทความ ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS นะครับ แต่เวอร์ชั่นใหม่กว่า เนื้อหามากกว่า กระทัดรัดกว่า
1. ความต้องการระบบ
1.1 เป็น Centos 5 หรือสูงกว่า
1.2 Kernel 2.6.15 ขึ้นไป ที่ต้องใช้เวอร์ชั่นไม่ต่ำกว่านี้เพราะใน Kernel จะมีโมดูล MPPE อยู่แล้ว จำเป็นต่อการรัน MSCHAPv2
เช็คเวอร์ชั่น kernel โดยพิมพ์คำสั่ง
ผลลัพธ์
2.6.18-409.el5
แสดงว่าเป็นเวอร์ชั่น 2.6.18 ซึ่งโอเคเลย
หรือลองพิมพ์คำสั่งต่อไปนี้นะครับ ถ้าได้ OK ตอบกลับมาแสดงว่า Kernel รองรับ MPPE
ผลลัพธ์
ok
1.3 โปรแกรม ppp เวอร์ชั่น 2.4.4 ขึ้นไป
เช็คในเครื่องว่าติดตั้งหรือยัง และเวอร์ชั่นอะไร (ดีฟอลท์จะติดตั้งพร้อมกับ centos 5 อยู่แล้วครับ)
ผลลัพธ์
ppp-2.4.4-2.el5
แสดงว่าติดตั้งไว้แล้วและเป็นเวอร์ชั่น 2.4.4 แล้ว
2. ติดตั้ง pptpd
เช็คเวอร์ชั่นใหม่ http://poptop.sourceforge.net/yum/stable/packages แล้ว copy link address มาครับ
ติดตั้งเลยโดยไม่ต้องดาวน์โหลดก่อน
สำหรับ CentOS 5 32 บิต
สำหรับ CentOS 5 64 บิต
แต่สำหรับ CentOS 6 ให้ใช้ตามลิ้งค์นี้นะครับ
http://poptop.sourceforge.net/yum/stable/rhel6/
3. ไฟล์คอนฟิก options.pptpd
** ไฟล์นี้ดูเฉยๆครับ เอาไว้กำหนดออปชั่นต่างๆของโปรแกรม pptpd เช่น authentication, encryption
ไฟล์ /etc/ppp/options.pptpd
4. ไฟล์คอนฟิก pptpd.conf
ไฟล์ /etc/pptpd.conf ให้แก้ไขบรรทัด localip และ remoteip ครับ เอาเครื่องหมาย # หน้าทั้งสองบรรทัดออกด้วย
ซึ่ง 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
สร้างเพิ่มได้เรื่อยๆครับ จะกี่ร้อยยูสเซอร์ก็ได้ แต่ควรให้เหมาะสมกับจำนวน ip address ที่กันไว้ (กรณีที่อาจมีโอกาสที่ client จะคอนเน็คเข้ามาพร้อมๆกัน) ช่องว่างควรเคาะปุ่ม Spacebar นะครับ ไม่ควรกดปุ่ม Tab
ส่วน * หมายถึงไอพีแอดเดรสที่ pptpd จะจ่ายให้แก่ clients ที่เชื่อมต่อเข้ามา ไอพีที่จ่ายจะอยู่ในช่วง remoteip ในไฟล์ /etc/pptpd.conf ครับ เราจะระบุไอพีตรงๆเลยก็ได้ เช่น 192.168.63.11 (ตัวอย่าง) ซึ่งยูสเซอร์ nuiz จะได้ไอพีนี้ทุกครั้ง แต่ถ้าใส่เป็น * จะได้ไอพีที่ pptpd กำหนดให้แทน
หากมีการเพิ่มหรือแก้ไข user ภายหลัง ต้องรีโหลด pptpd ใหม่ทุกครั้งนะครับ
6. ทำให้ pptpd รันเป็นเซอร์วิส
7. แก้ไขไฟล์ /etc/ppp/ip-up
เพิ่มบรรทัดนี้
ไว้ก่อนบรรทัด exit 0
ตัวอย่าง
8. สตาร์ท pptpd
แล้วเช็คว่ามีพอร์ต tcp 1723 รันอยู่หรือไม่
ถ้าเห็นแบบนี้แสดงว่า pptpd ของเราทำงานอยู่ครับ
หรือรีสตาร์ท pptpd
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 ได้ด้วย
และทำให้มีผลทันที ใช้คำสั่ง
10. (ข้อนี้เป็นออปชั่น) เปิดพอร์ต firewall หรือ iptables (ถ้ารัน iptables ไว้)
โปรแกรม pptpd รันบน tcp 1723 ดังนั้นในไฟล์ iptables ให้เพิ่มบรรทัดนี้เข้าไป
11. (ข้อนี้เป็นออปชั่น) ถ้าต้องการให้ PPTP client สามารถออกเน็ตผ่านเซอร์เวอร์ได้ด้วย
และยังทำให้ติดต่อกับ PC เครื่องอื่นๆในวงเดียวกับ Server ได้ โดย PC เหล่านั้นจะเห็นว่าเชื่อมต่อมาจากไอพีของ PPTP server
** ถ้าต้องการแบบนี้ค่อยทำหัวข้อนี้นะครับ **
ให้แก้ไขไฟล์ /etc/sysconfig/iptables ตามนี้ครับ
ของเดิม
ให้เพิ่มบรรทัดด้านล่างนี้เข้าไปต่อท้าย COMMIT (ของ *filter)
โดยที่ 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 ซ้ำกัน
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 เป็นไอพีวงแลน ลูกค้ามีหลายวง (หลายสาขา)
บทความที่เกี่ยวข้อง
เทคนิคการเพิ่ม Security ให้กับเว็บ Elastix/FreePBX
วิธีการคอนฟิก PPTP Client บน Windows XP
วิธีการคอนฟิก PPTP Client บน iPhone 4
วิธีการคอนฟิก PPTP VPN Client บน Android
เทคนิคการคอนฟิก PPTP VPN Client บน Windows 7
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