2/23/2554

OpenVPN : VPN Server ที่ทำงานบนโปรโตคอล SSL

"ในโลกที่ปกคลุมไปด้วยอินเตอร์เนตบรอดแบนด์ VPN หรือ Virtual Private Network กำลังจะทำให้แอปพลิเคชั่นในสำนักงานสามารถติดตามคุณไปได้ทุกที่ OpenVPN คือโซลูชั่นที่จะทำให้ฝันของคุณเป็นจริง"

ในยุคก่อนที่จะมี อินเตอร์เนตความเร็วสูง การใช้ VPN ( Virtual Private Network ) ผ่านเครือข่ายอินเตอร์เนตเพื่อเข้ามาใช้งานภายในองค์กรคงเป็นเรื่องที่ต้อง ทำใจพอสมควร ยิ่งถ้าต้องติดต่ออินเตอร์เนตโดยผ่านโมเด็มแบบ 56K ด้วยแล้ว การใช้งานที่ต้องการใช้แบนด์วิดสูงๆ แทบเป็นไปไม่ได้เลย แต่ในยุคปัจจุบันอินเตอร์เนตความเร็วสูงโดยเฉพาะ ADSL ที่มีการพัฒนาอย่างต่อเนื่อง และในอนาคตจะมี ADSL2 และ ADSL2+ ซึ่งความเร็วจะสูงกว่าปัจจุบันอีกมาก ( ADSL2+ มีความเร็วสูงสุดถึง 24 Mbps ) ประกอบกับค่าบริการที่ถูกลง ทำให้ลดช่องว่างระหว่างการนั่งทำงานภายในออฟฟิศ กับการเข้ามาใช้งานจากระยะไกลลงได้ โดยเฉพาะอย่างยิ่ง การใช้งานแอพพลิเคชันที่ไม่ได้ออกแบบมาเพื่อให้ทำงานผ่านอินเตอร์เนต VPN นับว่าเป็นหนทางหนึ่งที่จะช่วยแก้ปัญหานี้ได้ ในโลกของซอฟต์แวร์เสรีมีซอฟต์แวร์ VPN รอให้ท่านผู้อ่านนำไปประยุกต์ใช้ซึ่งแบ่งได้เป็น 3 กลุ่มดังนี้



VPN แบบ pptp ซอฟต์แวร์ในกลุ่มนี้ได้แก่ Poptop เป็น VPN Server บนลีนุกซ์ที่ใช้
โป รโตคอล pptp ( Point-to-Point Tunneling Protocol ) ในการติดต่อกัน ซึ่งนับได้ว่า Poptop เป็น VPN Server ซึ่งมีความเข้ากันได้ดีกับไคลเอนต์บนวินโดวส์ โดยสามารถใช้ VPN Client ของวินโดวส์ได้ทันที
VPN แบบ IPSec ซอฟต์แวร์ในกลุ่มนี้ได้แก่ FreeS/WAN และ Openswan VPN บน
โป รโตคอล IPSec ( IP Security Protocol ) ถือได้ว่าเป็น VPN ที่ได้รับความนิยมไม่ว่าจะเป็น ซอฟต์แวร์แบบเปิดเผยรหัสหรือไม่เปิดเผยรหัส เนื่องจากว่ามีความปลอดภัยสูง แต่ด้วยความซับซ้อนทำให้การติดตั้งค่อนข้างลำบากโดยเฉพาะการติดตั้ง IPSec ผ่านระบบ NAT ( Network Address Translation ) นอกจากนี้การติดตั้ง VPN แบบ IPSec บนลีนุกซ์จำเป็นต้องมีการ Patch Kernel ด้วย
VPN แบบ tun/tap ได้แก่ OpenVPN ,Vtune ,tinc และ CIPE โดยในบทความครั้งนี้จะกล่าวถึง OpenVPN โดยเฉพาะ ซึ่งเป็น VPN Server ที่ทำงานบนโปรโตคอล SSL ( Secure Socket Layer ) การติดตั้งเหมือนการใช้งานแอพพลิเคชันทั่วไปที่ทำงานร่วมกับ SSL ซึ่งมีผลให้การติดตั้งไม่ยุ่งยากและที่สำคัญสามารถวิ่งได้หลายแพลตฟอร์มไม่ ว่าจะเป็น Linux, Windows 2000/XP (หรือสูงกว่า), OpenBSD, FreeBSD, NetBSD, Mac OS X, และ Solaris
ท่านสามารถดูตารางเปรียบเทียบ VPN Server ทั้ง 3 กลุ่มได้ที่
http://www.math.ucla.edu/~jimc/documents/vpn.html สำหรับบทความนี้จะพูดถึงการใช้งาน OpenVPN โดยให้ VPN Server ทำงานบนลีนุกซ์และใช้ VPN Client ซึ่งทำงานอยู่บนวินโดวส์นิยามศัพท์ของ VPN

