Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> VPN

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน

โดย เดนิส นูติว

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน Raspberry Pi ของผม ทำหน้าที่เป็น OpenVPN server

สวัสดีครับทุกคน!

ในบทความสั้นนี้ ผมจะอธิบายวิธีตั้งค่า VPN (Virtual Private Network) server ของคุณเองบน Raspberry Pi ด้วย OpenVPN หลังจากตั้งค่า server เรียบร้อย เราจะตั้งค่า obfuscation server เพื่อปลอมแปลง traffic ว่าเราใช้ VPN นี่จะช่วยให้เราหลีกเลี่ยงการตรวจสอบบางรูปแบบได้

ทำไมต้องใช้ VPN?

ก่อนอื่น มาพูดถึงเหตุผลที่คุณอาจอยากใช้ VPN server:

  1. หลีกเลี่ยง man-in-the-middle attacks ถ้าคุณมีผู้ใช้ร้ายบนเครือข่ายท้องถิ่น — แม้แต่เพื่อนร่วมห้อง — คนนั้นสามารถติดตาม traffic ที่ไม่ได้เข้ารหัสและ竄改ได้
  2. ซ่อนกิจกรรมอินเทอร์เน็ตจาก ISP (Internet Service Provider) หรือมหาวิทยาลัย ในกรณีของผม
  3. ปลดบล็อกบริการ มหาวิทยาลัยของผมบล็อก UDP (User Datagram Protocol) packets ทั้งหมด หมายความว่าผมไม่สามารถใช้แอพที่สื่อสารผ่าน UDP ได้ ไม่สามารถใช้ email client, เล่นเกม, หรือแม้แต่ใช้ Git!

ผมตัดสินใจตั้งค่า VPN บนอินเทอร์เน็ตบ้านด้วย Raspberry Pi วิธีนี้ผมสามารถเชื่อมต่อเครือข่ายบ้านขณะอยู่ที่มหาวิทยาลัย ถ้าคุณต้องการ VPN server ในประเทศอื่น คุณสามารถซื้อ virtual private server ราคา $5/เดือนจาก DigitalOcean คุณสามารถใช้ referral link ของผมเพื่อรับ $10 ลด — นั่นคือ 2 เดือน VPN ฟรี แตคุณไม่บังคับต้องใช้ถ้าไม่อยากใช้

ติดตั้ง OpenVPN

ขั้นตอนนี้ง่ายมาก เพราะเราจะใช้ shell script ทำให้คุณ คุณแค่ต้อง "กด" next และเสร็จสิ้น

การติดตั้งจะใช้เวลานาน ขึ้นอยู่กับ key-size ที่คุณเลือก บน Raspberry Pi 3 Model B ของผม ใช้เวลาประมาณ 3 ชั่วโมง

กรุณาไปที่ repository นี้และทำตามคำแนะนำ

Angristan/OpenVPN-install
_OpenVPN-install - Set up your own OpenVPN server on Debian, Ubuntu, Fedora CentOS, and Arch Linux_github.com

ถ้าคุณไม่รู้ IP address ของ server ใส่ 0.0.0.0 ได้ ผมเลือก 443 สำหรับ port และ TCP (Transmission Control Protocol) สำหรับ protocol

หมายเหตุ: นี่สำคัญมาก เพราะมหาวิทยาลัยของผมอนุญาตแค่ TCP/80 และ TCP/443 ports ส่วนที่เหลือบล็อกเกือบหมด และ Obfsproxy ทำงานได้แค่กับ TCP ดังนั้นเลือก TCP ให้แน่ใจ!

หลังจาก script เสร็จ คุณจะได้ไฟล์ .ovpn สามารถ import เข้า VPN client ที่คุณชอบ และทุกอย่างควรทำงาน out of the box

ทดสอบการเชื่อมต่อ

