Linux Openvpn Client to Mikrotik
บทความติดตั้ง Openvpn Client บนระบบปฏิบัติการ Debian/Ubuntu รวมถึงอุปกรณ์ Raspberry pi เพื่อเชื่อมต่อไปยัง Openvpn Server ที่เป็นอุปกรณ์ Mikrotik
จากที่ผมได้เคยทำบทความติดตั้ง Openvpn บน Private IP ไปแล้วนั้น ในบทความนี้จะเป็นบทความเกี่ยวกับการติดตั้ง Openvpn Client ลงบน OS ที่เป็น Linux Debian ซึ่งวิธีการติดตั้งนี้ยังรวมถึงอุปกรณ์ Raspberry pi ด้วย เนื่องจาก Raspberry pi นั้นเป็น OS ที่มีพื้นฐานมาจาก Debian นั่นเอง
สิ่งที่ต้องมีก่อนการติดตั้งตามบทความนี้?
สำหรับบทความนี้จะไม่ได้กล่าวถึงขั้นตอนการติดตั้ง OS ทั้ง Linux และ Raspberry pi ท่านต้องเตรียมความพร้อมโดยการติดตั้ง OS ลงในอุปกรณ์ที่จะนำมาทำตามบทความให้เรียบร้อย ซึ่งจะลงเป็น OS เวอร์ชั่น Lite ก็ได้
ฝั่ง Server จะต้องติดตั้ง Openvpn Server บน Mikrotik ให้เรียบร้อยพร้อมใช้งานให้ทดสอบให้มั่นใจว่า Openvpn Server นั้นทำงานได้แน่ ๆ
ฝั่ง Client ติดตั้ง OS ให้เรียบร้อยสามารถใช้สิทธิ์ root รีโมทผ่าน putty เข้าไปยังอุปกรณ์ได้
สร้าง Account ฝั่ง Openvpn Server เพื่อรอการเชื่อมต่อ
ทางฝั่ง Server เราต้องสร้าง Account ในการเชื่อมต่อไว้ กำหนด Username และ Password ที่จะใช้ในการเชื่อมต่อแล้วอาจจะกำหนด Local Address/Remote Address ไว้ด้วยก็ได้ ในกรณีที่ต้องการ Fixed IP ให้กับ Client ที่เชื่อมต่อเข้ามา กำหนด profile ที่จะให้ Client ได้รับ ตัวอย่างผมสร้าง profile ชื่อ openvpn-profile ขึ้นมา และกำหนดให้ใช้ profile นี้ในการเชื่อมต่อ
หลังจากคลิ๊ก OK แล้วในเมนู PPP ที่แทป Secrets เราจะได้รายการ Account ที่เราเพิ่มเข้าไป ซึ่งจะยังไม่มีเวลา Last Logged Out เนื่องจากยังไม่มีการเชื่อมต่อเข้ามา ส่วนรายการอื่น ๆ จะมี Last Logged Out ก็คือเคยมีการเชื่อมต่อเข้ามาแล้ว
อีกหนึ่งอย่างที่จำเป็นสำหรับการจัดเตรียม Openvpn ในฝั่ง Server ก็คือการ Export Certificates ออกมา ซึ่งการที่จะ Export ออกมาได้นั้น หมายความว่าเราได้เคยทำการสร้าง Certificates ไว้แล้ว หากท่านที่มีไฟล์ Certificates อยู่แล้วก็ไม่จำเป็นที่จะต้องทำการ Export อีก ให้นำไฟล์ Certificates นั้นไปใช้งานได้ทันที
เราจะใช้การ Export Certificates จาก Terminal ใน Mikrotik โดยใช้คำสั่ง โดยให้แทน export-passphrase ด้วย key ของตัวเอง ตัวอย่างผมใช้ key = mikrotikvpn
หลังจากที่นำ code ไปวางใน Terminal ของ Mikrotik แล้วก็จะได้ไฟล์ Certificates ออกมา 3 ไฟล์ให้โหลดไฟล์ทั้ง 3 ไฟล์นี้ลงไว้ในเครื่อง PC เราเพื่อเตรียมนำไปใส่ใน Openvpn Client
ตอนนี้ฝั่ง Openvpn Server เราก็ได้เตรียมพร้อมแล้วทั้งการสร้าง User เพื่อเชื่อมต่อและไฟล์ Certificates ที่จะต้องนำไปใส่ในเครื่อง Client
เริ่มตั้งค่า Openvpn Client ใน OS Linux
ให้ทำการรีโมทด้วย putty เข้าไปยังอุปกรณ์ที่เราจะทำ Openvpn Client ด้วย user ที่เป็น root ผมขอใช้ root เพราะสิทธิ์บางอย่างในการติดตั้งนั้นอาจจะไม่ยอมให้ user ทั่วไปทำงานได้ เมื่อเข้าไปได้แล้วสิ่งที่ควรทำคือการ update ระบบ 1 ครั้งด้วยคำสั่ง
apt-get update
หลังจากนั้นใช้คำสั่งติดตั้ง Openvpn ด้วยคำสั่ง
apt-get install openvpn -y
การติดตั้งจะใช้เวลาไม่นานมากใน PC เนื่องจากมีความเร็วที่สูงกว่า แต่ถ้าเป็นใน Raspberry pi ก็จะช้านิดนึงแต่ไม่นานมากครับ หลังจากติดตั้ง Openvpn แล้ว เราก็จะมาเริ่ม config เพื่อใช้งานในโหมด Openvpn Client กัน ให้เปลี่ยน Directory ในการทำงานไปอยู่ที่ /etc/openvpn ด้วยคำสั่ง
cd /etc/openvpn
ตอนนี้เราก็จะอยู่ที่ /etc/openvpn แล้ว ให้สร้างไฟล์ auth.cfg ขึ้นมาซึ่งจะมีข้อมูลชื่อผู้ใช้และรหัสผ่านอยู่ ตัวอย่างผมใช้
Username : testvpnclient
Password : client1234567
ใช้คำสั่ง pico เพื่อสร้างและใส่ข้อมูลในไฟล์ auth.cfg
pico auth.cfg
หลังจากใช้คำสั่ง pico ถ้ามีการถามให้เลือก editor ที่จะใช้แก้ไขก็ให้เลือก 1 จะได้หน้าจอของ pico ให้เราใส่ข้อมูลไปตามภาพด้านล่าง
หลังจากนั้นทำการบันทึกข้อมูลโดยกด Ctrl+O แล้ว Enter และ Ctrl+X เพื่อออกจากการแก้ไข
ต่อไปสร้างไฟล์ authkey.cfg ซึ่งเป็นข้อมูล key ที่เราได้ระบุตอน Export Certificates ออกมา ตัวอย่างของผมใช้ key หรือ export-passphrase เป็น mikrotik-vpn ก็ให้นำข้อมูลนี้ไปใส่ในไฟล์ authkey.cfg ทำการเพิ่มในไฟล์โดยใช้คำสั่ง
pico authkey.cfg
จากนั้นบันทึกไฟล์โดยกด Ctrl+O แล้ว Enter และกด Ctrl+X เพื่อออกจากโปรแกม จากนั้นให้ใช้โปรแกรมประเภทถ่ายโอนไฟล์ เพื่อโยนไฟล์ Certificates เข้าไปไว้ใน Linux หรือ Raspberry pi ตัวอย่างผมใช้โปรแกรม WinSCP ซึ่งเป็นโปรแกรม Freeware รีโมทเพื่อโอนไฟล์เข้าไป
หลังจากเชื่อมต่อได้แล้วก็ให้ย้าย Directory ของโปรแกรม WinSCP ไปไว้ที่ /etc/openvpn แล้วทำการ upload ไฟล์ Certificates จากเครื่อง PC เราเข้าไปยัง Linux OS ภาพตัวอย่างด้านล่างผมสร้าง Directory keys ไว้ใน /etc/openvpn เพื่อเก็บไฟล์ Certificates ทั้ง 3 ไฟล์ อาจสร้างเป็นชื่ออื่นก็ได้แต่ในการตั้งค่าต้องระบุที่อยู่ไฟล์ทั้ง 3 ให้ถูกต้อง
มาถึงตรงนี้เราก็จะมีไฟล์ Certificates ทั้ง 3 ไฟล์เก็บอยู่ที่ /etc/openvpn/keys อาจจะใช้คำสั่ง ls ใน command เรียกดูไฟล์ทั้ง 3 ตามตัวอย่างภาพด้านล่างก็ได้
จากนั้นก็จะเป็นการสร้างไฟล์ client.conf เพื่อกำหนดค่าการเชื่อมต่อทั้งหมด โดยการใช้คำสั่ง pico สร้างและแก้ไขไฟล์ client.conf
pico client.conf
หลังจากใช้คำสั่ง pico แล้วให้ใส่ข้อมูลต่าง ๆ ลงไปในไฟล์ client.conf
clientproto tcpremote vpn.myopenvpnserver.com 7294
dev tunnobind
persist-keytls-clientaskpass /etc/openvpn/authkey.cfg
ca /etc/openvpn/keys/cert_export_ca-certificate.crt
cert /etc/openvpn/keys/cert_export_client-certificate.crt
key /etc/openvpn/keys/cert_export_client-certificate.keyverb 3cipher AES-256-CBC
auth SHA1
pullauth-user-pass /etc/openvpn/auth.cfg
สิ่งที่จะต้องกำหนดให้ถูกต้องก็คือ
Hostname/IP และหมายเลข Port ของ Openvpn Server
ที่อยู่ของไฟล์ authkey.cfg และ ที่อยู่ของไฟล์ auth.cfg
ที่อยู่ของไฟล์ Certificates ทั้ง 3 ไฟล์ ตามภาพตัวอย่างด้านล่าง
จากภาพจุดที่มีกรอบสี่เหลี่ยมคือให้เปลี่ยนเป็นที่อยู่ไฟล์หรือ Hostname ที่เราใช้จริงในการเชื่อมต่อไปยัง Openvpn Server หลังจากนั้นให้ทำการบันทึกและออกจากโปรแกรมโดยการกด Ctrl+O, Enter, Ctrl+X
เพียงเท่านี้ขั้นตอนในการตั้งการการเชื่อมต่อก็ถือว่าสำเร็จแล้ว ต่อจากนี้เราจะทดลองเชื่อมต่อกันง่าย ๆ โดยใช้คำสั่ง openvpn แล้วตามด้วยชื่อไฟล์ config ของ client
openvpn client.conf
หากการเชื่อมต่อสำเร็จจะได้บรรทัดสุดท้ายเป็น Initialization Sequence Completed และก็จะมี Interface tun0 เพิ่มขึ้นมาโดยมี IP ตามที่ Openvpn Server กำหนดมาให้
ให้กด Ctrl+C เพื่อยกเลิกการเชื่อมต่อก่อน เพราะเวลาใช้งานจริงเราจะให้ Openvpn Client ทำงานเป็นแบบ service ของ Linux ให้แก้ไขไฟล์ /etc/default/openvpn โดยใช้คำสั่ง pico
pico /etc/default/openvpn
ในไฟล์นี้ให้เพิ่มบรรทัด AUTOSTART=”ชื่อไฟล์ของ client config”
จะสังเกตุว่าเราระบุแต่ชื่อไฟล์ไม่จำเป็นต้องระบุนามสกุลนะครับ จากนั้นบันทึกไฟล์ด้วยคำสั่ง Ctrl+O กด Enter และ Ctrl+X ออกจากการแก้ไข
ต่อไปสั่ง reload ค่าจากการแก้ไขไฟล์ /etc/default/openvpn โดยใชัคำสั่ง
systemctl daemon-reload
จากนั้นให้สั่ง restart service ของ Openvpn ด้วยคำสั่ง
service openvpn restart
เพียงเท่านี้ Openvpn Client เราก็ทำงานแบบอัตโนมัติแล้วครับ ทุกครั้งที่อุปกรณ์ boot ขึ้นมา Openvpn Client ของเราก็จะทำงานเอง
ทดสอบใช้คำสั่งดูค่า IP ของ Interface tun0 กัน ซึ่งอาจต้องรอ 5–10 วินาที เพื่อให้ Interface tun0 แสดงขึ้นมา ให้ใช้คำสั่ง
ifconfig
จากภาพเราจะได้ Interface ของ Openvpn Client ชื่อ tun0 มี IP : 192.168.222.114 ซึ่งเป็น IP VPN ภายในของเรา
การนำไปใช้งานจริงนั้นประโยชน์มหาศาลโดยเฉพาะท่านที่มีการเชื่อมต่อ VPN ด้วยอุปกรณ์หรือ OS ที่เป็น Linux ครับ สามารถทำงานร่วมกับอุปกรณ์ Client ที่เป็น Mikrotik ได้ด้วย แต่เหตุผลที่ผมใช้ตัว Server เป็น Mikrotik เพราะความหลากหลายในการใช้งาน แต่ในส่วน Client แล้วเราไม่สามารถนำ Mikrotik ไปเป็น Web Server, File Server หรือ Print Server ได้ จากการใช้งานจริงของผม ผมใช้ Raspberry pi ตัวละพันกว่าบาทก็สามารถทำงานได้อย่างสบายครับ
คำสั่งเพิ่มเติมพื้นฐานในการใช้งาน
service openvpn stop หยุดการเชื่อมต่อ
service openvpn start เริ่มการเชื่อมต่อ
service openvpn restart หยุดและเริ่มการเชื่อมต่อใหม่
หลังจากให้ openvpn ทำงานแบบ service ไปแล้วหากต้องการทดลองการตั้งค่าใหม่ก็ให้ใช้วิธี stop service ก่อน แล้วสั่งทำงานแบบ manul โดยการเรียกคำสั่ง
openvpn ตามด้วยชื่อและนามสกุลของไฟล์ config เช่น
openvpn client.conf
สำหรับท่านที่อ่านบทความแล้วพบเห็นข้อบกพร่องหรือติดปัญหารบกวนแจ้งโดยตรงได้ที่ Line Id : aisfttx ได้ครับ ขอบคุณทุก ๆ ท่านนะครับ