TUN    ( Virtual Point-to-Point network device ) ไดร์เวอร์ TUN ผูกติดกับ Kernel ของลีนุกซ์ซึ่งพร้อมใช้งานได้ ทันทีใน Fedora Core แต่ถ้าเป็นตระกูล RedHat Clone จะไม่ได้คอมไพล์ TUN มาให้ จึงต้องคอมไพล์ Kernel ใหม่ TUN device มีหน้าที่สร้างอุโมงค์ไอพี ( IP tunneling ) แอพพลิเคชันจะทำการอ่านและเขียน IP Frame ผ่าน TUN

ข้อดี สำหรับการทำงานผ่าน TUN

ทำงานได้รวดเร็ว

ข้อเสีย สำหรับการทำงานผ่าน TUN

สนับสนุน IP Frame เท่านั้น
VPN Client ที่ติดต่อเข้ามาจะอยู่คนละ Subnet Mask กับ VPN Server TAP ( Virtual Ethernet network device ) ทำหน้าที่คล้ายกับ TUN เพียงแต่แอปพลิเคชันจะทำหน้าที่อ่านและเขียน Ethernet Frame ผ่าน TAP device

ข้อดี สำหรับการทำงานผ่าน TAP

สนับสนุน Ethernet Frame จึงสามารถใช้โปรโตคอลอื่นๆ นอกเหนือจากไอพีได้ เช่น IPX
VPN Client ที่ติดต่อเข้ามาจะมี Subnet Mask เดียวกับ VPN Server

ข้อเสีย สำหรับการทำงานผ่าน TAP

ทำ งานช้ากว่า TUN Passive Attack คือ ผู้แอบดูข้อมูลระหว่างเครื่องคอมพิวเตอร์ 2 เครื่องที่กำลังติดต่อกัน วิธีการป้องกันคือ การเข้ารหัสข้อมูล
Active Attack คือ ผู้ที่มีความสามารถเข้ามาแทรก หรือเพิ่มเติมแก้ไขข้อมูลระหว่างทางที่เครื่องคอมพิวเตอร์กำลังติดต่อกัน วิธีการป้องกันคือ พิสูจน์ตัวตน ( authentication ) OpenVPN ใช้ HMAC ในการพิสูจน์ตัวตนในการแลกเปลี่ยนแพ็กเก็ต แนวคิดของ OpenVPN OpenVPN พัฒนาโดย James Yonan ซึ่งมีแนวคิดการออกแบบให้สามารถใช้งานได้หลากหลายแพล็ตฟอร์ม การติดตั้งต้องสามารถทำได้ง่าย ปลอดภัย รวมถึงความรวดเร็วทำงาน ดังนั้น OpenVPN จึงนำแนวคิดเหล่านี้ถ่ายทอดออกมาเป็นในรูปแบบการส่งข้อมูลที่เข้ารหัสแล้ว ผ่านโปรโตคอล UDP ( User Datagram Protocol ) ซึ่ง James Yonan ได้บอกว่าการนำข้อมูลที่เข้ารหัส ห่อหุ้มด้วย IP Frame และวิ่งไปบนโปรโตคอล UDP เป็นทางเลือกที่ดีที่สุด ( ในกรณีที่ต้องการให้ IP Frame วิ่งบน TCP ก็สามารถทำได้แต่ค่าปรกติที่กำหนดไว้คือ UDP ) ดังรูปที่ 1


