มาทำ Server OpenVPN สำหรับมุดท่อไปต่างประเทศกันด้วย Docker

มาทำ Server OpenVPN สำหรับมุดท่อไปต่างประเทศกันด้วย Docker

ช่วงนี้กระแสมุดท่อมาแรง อันเนื่องมาจาก พรบ. คอมพิวเตอร์ตัวใหม่ที่กำลังจะประกาศใช้ในอีกไม่กี่วันข้างหน้านี้ เราก็จะมาแนะนำการทำ Server OpenVPN เป็นของตัวเอง เอาไว้ใช้ส่วนตัวกันครับ

แต่จะให้ติดตั้งด้วยการใช้ Command แบบปกติ มันก็ดูธรรมดาและค่อนข้างยากไปหน่อย เราจะมาทำให้มันง่ายขึ้น ด้วยการใช้ Docker เข้ามาช่วยในการทำครับ

โชคดี ที่มีคนทำ Image สำหรับ OpenVPN ไว้ให้เราได้ใช้งานอย่างสะดวกสบายเอาไว้แล้ว ลดเวลาลงได้เยอะเลยครับ เอาหล่ะ มาทำกันดีกว่า จะรออะไรกันอยู่


ก่อนอื่น คุณจะต้องมี Server เป็นของตัวเองก่อน (หากมีอยู่แล้ว ข้ามตรงนี้ไปได้เลย!)

ปัจจุบันนี้มีผู้ให้บริการมากมายครับ ให้เราเลือกใช้งาน ยิ่ง Cloud สมัยนี้ สะดวกมากๆ ราคาไม่แพง กดสั่งปุ๊บ ก็ได้ใช้งานปั๊บ ถ้าจะให้แนะนำจริงๆ ก็คงเป็น Digitalocean ครับ ราคาเริ่มต้นที่ $5 ต่อเดือนเท่านั้นเอง อะไรมันจะถูกปานนั้น ใครยังไม่มีสมัครสิ จะรออะไร

หลังจากนั้น ก็ให้ทำการสร้าง Instance ขึ้นมาครับ (แต่ละผู้ให้บริการอาจจะเรียกไม่เหมือนกัน บางเจ้าก็ Droplet บางเจ้าก็ Instance ก็แล้วแต่นะครับ แต่ความหมายมันเหมือนกัน) เลือกเป็น Ubuntu 16.04 LTS เอาไว้เลยครับ ใช้กันยาวๆไปเลย ใครเป็นมือใหม่ ยังไม่เคยใช้ Digitalocean สามารถอ่าน Tutorial ที่ทาง Digitalocean เขียนเอาไว้แล้วได้ ตามลิงค์นี้ครับ https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet-virtual-server

ติดตั้ง Docker (หากติดตั้งไว้แล้ว ข้ามตรงนี้ไปได้เลย!)

หลังจากที่สร้าง Instance และสามารถ Login ด้วย SSH เข้าไปได้แล้ว เราจะต้องทำการติดตั้ง Docker กันก่อนครับ

curl -L https://gist.github.com/kusumoto/c2b256b02ec62621c2e1/raw | sh

หากไม่มีอะไรผิดพลาด คุณก็จะได้ Docker มาอยู่ในเครื่อง Server ของคุณดังรูป
Ubuntu Docker
ไปขั้นตอนต่อไปเลยดีกว่า ช้าอยู่ใย


ติดตั้ง OpenVPN

อย่างที่ผมบอกไปตั้งแต่ต้น ว่ามีคนทำ Image ไว้ให้พร้อมแล้ว เราแค่ดึง Image ของเค้ามาใช้งาน พร้อมกับตั้งค่าให้เรียบร้อย แค่นี้ก็พอแล้วครับ เรามาดูขั้นตอนกันเลยครับ

โดยผมขออนุญาตใช้ Image ตัวนี้นะครับ https://github.com/kylemanna/docker-openvpn จากที่ทดลองมา ผมว่ามันยืดหยุ่นและโอเคสุดแหละ

ให้คุณเลือกชื่อ Volume สำหรับตัว OpenVPN ครับ (อันนี้ถ้าใครไม่ซีเรียสสามารถใช้ชื่อเริ่มต้นของมันได้ครับ ไม่จำเป็นต้องเปลี่ยนแปลงอะไร คัดลอกไปวางใน Shell ได้เลย เริ่มต้น ชื่อมันจะเป็น ovpn-data ครับ)

OVPN_DATA="ovpn-data"

คำสั่งนี้จะใช้ในการเตรียม Container ไว้สำหรับจัดการการตั้งค่าต่างๆ และใบรับรอง ที่ใช้ในการ Login เข้า VPN Server ของเรา

