Linux Openvpn Client to Mikrotik

บทความติดตั้ง Openvpn Client บนระบบปฏิบัติการ Debian/Ubuntu รวมถึงอุปกรณ์ Raspberry pi เพื่อเชื่อมต่อไปยัง Openvpn Server ที่เป็นอุปกรณ์ Mikrotik

Suttipong Tanuphone
5 min readJun 24, 2021

จากที่ผมได้เคยทำบทความติดตั้ง 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 นี้ในการเชื่อมต่อ

ภาพตัวอย่างการตั้งค่า PPP Secret เพื่อกำหนด Username/Password ที่จะเชื่อมต่อเข้ามา

หลังจากคลิ๊ก OK แล้วในเมนู PPP ที่แทป Secrets เราจะได้รายการ Account ที่เราเพิ่มเข้าไป ซึ่งจะยังไม่มีเวลา Last Logged Out เนื่องจากยังไม่มีการเชื่อมต่อเข้ามา ส่วนรายการอื่น ๆ จะมี Last Logged Out ก็คือเคยมีการเชื่อมต่อเข้ามาแล้ว

ภาพตัวอย่างแทป Secrets ในเมนู PPP แสดงรายการ Secret ที่เราเพิ่มเข้าไป

อีกหนึ่งอย่างที่จำเป็นสำหรับการจัดเตรียม Openvpn ในฝั่ง Server ก็คือการ Export Certificates ออกมา ซึ่งการที่จะ Export ออกมาได้นั้น หมายความว่าเราได้เคยทำการสร้าง Certificates ไว้แล้ว หากท่านที่มีไฟล์ Certificates อยู่แล้วก็ไม่จำเป็นที่จะต้องทำการ Export อีก ให้นำไฟล์ Certificates นั้นไปใช้งานได้ทันที

ตัวอย่าง Certificates ที่เราจะ Export มาใช้

เราจะใช้การ Export Certificates จาก Terminal ใน Mikrotik โดยใช้คำสั่ง โดยให้แทน export-passphrase ด้วย key ของตัวเอง ตัวอย่างผมใช้ key = mikrotikvpn

Code Export Certificates ออกเป็นไฟล์ใน Mikrotik
ภาพตัวอย่างการวาง Code เพื่อ Export Certificates

หลังจากที่นำ code ไปวางใน Terminal ของ Mikrotik แล้วก็จะได้ไฟล์ Certificates ออกมา 3 ไฟล์ให้โหลดไฟล์ทั้ง 3 ไฟล์นี้ลงไว้ในเครื่อง PC เราเพื่อเตรียมนำไปใส่ใน Openvpn Client

ภาพตัวอย่างไฟล์ Certificates ที่ได้จากการวาง Code Export

ตอนนี้ฝั่ง Openvpn Server เราก็ได้เตรียมพร้อมแล้วทั้งการสร้าง User เพื่อเชื่อมต่อและไฟล์ Certificates ที่จะต้องนำไปใส่ในเครื่อง Client

เริ่มตั้งค่า Openvpn Client ใน OS Linux

ให้ทำการรีโมทด้วย putty เข้าไปยังอุปกรณ์ที่เราจะทำ Openvpn Client ด้วย user ที่เป็น root ผมขอใช้ root เพราะสิทธิ์บางอย่างในการติดตั้งนั้นอาจจะไม่ยอมให้ user ทั่วไปทำงานได้ เมื่อเข้าไปได้แล้วสิ่งที่ควรทำคือการ update ระบบ 1 ครั้งด้วยคำสั่ง

apt-get update
ภาพตัวอย่างการใช้คำสั่ง apt-get update

หลังจากนั้นใช้คำสั่งติดตั้ง Openvpn ด้วยคำสั่ง

apt-get install openvpn -y
ตัวอย่างการใช้คำสั่งติดตั้ง Openvpn

การติดตั้งจะใช้เวลาไม่นานมากใน 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 ให้เราใส่ข้อมูลไปตามภาพด้านล่าง

ภาพตัวอย่างการใส่ข้อมูลชื่อผู้ใช้และรหัสผ่านในไฟล์ auth.cfg

หลังจากนั้นทำการบันทึกข้อมูลโดยกด Ctrl+O แล้ว Enter และ Ctrl+X เพื่อออกจากการแก้ไข

ต่อไปสร้างไฟล์ authkey.cfg ซึ่งเป็นข้อมูล key ที่เราได้ระบุตอน Export Certificates ออกมา ตัวอย่างของผมใช้ key หรือ export-passphrase เป็น mikrotik-vpn ก็ให้นำข้อมูลนี้ไปใส่ในไฟล์ authkey.cfg ทำการเพิ่มในไฟล์โดยใช้คำสั่ง

pico authkey.cfg
ภาพตัวอย่างการเพิ่มข้อมูลในไฟล์ authkey.cfg

จากนั้นบันทึกไฟล์โดยกด Ctrl+O แล้ว Enter และกด Ctrl+X เพื่อออกจากโปรแกม จากนั้นให้ใช้โปรแกรมประเภทถ่ายโอนไฟล์ เพื่อโยนไฟล์ Certificates เข้าไปไว้ใน Linux หรือ Raspberry pi ตัวอย่างผมใช้โปรแกรม WinSCP ซึ่งเป็นโปรแกรม Freeware รีโมทเพื่อโอนไฟล์เข้าไป

ภาพตัวอย่างการตั้งค่าการเชื่อมต่อโปรแกรม WinSCP ไปยัง Linux OS