รูปที่ 1 การส่งข้อมูลผ่าน OpenVPN โดยส่งผ่านโพรโตคอลผ่าน UDP

หมายเหตุ :
ท่านสามารถอ่านเหตุผลการทำ VPN ซึ่งส่งข้อมูลผ่าน tun/tap วิ่งไปบน
โปรโตคอล UDP ได้ที่

http://sites.inka.de/bigred/devel/tcp-tcp.html
http://openvpn.sourceforge.net/papers/BLUG-talk/
OpenVPN รุ่นก่อนหน้าเวอร์ชัน 2.0 จะต้องทำการติดตั้งอินเตอร์เฟส TUN/TAP ที่ VPN Server ตามจำนวนที่ VPN Client ที่ติดต่อเข้ามา เช่น มี VPN Client จำนวน10 เครื่องที่ต้องการติดต่อกับเครื่อง VPN Server จะต้องติดตั้ง TUN/TAP ไว้ 10 อินเตอร์เฟส (TUN0/TAP0-9) บนเครื่อง VPN Server แต่ OpenVPN 2.0 ขึ้นไป สามารถใช้งานหลาย VPN Client ผ่านอินเตอร์เฟส TUN/TAP เพียงอินเตอร์เฟสเดียวได้ ดังนั้นในบทความนี้จะพูดถึง OpenVPN 2.0 ขึ้นไปคุณสมบัติของ OpenVPN
ทำอุโมงค์แบบ IP Frame และแบบ Ethernet Frame ได้
มีความปลอดภัยในระดับป้องกันทั้ง Passive Attack และ Active Attack
ทำ chroot environment และสามารถวิ่งในสิทธิ์ของยูสเซอร์ธรรมดาได้ หลังจาก Initialize สำเร็จแล้ว
ทำ Load Balance กรณีที่มี VPN เซิร์ฟเวอร์หลายตัว
สนับสนุนการเข้ารหัสในรูปแบบ Pre-shared Keys และ Certficated Keys
สนับสนุนการทำงานในรูปแบบ HMAC Authentication
สนับสนุนการบีบอัดข้อมูลเพื่อลดปริมาณการจราจรบนเครือข่าย
ทำ DHCP เพื่อแจกจ่ายไปยัง VPC ไคลเอนต์ ไม่ว่าจะเป็นการกำหนด route, DNS, WINS ซึ่งเหมาะกับการใช้งานแบบ road-warrior
ทำอุโมงค์ผ่าน NAT ได้
ไม่ต้องแก้ไข kernel โดยปกติ kernel ของลีนุกซ์จะสนับสนุนการใช้งาน tun/tap อยู่แล้ว
ใช้ได้หลากหลายแพล็ตฟอร์มดังที่ได้กล่าวไปแล้วข้างต้น
OpenVPN เป็น GPL

ผังเน็ตเวิร์กตัวอย่างสำหรับการติดตั้ง VPN




รูปที่ 2 ผังเน็ตเวิร์กตัวอย่างสำหรับการทดสอบ OpenVPN

ข้อมูลเพิ่มเติมจากเน็ตเวิร์กตัวอย่าง

  VPN Server VPN Client
Local Address 192.168.0.254 From VPN Server
Tunnel Endpoint 192.168.100.1 192.168.100.2
OpenVPN Gateway (Router) DHCP From ISP DHCP From ISP