Import ไฟล์ .ovpn เข้า VPN client และเปลี่ยน ip 0.0.0.0 เป็น local ip ของ Raspberry Pi ของคุณ ขึ้นอยู่กับ network configuration อาจเป็นแบบ 192.168.*.*

หมายเหตุ: นี้จะทำงานก็ต่อเมื่อคุณเชื่อมต่อ WiFi เดียวกับ Pi

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน Viscosity เชื่อมต่อ VPN server ของผมสำเร็จ

ผมตั้งค่าเราเตอร์ให้ Pi ได้ reserved IP address ตลอด คุณอาจต้องเช็คตั้งค่าเราเตอร์ถ้าอยากทำแบบเดียวกัน

ถ้าการเชื่อมต่อสำเร็จ ยินดีด้วย ตอนนี้คุณมี VPN server แล้ว! แตคุณเข้าถึงจากนอกไม่ได้… ยัง

ถ้าคุณอยากแค่ OpenVPN server โดยไม่ต้องการ obfuscation proxy ข้ามไป Port Forwarding ได้เลย

ติดตั้ง Obfuscation Proxy

Obfs4 คือ scrambling proxy มันปลอมแปลง traffic อินเทอร์เน็ตของคุณให้ดูเหมือน noise ใครที่สnoop traffic ของคุณจะไม่รู้ว่าคุณทำอะไร และจะปกป้องคุณจาก active probing attacks ที่ Great Firewall of China ใช้

