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

ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 14 พ.ย. 2010 17:13
โดย nuiz
สวัสดีครับ ไม่ได้เขียนบทความบน CentOS นานแล้ว ที่จริงผมอยากเขียนอยู่แต่นึกไม่ออกว่าจะเขียนเกี่ยวกับเรื่องอะไรดี
วันนี้มีโอกาสได้เขียนวิธีการติดตั้ง 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

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 14 พ.ย. 2010 20:33
โดย chaybb
ขอบคุณครับ
ท่านผู้เยี่ยมยุทธ เยี่ยม

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 25 มิ.ย. 2014 22:54
โดย nuiz
ปรับปรุงบทความใหม่ครับ ให้อ่านแล้วทำตามได้ง่ายยิ่งขึ้น

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 25 พ.ย. 2014 19:54
โดย nuiz
วันนี้ผมติดตั้ง pptpd บนเครื่องๆหนึ่ง (centos 5.11, i386) หลังจากไม่ได้ติดตั้งมาหลายเดือน เพราะหันไปใช้ vpn แบบอื่นแทน

ปรากฏว่าไม่เวอร์คครับ งงเลย ลองติดตั้งมาหลายเครื่องแล้วทั้งทำเล่นและทำจริง

อาการคือสามารถสั่งสตาร์ทได้ครับ (service pptpd start) เช็คดูพอร์ต tcp 1723 ก็รันอยู่ แต่ปรากฏว่าไอพีไม่เขึ้นครับ

คำสั่งเช็คไอพีในเครื่อง
โค้ด: เลือกทั้งหมด
ifconfig

ก็เห็นอยู่แค่นี้ครับ ไม่เห็นมีอินเตอร์เฟส ppp0 เลย
โค้ด: เลือกทั้งหมด
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx 
          inet addr:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.xxx.xxx  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1326684 errors:0 dropped:0 overruns:0 frame:0
          TX packets:62351 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:121782869 (116.1 MiB)  TX bytes:12417920 (11.8 MiB)
          Interrupt:169 Memory:82a50000-82a60000

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:151978 errors:0 dropped:0 overruns:0 frame:0
          TX packets:151978 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:17849181 (17.0 MiB)  TX bytes:17849181 (17.0 MiB)


ดูในไฟล์ /var/log/messages ก็เห็นข้อความแบบนี้

Nov 25 19:38:42 voip pptpd[32538]: MGR: Maximum of 100 connections reduced to 30, not enough IP addresses given
Nov 25 19:38:42 voip pptpd[32539]: MGR: Manager process started
Nov 25 19:38:42 voip pptpd[32539]: MGR: Maximum of 30 connections available

เพราะ error นี้หรือเปล่าก็เลยไม่เห็นอินเตอร์เฟส ppp0 ครับ ทำไงหล่ะทีนี้

ปัญหานี้แก้ได้แล้วครับ!!!!

จริงๆไม่ได้มีปัญหาอะไรเลย ปัญหาอยู่ที่ตัวผมเองครับ เรียกว่าวางยาตัวเองก็ถูก ลืม สงสัยสมองจะแย่แล้วครับ ข้อความที่ว่าก็ไม่ได้เกี่ยวอะไรเลย

เป็นเพราะผมยังไม่ได้คอนเน็ค pptp client เข้าไปครับ

พอใช้ pptp client คอนเน็คเข้าไปก็คอนเน็คได้ปกติครับ และตอนนี้เวลารันคำสั่ง ifconfig ก็เห็นอินเตอร์เฟส ppp0 แล้ว

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 24 ก.พ. 2015 13:35
โดย nuiz
มีลูกค้าท่านหนึ่งแจ้งว่าใช้งาน pptp vpn แล้วมันช้ามาก โดยเฉพาะการเปิดหน้าเว็บ อืดสุดๆ

หากใช้งานแล้วรู้สึกว่ามันช้ามาก มีวิธีแก้ไขครับ ดังนี้

1. แก้ไขไฟล์ /etc/ppp/ip-up
ให้เพิ่มบรรทัดนี้ไว้ก่อนบรรทัดสุดท้ายครับ

/sbin/ifconfig $1 mtu 1400

ซึ่งบรรทัดสุดท้ายคือ
exit 0

ดังนั้นจะได้แบบนี้ครับ
โค้ด: เลือกทั้งหมด
/sbin/ifconfig $1 mtu 1400

exit 0


เซฟไฟล์

2. รีสตาร์ท pptpd
โค้ด: เลือกทั้งหมด
service pptpd stop
service pptpd start


3. ทำการ disconnect/connect ฝั่ง client
ที่ฝั่ง client ให้ disconnect และ connect vpn ใหม่ จะรู้สึกได้เลยว่ามันเร็วขึ้นทันตาเห็นเลยครับ

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 06 เม.ย. 2015 21:56
โดย voipbx
ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS
ไฟล์คอนฟิก pptpd.conf
ไฟล์ /etc/pptpd.conf ให้แก้ไขบรรทัด localip และ remoteip ครับ เอาเครื่องหมาย # หน้าทั้งสองบรรทัดออกด้วย

localip 192.168.0.1
remoteip 192.168.0.11-15
แบบนี้ ผมไม่สามารถ เข้าใช้ IP 192.168.1.11 ได้

ผมต้องการ remoteip 192.168.0.11-15 เข้าใช้ IP 192.168.0.11 และ IP 192.168.1.12 ได้ต้องแก้ไขยังไงครับ พี่ nuiz

Re: ติดตั้ง PPTP VPN Server (PPTPD) บน CentOS

โพสต์โพสต์แล้ว: 08 เม.ย. 2015 16:01
โดย nuiz
เบสิคเน็ตเวอร์คเลยครับ

192.168.0.x ติดต่อกันได้อยู่แล้วเพราะอยู่ในเน็ตเดียวกัน และ 192.168.1.x ปัจจุบันติดต่อกับ 192.168.0.x ได้หรือไม่

ถ้าได้ก็ได้ครับ ไม่ว่า 192.168.0.x เครื่องนั้นจะอยู่บน LAN หรือ VPN

ลองดูครับ

สำคัญเวลาคุณคอนฟิกตั้งค่า localip ให้ชัวร์ว่าไอพีอยู่ในวง 192.168.0.x และไม่ซ้ำกับไอพีเครื่องอื่น