เตรียมแพกเกจก่อนการติดตั้ง
แหล่งที่มาของซอฟต์แวร์ OpenVPN คือ http://openvpn.sourceforge.net ไปที่เมนู Download จะพบไฟล์ 3 ไฟล์ดังนี้
Windows Installer: openvpn-2.0_rc1-install.exe
Source (Tarball): openvpn-2.0_rc1.tar.gz
Source (Zip): openvpn-2.0_rc1.zip ให้ดาวน์โหลด openvpn-2.0_rc1.tar.gz เพื่อที่จะทำ VPN Server ( บนเครื่องลีนุกซ์ ) และ openvpn-2.0_rc1-install.exe สำหรับ VPN client ( บนเครื่องวินโดวส์ )กรณีที่ต้องการใช้การบีบอัดข้อมูลเพื่อความรวดเร็วในการทำงานต้องเตรียมแพ กเกจ lzo ด้วย สามารถดาวน์โหลดได้ที่ http://dag.wieers.com/packages/lzo/ โดยให้เลือกไฟล์ rpm ให้เหมาะสมกับระบบปฏิบัติการของท่านในกรณีต้องการใช้งานในแบบ GUI ผ่าน VPN Client ท่านสามารถดาวน์ VPN GUI ได้ที่ http://www.nilings.se/openvpn/download.htmlโดยเลือกไฟล์ openvpn-gui-1.0.exe การติดตั้ง VPN Server บนลีนุกซ์

ติดตั้งแพกเกจ
ติดตั้ง lzo ด้วยคำสั่ง rpm -i lzo-1.08-3.1.xxx.rpm
ติดตั้ง openvpn ด้วยคำสั่ง rpm -tb openvpn-2.0_rc1.tar.gz จะได้แพกเกจ openvpn-2.0_rc1-1.rpm
ติดตั้ง openvpn อีกครั้งด้วยคำสั่ง rpm -i openvpn-2.0_rc1-1.rpm
สร้างคีย์เพื่อทำ SSL
เปลี่ยนไดเรกทอรีไปที่ /usr/share/openvpn/easy-rsa
สร้างค่าตัวแปรโดยการเรียก . vars
ลบข้อมูลเดิมด้วยคำสั่ง ./clean-all
สร้าง Certificate Authority (CA) ด้วยคำสั่ง ./build-ca ( ตอบคำถามการสร้าง CA )
สร้างกุญแจสำหรับเครื่อง VPN Server ด้วยคำสั่ง ./build-key server (ตอบคำถามตามความเหมาะสมสำหรับการสร้างกุญแจ)
สร้างกุญแจสำหรับเครื่อง VPN Client ด้วยคำสั่ง ./build-key client (ตอบคำถามตามความเหมาะสมสำหรับการสร้างกุญแจ)
สร้างคีย์ Diffie-hellman ด้วยคำสั่ง ./build-dh
นำคีย์ที่ได้จากการสร้างคือ ca.crt, server.key, server.crt, dh1024.pem ไปไว้ที่ /etc/openvpn
กรณีต้องการใช้งาน auth-pam.pl ให้ทำสำเนาจาก /usr/share/openvpn/sample-scripts/auth-pam.pl ไปที่ /etc/openvpn


สร้างไฟล์ /etc/openvpn/server.conf
port 1194
dev tun
#dev tap

tls-server

dh dh1024.pem
ca ca.crt
cert server.crt
key server.key

auth-user-pass-verify ./auth-pam.pl via-file
#client-disconnect ./logoff.sh

#up ./openvpn.up

mode server
duplicate-cn
ifconfig 192.168.100.1 192.168.100.2 #(tun)
#ifconfig 192.168.100.1 255.255.255.0 #(tap)

ifconfig-pool 192.168.100.100 192.168.100.200 # (tun)IP range for openvpn client
#ifconfig-pool 192.168.100.100 192.168.100.200 255.255.255.0 # (tap)IP range fomtu-test
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ping 10
ping-restart 120

push "ping 10"
push "ping-restart 60"

push "dhcp-option DOMAIN ccm.com"    # push the DNS domain suffix
push "dhcp-option DNS 192.168.0.254"     # push DNS entries to openvpn client
push "dhcp-option WINS 192.168.0.254"    # push DNS entries to openvpn client
push "route 192.168.0.0 255.255.255.0" # (tun)add route to to protected network
push "route 192.168.100.1" # (tun)add route to to protected network
#push "route 192.168.0.0 255.255.255.0 192.168.100.1" # (tap)add route to to pro tected network
;user nobody
;group nobody
comp-lzo
status-version 2
status openvpn-status.log
verb 3
หมายเหตุ ไฟล์ server.conf สามารถดูตัวอย่างพร้อมคำอธิบายได้ที่ไดเรกทอรี
/usr/share/openvpn/sample-config-files จากตัวอย่างไฟล์ server.conf ข้างต้นจะเห็นเครื่องหมายคอมเมนต์ของการใช้งานผ่าน TAP ในกรณีผู้อ่านต้องการใช้ VPN ผ่าน TAP ให้ทำเครื่องหมายคอมเมนต์ที่ TUN และนำเครื่องหมายคอมเมนต์หน้าบรรทัด TAP ออก