หมายเหตุ: วิธีนี้ไม่ทำงานถ้าคู่แข่งอนุญาตแค่ whitelisted traffic :(

มาติดตั้ง proxy server กัน

  1. ติดตั้ง package ที่จำเป็น:
apt-get update && apt-get install obfs4proxy 
  1. สร้างไดเรกทอรีที่จะเก็บ configuration
sudo mkdir -p /var/lib/tor/pt_state/obfs4 
  1. สร้างไฟล์ configuration
sudo nano /var/lib/tor/pt_state/obfs4/obfs4.config 

ในไฟล์ configuration คุณจะวางสิ่งต่อไปนี้:

TOR_PT_MANAGED_TRANSPORT_VER=1
TOR_PT_STATE_LOCATION=/var/lib/tor/pt_state/obfs4
TOR_PT_SERVER_TRANSPORTS=obfs4
TOR_PT_SERVER_BINDADDR=obfs4-0.0.0.0:444
TOR_PT_ORPORT=127.0.0.1:443 

TOR_PT_SERVER_BINDADDR คือ address ที่ proxy จะฟังการเชื่อมต่อใหม่ ในกรณีของผมคือ 0.0.0.0:444 — ทำไมเป็น 444 ไม่ใช่ 443? เพราะผมไม่อยากเปลี่ยน OpenVPN server configuration ที่ฟังอยู่ที่ 443 อยู่แล้ว และผมจะ map address นี้ไป 443 ตอน Port Forwarding

TOR_PT_ORPORT ควรชี้ไปที่ OpenVPN server ในกรณีของผม server รันที่ 127.0.0.1:443

  1. สร้าง SystemD service file
sudo nano /etc/systemd/system/obfs4proxy.service 

จากนั้นวางเนื้อหาต่อไปนี้:

[Unit]
Description=Obfsproxy Server
[Service]
EnvironmentFile=/var/lib/tor/pt_state/obfs4/obfs4.config
ExecStart=/usr/bin/obfs4proxy -enableLogging true -logLevelStr INFO
[Install]
WantedBy=multi-user.target 
  1. เริ่ม Obfuscation proxy

ตอนนี้ ตรวจสอบให้แน่ใจว่า OpenVPN กำลังรัน และรันคำสั่งต่อไปนี้เพื่อเริ่ม proxy และเปิดใช้งานให้เริ่มตอนบูท

sudo systemctl start obfs4proxy
sudo systemctl enable obfs4proxy 
  1. บันทึก cert KEY

หลังจาก service เริ่มแล้ว รันคำสั่งนี้และบันทึก cert KEY

cat /var/lib/tor/pt_state/obfs4/obfs4_bridgeline.txt 

Key จะเป็นรูปแบบ Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=KEY iat-mode=0 คุณจะต้องใช้ตอนเชื่อมต่อ VPN

  1. ทดสอบการเชื่อมต่อ

เปิด VPN client ของคุณ และเปลี่ยน ip จาก 443 เป็น 444 เพื่อเชื่อมต่อ proxy แทน OpenVPN server

หลังจากนั้น หาตัวเลือก Pluggable Transport ใน OpenVPN client ของคุณ และดูว่ารองรับ obfs4 ไหม

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน Viscosity รองรับ Obfuscation methods ต่างๆ เช่น: obfs2, obfs3, obfs4 และ ScrambleSuit

ถ้าทุกอย่างทำงาน คุณพร้อมแล้ว! ยินดีด้วย! เหลือเพียงปรับแต่งเล็กน้อยก่อนใช้ VPN จากโลกภายนอก

Port Forwarding

เพื่อเข้าถึง OpenVPN server จากโลกภายนอก เราต้องปลดบล็อก port เพราะมันน่าจะถูกบล็อก ตามที่คุณจำได้ ผม reserved IP ของ Pi บนเราเตอร์ให้เป็น 192.168.1.125 ตลอด จึงไม่เปลี่ยนถ้า Pi ดิสคอนเนคหรือเราเตอร์ reboot

วิธีนี้ผมตั้งกฎต่อไปนี้ในตาราง Port Forwarding:

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน หน้าตั้งค่า Port Forwarding ของ TL-WR841N

Outside port 443 จะชี้ไปที่ port ของ obfuscation server 444 ถ้าคุณไม่มี obfuscation server ให้เว้น 443->443

Port 25 จะชี้ไปที่ SSH port 22 ของ Pi นี่เพื่อความสะดวกของผมเอง

ในกรณีผมอยากเข้าถึง OpenVPN server โดยตรงโดยไม่ผ่าน obfuscation proxy ผมสร้างกฎ 444->443

Service port คือ OUTSIDE port ที่จะใช้กับ PUBLIC IP address หา public IP ได้จากบริการอย่าง whatsmyip.com

Internal port คือ INSIDE port ใช้ได้เฉพาะตอนเชื่อมต่อกับเครือข่าย

_หมายเหตุ: กฎแรกบอกว่า redirect ทุกการเชื่อมต่อจาก PUBLIC_IP:443 ไป 192.168.1.125:444_

ทดสอบ

  1. หา public IP ของคุณ และแทนที่ IP เก่าในไฟล์ .ovpn หรือ VPN client ด้วย public IP
  2. เชื่อมต่อ VPN

แค่นั้นแหละ

Dynamic DNS

ในกรณีส่วนใหญ่ IP ของคุณจะเปลี่ยนเพราะเป็น dynamic IP วิธีแก้คือสร้างโปรแกรมเล็กบน Pi ที่บันทึก IP และส่งอีเมลทุกวัน หรือเก็บ IP ใน online database อย่าง Firebase

เราเตอร์ของผมมีการตั้งค่า Dynamic DNS วิธีนี้ผมใช้ service provider อย่าง NoIP และได้ domain อย่าง example.no-ip.com ที่จะชี้ไป public IP ของผมตลอด

ตั้งค่า OpenVPN Server บน Raspberry Pi: คู่มือทีละขั้นตอน หน้าตั้งค่า DDNS ของ TL-WR841N

แหล่งข้อมูลอื่นๆ:

  • A Childs Garden Of Pluggable Transports
  • Viscosity-Obfuscation/
  • https://www.pluggabletransports.info/transports/

ถ้ามีคำถาม ติดต่อผมได้ที่ Twitter

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพนซอร์สของ freeCodeCamp ช่วยให้ผู้คน 40,000+ คนได้งานเป็นนักพัฒนา เริ่มต้นเลย


No