หลังจากเชื่อมต่อได้แล้วก็ให้ย้าย Directory ของโปรแกรม WinSCP ไปไว้ที่ /etc/openvpn แล้วทำการ upload ไฟล์ Certificates จากเครื่อง PC เราเข้าไปยัง Linux OS ภาพตัวอย่างด้านล่างผมสร้าง Directory keys ไว้ใน /etc/openvpn เพื่อเก็บไฟล์ Certificates ทั้ง 3 ไฟล์ อาจสร้างเป็นชื่ออื่นก็ได้แต่ในการตั้งค่าต้องระบุที่อยู่ไฟล์ทั้ง 3 ให้ถูกต้อง

ภาพตัวอย่างการโอนไฟล์ Certificates ไปยัง Linux OS ด้วยโปรแกรม WinSCP

มาถึงตรงนี้เราก็จะมีไฟล์ Certificates ทั้ง 3 ไฟล์เก็บอยู่ที่ /etc/openvpn/keys อาจจะใช้คำสั่ง ls ใน command เรียกดูไฟล์ทั้ง 3 ตามตัวอย่างภาพด้านล่างก็ได้

ภาพตัวอย่างไฟล์ Certificates ที่ถูกเก็บไว้ใน /etc/openvpn/keys

จากนั้นก็จะเป็นการสร้างไฟล์ client.conf เพื่อกำหนดค่าการเชื่อมต่อทั้งหมด โดยการใช้คำสั่ง pico สร้างและแก้ไขไฟล์ client.conf

pico client.conf

หลังจากใช้คำสั่ง pico แล้วให้ใส่ข้อมูลต่าง ๆ ลงไปในไฟล์ client.conf

clientproto tcpremote vpn.myopenvpnserver.com 7294
dev tun
nobind
persist-key
tls-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.key
verb 3cipher AES-256-CBC
auth SHA1
pull
auth-user-pass /etc/openvpn/auth.cfg

สิ่งที่จะต้องกำหนดให้ถูกต้องก็คือ
Hostname/IP และหมายเลข Port ของ Openvpn Server
ที่อยู่ของไฟล์ authkey.cfg และ ที่อยู่ของไฟล์ auth.cfg
ที่อยู่ของไฟล์ Certificates ทั้ง 3 ไฟล์ ตามภาพตัวอย่างด้านล่าง

ภาพตัวอย่างในไฟล์ client.conf

จากภาพจุดที่มีกรอบสี่เหลี่ยมคือให้เปลี่ยนเป็นที่อยู่ไฟล์หรือ Hostname ที่เราใช้จริงในการเชื่อมต่อไปยัง Openvpn Server หลังจากนั้นให้ทำการบันทึกและออกจากโปรแกรมโดยการกด Ctrl+O, Enter, Ctrl+X

เพียงเท่านี้ขั้นตอนในการตั้งการการเชื่อมต่อก็ถือว่าสำเร็จแล้ว ต่อจากนี้เราจะทดลองเชื่อมต่อกันง่าย ๆ โดยใช้คำสั่ง openvpn แล้วตามด้วยชื่อไฟล์ config ของ client

openvpn client.conf

หากการเชื่อมต่อสำเร็จจะได้บรรทัดสุดท้ายเป็น Initialization Sequence Completed และก็จะมี Interface tun0 เพิ่มขึ้นมาโดยมี IP ตามที่ Openvpn Server กำหนดมาให้

ภาพตัวอย่างหลังจากสั่งเชื่อมต่อ Openvpn

ให้กด Ctrl+C เพื่อยกเลิกการเชื่อมต่อก่อน เพราะเวลาใช้งานจริงเราจะให้ Openvpn Client ทำงานเป็นแบบ service ของ Linux ให้แก้ไขไฟล์ /etc/default/openvpn โดยใช้คำสั่ง pico

pico /etc/default/openvpn

ในไฟล์นี้ให้เพิ่มบรรทัด AUTOSTART=”ชื่อไฟล์ของ client config”

ภาพตัวอย่างการเพิ่มบรรทัด AUTOSTART=”ชื่อไฟล์ config”

จะสังเกตุว่าเราระบุแต่ชื่อไฟล์ไม่จำเป็นต้องระบุนามสกุลนะครับ จากนั้นบันทึกไฟล์ด้วยคำสั่ง Ctrl+O กด Enter และ Ctrl+X ออกจากการแก้ไข
ต่อไปสั่ง reload ค่าจากการแก้ไขไฟล์ /etc/default/openvpn โดยใชัคำสั่ง

systemctl daemon-reload

จากนั้นให้สั่ง restart service ของ Openvpn ด้วยคำสั่ง

service openvpn restart
ภาพหน้าจอหลังจาก run คำสั่งต่าง ๆ แล้ว

เพียงเท่านี้ Openvpn Client เราก็ทำงานแบบอัตโนมัติแล้วครับ ทุกครั้งที่อุปกรณ์ boot ขึ้นมา Openvpn Client ของเราก็จะทำงานเอง
ทดสอบใช้คำสั่งดูค่า IP ของ Interface tun0 กัน ซึ่งอาจต้องรอ 5–10 วินาที เพื่อให้ Interface tun0 แสดงขึ้นมา ให้ใช้คำสั่ง

ifconfig
ภาพตัวอย่างหลังจากใช้คำสั่ง ifconfig เพื่อดูค่าของ Interface

จากภาพเราจะได้ 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 ได้ครับ ขอบคุณทุก ๆ ท่านนะครับ

--

--