สั่งให้ openvpn ทำงานด้วยคำสั่ง service openvpn start ถ้าระบบพร้อมที่จะทำงานผู้อ่านควรตรวจสอบด้วยคำสั่งเหล่านี้ก่อนที่เริ่มติด ตั้ง VPN Client
ใช้คำสั่ง ifconfig จะพบ tun device tun0     Link encap:Point-to-Point Protocol
inet addr:192.168.100.1 P-t-P:192.168.100.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:689 errors:0 dropped:0 overruns:0 frame:0
TX packets:735 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:87131 (85.0 Kb) TX bytes:105585 (103.1 Kb)


ใช้คำสั่ง ifconfig จะพบ tap device (กรณีใช้ tap) tap0     Link encap:Ethernet HWaddr 00:FF:30:23:39:94
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1293 errors:0 dropped:0 overruns:0 frame:0
TX packets:1355 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:161389 (157.6 Kb) TX bytes:468689 (457.7 Kb)


ใช้คำสั่ง netstat -na | grep 1194 udp      0      0 0.0.0.0:1194       0.0.0.0:*

กรณี ที่ระบบของท่านมีไฟล์วอลล์กรุณาให้ไฟร์วอลล์ของท่านเปิดรับ UDP Port 1194 และเปิดรับแพกเก็ตที่มาจากอุปกรณ์ TUN หรือ TAP ด้วย และในกรณีที่ต้องการใช้งานผ่าน Samba อย่าลืมกำหนดให้ Samba รับไอพีแอดเดรสของ VPN Client ด้วย สำหรับตัวอย่างการเปิดไฟร์วอลล์เพื่ออนุญาตการใช้งาน OpenVPN สามารถดูได้ดังนี้

http://openvpn.sourceforge.net/howto.html ( กรณีใช้ Iptables )
http://www.shorewall.net/OPENVPN.html ( กรณีใช้ Shorewall )

การติดตั้ง VPN Client บนวินโดวส์

ติดตั้งโปรแกรม
openvpn-2.0_rc1-install.exe
openvpn-gui-1.0-beta26.exe ( เป็นไฟล์เดี่ยวๆ ไม่ต้องติดตั้ง สามารถเรียกใช้งานได้เลย )

หลัง จากติดตั้งโปรแกรมเรียบร้อยเราจะได้ Local Connection ที่เป็น TAP-Win32 Adapter สามารถตรวจสอบได้ที่ Network Connections ดังรูปที่ 3



รูปที่ 3 TAP Adapter ถูกสร้างขึ้นหลังจากติดตั้ง OpenVPN

ในกรณีที่ติดตั้งแล้วยังไม่ได้ TAP-Win32 Adapter ให้ไปที่เมนู /Start/Openvpn/Add a new TAP-Win32 virtual ethernet adapter


สร้าง คีย์เพื่อทำ SSL เราได้มีการสร้างคีย์ไว้ในช่วงของการติดตั้ง VPN Server ให้ทำการสำเนาไฟล์ที่เกี่ยวข้อง 3 ไฟล์มายังผู้ใช้ VPN Client คือ ca.crt, client.crt, client.key หลังจากนั้นให้นำคีย์ทั้ง 3 ไปไว้ที่ไดเรกทอรี Program FilesOpenVPNconfig

สร้างไฟล์ client.ovpn ไฟล์นี้จะคล้ายกับไฟล์คอนฟิกเกอเรชันที่อยู่บนเครื่องเซิร์ฟเวอร์ แต่ถ้าวิ่งอยู่บนวินโดวส์เราจะใช้นามสกุลเป็น ovpn ซึ่งเราจะต้องกำหนดดังนี้

