หน้า 1 จากทั้งหมด 1

เทคนิคการติดตั้ง PPTP Server 1.4.0 บน CentOS

โพสต์โพสต์แล้ว: 24 เม.ย. 2016 11:35
โดย nuiz
บทความนี้คล้ายๆกับบทความ ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS นะครับ แต่เวอร์ชั่นใหม่กว่า เนื้อหามากกว่า กระทัดรัดกว่า

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

Re: เทคนิคการติดตั้ง PPTP Server 1.4.0 บน CentOS

โพสต์โพสต์แล้ว: 24 เม.ย. 2016 23:44
โดย nuiz
ตัวอย่าง /etc/sysconfig/iptables
โค้ด: เลือกทั้งหมด
*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 udp -m udp --dport 1194 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -p tcp -m multiport --dport 80,137,138,139,443 -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