19:02
  
  

"ใน โลกที่ปกคลุมไปด้วยอินเตอร์เนตบรอดแบนด์ 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 Files\OpenVPN\config 
สร้างไฟล์ 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/ 
 
 
 
 
          
      
 
  
 
 
 
  
 
0 ความคิดเห็น:
แสดงความคิดเห็น