#dev tap
dev tun
port 1194

remote <ชื่อของ VPN Server หรือจะใช้เป็นไอพีแอดเดรสก็ได้>

tls-client
auth-user-pass

ca ca.crt
cert client.crt
key client.key

mtu-test
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
pull

comp-lzo
verb 4


สั่ง ให้ OpenVPN ทำงานด้วยการคลิกขวาที่ไฟล์ client.ovpn เลือก Start OpenVPN on this config file หรือจะใช้ openvpn-gui ให้ดับเบิ้ลคลิกที่ openvpn-gui หลังจากนั้นจะปรากฏ openvpn-gui เป็น Tray Icon อยู่ด้านล่างให้คลิกขวาเลือก Connect เพื่อทำการเชื่อมต่อกับ VPN Server ที่เราได้กำหนดในไฟล์ client.ovpn เมื่อเชื่อมต่อเรียบร้อย open-gui ที่ Tray Icon จะมีสีเขียว หลังจากนั้นให้ทดสอบการทำงานผ่าน VPN ได้ตามต้องการ จากนั้นเรามาตรวจสอบค่าของของการเชื่อมต่อของ Local Area Connection 4 จะปรากฏข้อมูลดังรูปที่ 4 และรูปที่ 5



รูปที่ 4 ข้อมูล TAP Adapter หลังจากเชื่อมต่อแบบ TUN



รูปที่ 5 ข้อมูล TAP Adapter หลังจากเชื่อมต่อแบบ TAP

นำ VPN ไปประยุกต์ใช้
OpenVPN เป็น VPN ที่มีความสามารถค่อนข้างครบครันในระดับหนึ่ง ไม่ว่าจะเป็นเรื่องความง่ายในการใช้งาน ระบบความปลอดภัย การใช้งานได้หลากหลายแพลตฟอร์ม ประกอบกับเอกสารที่มีมากมายซึ่งหาได้จากเว็บไซต์ของ OpenVPN ทำให้ผู้ที่จะเริ่มต้นการลงระบบ VPN คงเป็นเรื่องไม่ยากนัก ตัวผู้เขียนหลังจากทดสอบการใช้งานผ่าน Windows Explorer พบว่ามีความเร็วในระดับที่น่าพอใจทั้งในรูปแบบการติดต่อผ่าน TUN และ TAP หลังจากนั้นลองทดสอบเรียกไฟล์ Northwind.mdb ซึ่งมีขนาด 2 MB ด้วยโปรแกรม MS Access ใช้เวลาประมาณ 5 วินาที ( บน ADSL ความเร็ว 1 Mbps ) สำหรับท่านที่มีอินเตอร์เนตความเร็วสูงกว่านี้ ( ประมาณ 2 MB ขึ้นไป ) ลองทดสอบกับแอพพลิเคชันที่เขียนในรูปแบบ Client/Server อาจทำให้แอพลิเคชันจากเดิมที่สามารถใช้งานภายเพียงแค่ในออฟฟิศ เปลี่ยนมาใช้งานผ่าน VPN ซึ่งมีความปลอดภัย โดยที่ท่านไม่จำเป็นต้องไปเขียนแอพพลิเคชันใหม่เพื่อวิ่งบนอินเตอร์เนต
--------------------------------------------------------------------------------
แหล่งข้องมูลอ้างอิง
http://openvpn.sourceforge.net/howto.html
http://openvpn.sourceforge.net/papers/openvpn-101.pdf
http://www.math.ucla.edu/~jimc/documents/vpn.html
http://www.linuxjournal/article/7949
http://www.sans.org/rr/papers/20/1459.pdf
http://fedoranews.org/contributors/florin_andrei/openvpn/

Source : http://www.itdestination.com/



ลิงข้อมูลเกียวข้อง
http://www.thaiadmin.org/board/index.php?action=printpage;topic=33840.0

0 ความคิดเห็น:

แสดงความคิดเห็น