ต่อจากบทความ คอนฟิก OpenVPN แบบ Multiple Client – ตอนที่ 1 ในตอนที่ 2 นี้จะอธิบายการแก้ไขไฟล์คอนฟิก เพื่อทำหน้าที่เป็น VPN Client และ Server
คอนฟิก OpenVPN Server (VPN Server)
จากการติดตั้ง openvpn จะมีตัวอย่างไฟล์คอนฟิกเพื่อช่วยในการเริ่มต้นคอนฟิก โดยจะมีหลายไฟล์เหมาะกับการคอนฟิกแบบต่างๆ อยู่ในไดเร็คทอรี /usr/share/doc/openvpn-2.1/sample-config-files/
สำหรับ OpenVPN Server แบบ Multiple Client จะใช้ไฟล์คอนฟิกตัวอย่างคือ server.conf โดยต้อง copy ไฟล์ไปไว้ใน /etc/openvpn/
ตัวอย่างการสร้างไฟล์คอนฟิกของ OpenVPN Server ในที่นี้จะตั้งชื่อไฟล์เป็น vpn-server.conf
[root@vpn-server ~]# cd /etc/openvpn/ [root@vpn-server openvpn]# cp /usr/share/doc/openvpn-2.1/sample-config-files/server.conf vpn-server.conf
copy ไฟล์ Certificate, Privte Key และไฟล์ dh1024.pem ที่สร้างสำหรับ OpenVPN Server จากเครื่อง CA มาวางไว้ใน /etc/openvpn/
[root@vpn-server openvpn]# ls -l -rw-r--r-- 1 root root 9998 2008-10-31 17:54 vpn-server.conf -rw-r--r-- 1 root root 1245 2008-10-31 17:51 ca.crt -rw-r--r-- 1 root root 245 2008-10-31 17:51 dh1024.pem -rw-r--r-- 1 root root 3922 2008-10-31 17:52 vpn-server.crt -rw------- 1 root root 887 2008-10-31 17:52 vpn-server.key
แก้ไขไฟล์ vpn-server.conf โดยส่วนที่ต้องแก้คือชื่อไฟล์สำหรับเก็บคีย์ต่างๆ และ IP Address สำหรับเน็ตเวิร์กที่ VPN ใช้ ในที่นี้จะเลือกใช้ 10.1.1.0
ตัวอย่างไฟล์ /etc/openvpn/vpn-server.conf
# # VPN Server Configuration # /etc/openvpn/vpn-server.conf # port 1194 proto udp dev tun
ca ca.crt cert vpn-server.crt key vpn-server.key dh dh1024.pem
server 10.1.1.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb 3
ใช้คำสั่ง service เพื่อรันเซอร์วิส openvpn
[root@vpn-server openvpn]# service openvpn start Starting openvpn: [ OK ]
สามารถตรวจสอบผลการรันเซอร์วิส openvpn หากมีปัญหาต่างๆ ได้จากไฟล์ /var/log/messages
ตัวอย่างไฟล์ /var/log/messages ถ้ารันเซอร์วิส openvpn เพื่อทำหน้าที่เป็น OpenVPN Server ได้อย่างถูกต้อง
[root@vpn-server openvpn]# tail –f /var/log/messages Oct 31 18:29:51 vpn-server openvpn[3509]: OpenVPN 2.1_rc8 i386-redhat-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 14 2008 Oct 31 18:29:51 vpn-server openvpn[3509]: Diffie-Hellman initialized with 1024 bit key Oct 31 18:29:51 vpn-server openvpn[3509]: TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Oct 31 18:29:51 vpn-server kernel: tun0: Disabled Privacy Extensions Oct 31 18:29:51 vpn-server openvpn[3509]: TUN/TAP device tun0 opened Oct 31 18:29:51 vpn-server openvpn[3509]: TUN/TAP TX queue length set to 100 Oct 31 18:29:51 vpn-server openvpn[3509]: /sbin/ip link set dev tun0 up mtu 1500 Oct 31 18:29:51 vpn-server openvpn[3509]: /sbin/ip addr add dev tun0 local 10.1.1.1 peer 10.1.1.2 Oct 31 18:29:51 vpn-server openvpn[3509]: /sbin/ip route add 10.1.1.0/24 via 10.1.1.2 Oct 31 18:29:51 vpn-server openvpn[3509]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Oct 31 18:29:51 vpn-server openvpn[3519]: Socket Buffers: R=[110592->131072] S=[110592->131072] Oct 31 18:29:51 vpn-server openvpn[3519]: UDPv4 link local (bound): [undef]:1194 Oct 31 18:29:51 vpn-server openvpn[3519]: UDPv4 link remote: [undef] Oct 31 18:29:51 vpn-server openvpn[3519]: MULTI: multi_init called, r=256 v=256 Oct 31 18:29:51 vpn-server openvpn[3519]: IFCONFIG POOL: base=10.1.1.4 size=62 Oct 31 18:29:51 vpn-server openvpn[3519]: IFCONFIG POOL LIST Oct 31 18:29:51 vpn-server openvpn[3519]: Initialization Sequence Completed Oct 31 18:29:52 vpn-server ntpd[2606]: Listening on interface #23 tun0, 10.1.1.1#123 Enabled
เมื่อรันเซอร์วิส openvpn เรียบร้อย จะมีอินเตอร์เฟสใหม่ถูกสร้างขึ้นมา สามารถใช้คำสั่ง ifconfig และ netstat -rn เพื่อตรวจสอบได้
[root@vpn-server openvpn]# ifconfig ... tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.1.1 P-t-P:10.1.1.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@vpn-server openvpn]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.1.1.2 * 255.255.255.255 UH 0 0 0 tun0 10.1.1.0 10.1.1.2 255.255.255.0 UG 0 0 0 tun0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 0 0 0 eth0
นอกจากนี้จะมีไฟล์ชื่อ openvpn-status แสดงสถานะของ VPN ถูกเก็บอยู่ใน /etc/openvpn/
ตัวอย่างไฟล์ openvpn-status.log ตอนที่ยังไม่มีไคลเอนต์เครื่องใดเชื่อมต่อ VPN เข้ามา
[root@vpn-server openvpn]# cat /etc/openvpn/openvpn-status.log OpenVPN CLIENT LIST Updated,Fri Oct 31 18:31:01 2008 Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since ROUTING TABLE Virtual Address,Common Name,Real Address,Last Ref GLOBAL STATS Max bcast/mcast queue length,0 END
คอนฟิก OpenVPN Client (VPN Client)
สำหรับ OpenVPN Client เครื่องต่างๆ จะใช้ไฟล์คอนฟิกตัวอย่างคือ client.conf โดยต้อง copy ไฟล์ไปไว้ใน /etc/openvpn/
ตัวอย่างการสร้างไฟล์คอนฟิกของ OpenVPN Client #1 ในที่นี้จะตั้งชื่อไฟล์เป็น vpn-client1.conf
[root@vpn-server ~]# cd /etc/openvpn/ [root@vpn-server openvpn]# cp /usr/share/doc/openvpn-2.1/sample-config-files/server.conf vpn-client1.conf
copy ไฟล์ Certificate, Privte Key และไฟล์ dh1024.pem ที่สร้างสำหรับ OpenVPN Client #1 จากเครื่อง CA มาวางไว้ใน /etc/openvpn/ ด้วย
[root@vpn-client1 openvpn]# ls -l -rw-r--r-- 1 root root 262 2008-10-31 18:34 vpn-client1.conf -rw-r--r-- 1 root root 1245 2008-10-31 17:53 ca.crt -rw-r--r-- 1 root root 3805 2008-10-31 17:53 vpn-client1.crt -rw------- 1 root root 887 2008-10-31 17:53 vpn-client1.key
แก้ไขไฟล์ vpn-client1.conf โดยส่วนที่ต้องแก้คือชื่อไฟล์สำหรับเก็บคีย์ต่างๆ และ IP Address จริง ของ OpenVPN Server ในที่นี้คือ 192.168.1.1
ตัวอย่างไฟล์ /etc/openvpn/vpn-client1.conf
# # OpenVPN Client #1 Configuration # /etc/openvpn/vpn-client1.conf # client dev tun
proto udp remote 192.168.1.1 1194
resolv-retry infinite nobind persist-key persist-tun
ca ca.crt cert vpn-client1.crt key vpn-client1.key
comp-lzo verb 3
ใช้คำสั่ง service เพื่อรันเซอร์วิส openvpn ทำหน้าที่เป็น OpenVPN Client เครื่องที่ 1
[root@vpn-client1 openvpn]# service openvpn start Starting openvpn: [ OK ]
สามารถตรวจสอบไฟล์ /var/log/messages เพื่อดูผลการรัน openvpn ได้
ตัวอย่างไฟล์ /var/log/messages ในกรณีที่รัน openvpn เพื่อทำหน้าที่เป็น OpenVPN Client ได้อย่างถูกต้อง
[root@vpn-client1 openvpn]# tail -f /var/log/messages Oct 31 18:36:18 vpn-client1 openvpn[2705]: OpenVPN 2.1_rc8 i386-redhat-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun 14 2008 Oct 31 18:36:18 vpn-client1 openvpn[2705]: WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. Oct 31 18:36:18 vpn-client1 openvpn[2705]: LZO compression initialized Oct 31 18:36:18 vpn-client1 openvpn[2705]: Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Oct 31 18:36:18 vpn-client1 openvpn[2705]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Oct 31 18:36:18 vpn-client1 openvpn[2705]: Local Options hash (VER=V4): '41690919' Oct 31 18:36:18 vpn-client1 openvpn[2705]: Expected Remote Options hash (VER=V4): '530fdded' Oct 31 18:36:18 vpn-client1 openvpn[2707]: Socket Buffers: R=[110592->131072] S=[110592->131072] Oct 31 18:36:18 vpn-client1 openvpn[2707]: UDPv4 link local: [undef] Oct 31 18:36:18 vpn-client1 openvpn[2707]: UDPv4 link remote: 192.168.1.1:1194 Oct 31 18:36:18 vpn-client1 openvpn[2707]: TLS: Initial packet from 192.168.1.1:1194, sid=06a517e0 1a81cb8b Oct 31 18:36:18 vpn-client1 openvpn[2707]: VERIFY OK: depth=1, /C=TH/ST=Nonthaburi/L=Pak_Kret/O=My Company Name/CN=My Company Name_CA/emailAddress=info@my-vpn-network.com Oct 31 18:36:18 vpn-client1 openvpn[2707]: VERIFY OK: depth=0, /C=TH/ST=Nonthaburi/L=Pak_Kret/O=My Company Name/CN=vpn-server/emailAddress=info@my-vpn-network.com Oct 31 18:36:18 vpn-client1 openvpn[2707]: Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Oct 31 18:36:18 vpn-client1 openvpn[2707]: Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Oct 31 18:36:18 vpn-client1 openvpn[2707]: Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Oct 31 18:36:18 vpn-client1 openvpn[2707]: Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Oct 31 18:36:18 vpn-client1 openvpn[2707]: Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Oct 31 18:36:18 vpn-client1 openvpn[2707]: [vpn-server] Peer Connection Initiated with 192.168.1.1:1194 Oct 31 18:36:20 vpn-client1 openvpn[2707]: SENT CONTROL [vpn-server]: 'PUSH_REQUEST' (status=1) Oct 31 18:36:20 vpn-client1 openvpn[2707]: PUSH: Received control message: 'PUSH_REPLY,route 10.1.1.1,topology net30,ping 10,ping-restart 120,ifconfig 10.1.1.6 10.1.1.5' Oct 31 18:36:20 vpn-client1 openvpn[2707]: OPTIONS IMPORT: timers and/or timeouts modified Oct 31 18:36:20 vpn-client1 openvpn[2707]: OPTIONS IMPORT: --ifconfig/up options modified Oct 31 18:36:20 vpn-client1 openvpn[2707]: OPTIONS IMPORT: route options modified Oct 31 18:36:20 vpn-client1 kernel: tun0: Disabled Privacy Extensions Oct 31 18:36:20 vpn-client1 openvpn[2707]: TUN/TAP device tun0 opened Oct 31 18:36:20 vpn-client1 openvpn[2707]: TUN/TAP TX queue length set to 100 Oct 31 18:36:20 vpn-client1 openvpn[2707]: /sbin/ip link set dev tun0 up mtu 1500 Oct 31 18:36:20 vpn-client1 openvpn[2707]: /sbin/ip addr add dev tun0 local 10.1.1.6 peer 10.1.1.5 Oct 31 18:36:20 vpn-client1 openvpn[2707]: /sbin/ip route add 10.1.1.1/32 via 10.1.1.5 Oct 31 18:36:20 vpn-client1 openvpn[2707]: Initialization Sequence Completed
ถ้ารันไคลเอนต์ได้อย่างถูกต้อง จะมีอินเตอร์เฟส ใหม่ถูกสร้างขึ้นมา สามารถตรวจสอบได้จากคำสั่ง ifconfig และ netstat –rn
[root@vpn-client1 openvpn]# ifconfig … tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.1.6 P-t-P:10.1.1.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@vpn-client1 openvpn]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.1.1.5 * 255.255.255.255 UH 0 0 0 tun0 10.1.1.1 10.1.1.5 255.255.255.255 UGH 0 0 0 tun0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 0 0 0 eth0
ใช้คำสั่ง ping เพื่อทดสอบการส่งข้อมูลผ่าน VPN ไปยัง VPN Server
[root@vpn-client1 openvpn]# ping -n 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=1.10 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.822 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=1.07 ms ^C --- 10.1.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2407ms rtt min/avg/max/mdev = 0.822/1.000/1.103/0.131 ms
สำหรับ VPN Cilent เครื่องอื่นๆ สามารถคอนฟิกในทำนองเดียวกัน เพียงแต่ต้องใช้ Certificate และ Private Key สำหรับไคลเอนต์เครื่องต่างๆ
ตรวจสอบสถานะการเชื่อมต่อ VPN บนเครื่อง Server
ตัวอย่างไฟล์ /var/log/messages ที่เกิดขึ้นบนเครื่อง OpenVPN Server เมื่อมีการเชื่อมต่อ VPN มาจาก OpenClient
[root@vpn-server openvpn]# tail -f /var/log/messages Oct 31 18:36:18 vpn-server openvpn[3519]: MULTI: multi_create_instance called Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Re-using SSL/TLS context Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 LZO compression initialized Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Local Options hash (VER=V4): '530fdded' Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Expected Remote Options hash (VER=V4): '41690919' Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 TLS: Initial packet from 192.168.1.101:51931, sid=75f786a8 cd2868f2 Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 VERIFY OK: depth=1, /C=TH/ST=Nonthaburi/L=Pak_Kret/O=My Company Name/CN=My Company Name_CA/emailAddress=info@my-vpn-network.com Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 VERIFY OK: depth=0, /C=TH/ST=Nonthaburi/L=Pak_Kret/O=My Company Name/CN=vpn-client1/emailAddress=info@my-vpn-network.com Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Oct 31 18:36:18 vpn-server openvpn[3519]: 192.168.1.101:51931 [vpn-client1] Peer Connection Initiated with 192.168.1.101:51931 Oct 31 18:36:18 vpn-server openvpn[3519]: vpn-client1/192.168.1.101:51931 MULTI: Learn: 10.1.1.6 -> vpn-client1/192.168.1.101:51931 Oct 31 18:36:18 vpn-server openvpn[3519]: vpn-client1/192.168.1.101:51931 MULTI: primary virtual IP for vpn-client1/192.168.1.101:51931: 10.1.1.6 Oct 31 18:36:20 vpn-server openvpn[3519]: vpn-client1/192.168.1.101:51931 PUSH: Received control message: 'PUSH_REQUEST' Oct 31 18:36:20 vpn-server openvpn[3519]: vpn-client1/192.168.1.101:51931 SENT CONTROL [vpn-client1]: 'PUSH_REPLY,route 10.1.1.1,topology net30,ping 10,ping-restart 120,ifconfig 10.1.1.6 10.1.1.5' (status=1)
ตัวอย่างไฟล์ openvpn-status.log เมื่อมีการเชื่อมต่อจาก VPN Client เรียบร้อยแล้ว
[root@vpn-server ~]# cat /etc/openvpn/openvpn-status.log OpenVPN CLIENT LIST Updated,Fri Oct 31 18:39:18 2008 Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since vpn-client1,192.168.1.101:51931,5563,6519,Fri Oct 31 18:36:18 2008 ROUTING TABLE Virtual Address,Common Name,Real Address,Last Ref 10.1.1.6,vpn-client1,192.168.1.101:51931,Fri Oct 31 18:38:59 2008 GLOBAL STATS Max bcast/mcast queue length,0 END
ทดสอบ ping จากเครื่องเซิร์ฟเวอร์กลับไปยังไคลเอนต์ผ่านทาง VPN ได้
[root@vpn-server ~]# ping -n 10.1.1.6 PING 10.1.1.6 (10.1.1.6) 56(84) bytes of data. 64 bytes from 10.1.1.6: icmp_seq=1 ttl=64 time=0.816 ms 64 bytes from 10.1.1.6: icmp_seq=2 ttl=64 time=0.624 ms ^C --- 10.1.1.6 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1303ms rtt min/avg/max/mdev = 0.624/0.720/0.816/0.096 ms
Great!! it’s work.
สอบถามเพิ่มเติมครับถ้าอยากใช้ระบบ user & password เนี่ยต้อง config เพิ่มอย่างไรบ้างครับ
และขอคำแนะนำในการกำหนดให้ client สามารถออก internet ผ่าน VPN server ด้วยครับ
ขอบคุณครับ
สามารถ ping เป็นชื่อเครื่องได้ไหมครับ. ผมลองทำแล้ว ping ได้แต่ ip แต่พอ ping ชื่อ จะไม่ได้