docker volume create --name $OVPN_DATA
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://(เป็น IP เครื่องของคุณ หรือ Domain ที่ตั้งค่าไว้ที่เครื่องนี้ เช่น 127.0.0.1 หรือ test.com เป็นต้น)
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

หากมีการถามว่า Enter PEM pass phrase ดังรูป
OpenVPN Docker1
ให้ใส่รหัสอะไรก็ได้ที่คุณจำได้ไปครับ มันจะใช้เอาไว้ล็อกใบรับรองของคุณ และจะมีการถามให้ verify อีกรอบ ก็ใส่ค่าเดิมลงไป

OpenVPN Docker2
ตรง Common Name ตรงนี้จะเปลี่ยนก็ได้ไม่เปลี่ยนก็ได้ครับ แล้วแต่ความเหมาะสม หลังจากนั้นจะใช้เวลาสักครู่ครับ ระหว่างมันจะกำลังดำเนินการสุ่มรหัสให้

OpenVPN Docker3
ตรงนี้จะมีการถาม pass phrase ที่เราใส่ไปครั้งแรกครับ เราก็ใส่ให้มันไปตามปกติครับ

OpenVPN Docker4
หากปรากฏแบบนี้ แสดงว่าคุณได้ผ่านขั้นตอนต่างๆมาได้อย่างราบรื่น ไม่มีปัญหาครับ หลังจากนั้น เราจะเริ่มการทำงานของ OpenVPN Server ด้วยคำสั่ง

docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

OpenVPN Docker5
หากเจอหน้านี้ แสดงว่าได้ดำเนินการเริ่มต้น OpenVPN Server เรียบร้อยแล้ว เราสามารถตรวจสอบการทำงานว่า OpenVPN Server ของเรายังทำงานอยู่หรือไม่ ด้วยคำสั่ง

docker ps

ก็จะปรากฏเหมือนรูปด้านล่าง แสดงว่า OpenVPN Server ของเราได้เริ่มทำงานแล้ว
OpenVPN Docker6

สร้างชื่อผู้ใช้งานที่จะเข้าใช้งาน OpenVPN

เมื่อตัว Server ติดตั้งเสร็จแล้ว เราก็ต้องสร้างผู้ใช้งานขึ้นมา เพื่อให้เราสามารถใช้งานได้กันครับ โดยใช้คำสั่ง

docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME (คำว่า CLIENTNAME เปลี่ยนเป็น User ที่เราต้องการนะครับ) nopass

ตรงนี้จะมีการถาม pass phrase ที่เราใส่ไปครั้งแรกครับ เราก็ใส่ให้มันไปตามปกติเหมือนเช่นเคย หลังจากนั้นเราจะต้องเอาไฟล์การตั้งค่าที่เราสร้างเมื่อกี้ ออกกมาจาก Container ด้วยคำสั่ง

docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn (คำว่า CLIENTNAME เปลี่ยนเป็น User เดียวกับที่ตั้งเมื่อกี้นะครับ)

หลังจากนั้น คุณก็จะได้ไฟล์ CLIENTNAME.ovpn (คำว่า CLIENTNAME จะเป็น User ที่ตั้งเมื่อกี้นะครับ) เราจะต้องเอาไฟล์นี้ มาใส่ไว้ในเครื่องของเรานะครับ ให้คุณเข้า terminal (osx/linux) cywin (windows) แล้วใช้คำสั่ง

scp root@ไอพี server ของคุณ:/root/CLIENTNAME.ovpn .

เราก็จะได้ไฟล์การตั้งค่า OpenVPN ที่จะใช้เชื่อมต่อยังเครื่องของเราแล้วครับ


นำไฟล์ OpenVPN ของเราไปใช้งาน

หลังจากที่เราได้ไฟล์แล้ว เราจะต้องในไฟล์ไปใช้งานครับ ด้วยการดาวน์โหลด OpenVPN Client มาจาก https://openvpn.net/index.php/open-source/downloads.html แล้วทำการติดตั้งให้เรียบร้อย

หลังจากนั้น ให้นำไฟล์ CLIENTNAME.ovpn ไปไว้ที่ C:\Program Files (x86)\OpenVPN\config แล้วเปิด OpenVPN นี้มา ให้ลองคลิกขวาดู หากขึ้นแบบในรูป แสดงว่าการตั้งค่าได้ผล ให้ลองกด Connect ดู
OpenVPN Docker7

หากการเชื่อมต่อสำเร็จ ก็จะได้ผลดังรูปด้านล่างครับ
OpenVPN Docker8