Bởi Denis Nuțiu
Raspberry Pi của tôi, đóng vai trò máy chủ OpenVPN
Xin chào mọi người!
Trong bài ngắn này tôi sẽ giải thích cách thiết lập máy chủ VPN (Virtual Private Network) riêng trên Raspberry Pi với OpenVPN. Sau khi cài xong server, chúng ta sẽ cài máy chủ obfuscation (làm mờ) để ngụy trang traffic cho thấy chúng ta đang dùng VPN. Điều này giúp tránh một số hình thức kiểm duyệt.
Tại sao dùng VPN?
Trước, hãy nói về lý do bạn có thể muốn dùng máy chủ VPN:
- Tránh tấn công man-in-the-middle. Nếu có người độc hại trên mạng cục bộ — ngay cả người cùng phòng — họ có thể giám sát và can thiệp traffic không mã hóa của bạn.
- Ẩn hoạt động internet khỏi ISP (Nhà cung cấp Internet) hoặc Đại học, trong trường hợp của tôi.
- Mở chặn dịch vụ. Đại học của tôi chặn tất cả gói UDP (User Datagram Protocol). Nghĩa là tôi không dùng được ứng dụng giao tiếp qua UDP. Không dùng được email client, chơi game, thậm chí Git!
Tôi quyết định cài VPN trên mạng nhà dùng Raspberry Pi. Cách này tôi kết nối mạng nhà khi ở Đại học. Nếu cần server VPN ở nước khác, có thể thuê VPS 5$/tháng từ DigitalOcean. Bạn có thể dùng link giới thiệu của tôi để được $10 giảm giá — bằng hai tháng VPN miễn phí. Nhưng không bắt buộc dùng nếu không muốn.
Cài đặt OpenVPN
Bước này rất dễ, vì dùng script shell làm hộ bạn. Chỉ cần "bấm" next và xong.
Cài đặt mất khá lâu, tùy kích thước khóa bạn chọn. Trên Raspberry Pi 3 Model B của tôi, mất khoảng 3 giờ.
Hãy truy cập repository này và làm theo hướng dẫn
Angristan/OpenVPN-install
_OpenVPN-install - Thiết lập máy chủ OpenVPN riêng trên Debian, Ubuntu, Fedora CentOS, Arch Linux_github.com
Nếu không biết IP server, chỉ cần để 0.0.0.0. Tôi chọn cổng 443 và giao thức TCP (Transmission Control Protocol).
Lưu ý quan trọng: Rất quan trọng vì Đại học chỉ cho phép cổng TCP/80 và TCP/443, các cổng khác chặn hầu như hết. Cũng Obfsproxy chỉ hoạt động với TCP, nên chắc chắn chọn TCP!
Sau khi script xong, bạn sẽ nhận file .ovpn. Nó có thể import vào VPN client yêu thích, và mọi thứ hoạt động ngay.
Kiểm tra kết nối
Import file .ovpn vào VPN client và đổi ip 0.0.0.0 thành IP cục bộ của Raspberry Pi. Tùy cấu hình mạng có thể dạng 192.168.*.*.
Lưu ý: Chỉ hoạt động nếu bạn kết nối cùng WiFi với Pi.
Viscosity kết nối thành công đến máy chủ VPN của tôi.
Tôi đã cấu hình router để Pi luôn nhận IP dự trữ. Bạn có thể kiểm tra cài đặt router nếu muốn làm tương tự.
Nếu kết nối thành công, chúc mừng, bạn đã có máy chủ VPN! Nhưng chưa truy cập từ bên ngoài…
Nếu chỉ muốn OpenVPN không cần proxy obfuscation, bỏ qua đến Port Forwarding.
Cài đặt Proxy Obfuscation
Obfs4 là proxy xáo trộn. Nó ngụy trang traffic internet trông như nhiễu. Ai窃听 traffic không biết bạn đang làm gì, và bảo vệ khỏi tấn công dò chủ động (active probing) dùng bởi Great Firewall của Trung Quốc.
Lưu ý: Cách này không hoạt động nếu đối thủ chỉ cho phép traffic whitelist :(
Cài đặt proxy server ngay.
- Cài gói cần thiết:
apt-get update && apt-get install obfs4proxy
- Tạo thư mục chứa cấu hình.
sudo mkdir -p /var/lib/tor/pt_state/obfs4
- Tạo file cấu hình.
sudo nano /var/lib/tor/pt_state/obfs4/obfs4.config
Trong file cấu hình, dán nội dung sau:
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 là địa chỉ proxy lắng nghe kết nối mới. Của tôi là 0.0.0.0:444 — tại sao 444 không phải 443? Vì không muốn đổi cấu hình OpenVPN đang lắng nghe 443. Sẽ map địa chỉ này sau sang 443 qua Port Forwarding.
TOR_PT_ORPORT phải trỏ đến máy chủ OpenVPN. Của tôi chạy trên 127.0.0.1:443
- Tạo file service SystemD.
sudo nano /etc/systemd/system/obfs4proxy.service
Dán nội dung sau:
[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
- Khởi động Proxy Obfuscation.
Bây giờ, chắc chắn OpenVPN đang chạy và chạy lệnh sau để khởi động proxy và bật tự động khởi động cùng hệ thống.
sudo systemctl start obfs4proxy
sudo systemctl enable obfs4proxy
- Lưu khóa cert KEY
Sau khi service chạy, chạy lệnh sau và lưu cert KEY.
cat /var/lib/tor/pt_state/obfs4/obfs4_bridgeline.txt
Khóa dạng Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=KEY iat-mode=0. Bạn cần nó khi kết nối VPN.
- Kiểm tra kết nối.
Mở VPN client, đổi ip từ 443 sang 444 để kết nối proxy thay vì server OpenVPN.
Sau đó, tìm tùy chọn Pluggable Transport trong client OpenVPN xem có hỗ trợ obfs4 không.
Viscosity hỗ trợ các phương pháp Obfuscation: obfs2, obfs3, obfs4 và ScrambleSuit
Nếu mọi thứ hoạt động, bạn xong! Chúc mừng! Chỉ còn vài điều chỉnh trước khi dùng VPN từ bên ngoài.
Port Forwarding
Để truy cập OpenVPN từ bên ngoài, cần mở cổng, vì chúng khả năng cao bị chặn. Như nhớ, tôi đã dự trữ IP Pi trên router luôn là 192.168.1.125 để không đổi khi Pi ngắt kết nối hoặc router reboot.
Cách này tôi định nghĩa quy tắc sau trong bảng Port Forwarding:
TL-WR841N's Port Forwarding settings page.
Cổng ngoài 443 sẽ trỏ đến cổng proxy obfuscation 444. Nếu không có proxy obfuscation, để 443->443.
Cổng 25 trỏ đến cổng SSH 22 của Pi. Chỉ cho tiện của tôi.
Trong trường hợp muốn truy cập OpenVPN trực tiếp không qua proxy obfuscation, tôi tạo quy tắc 444->443
Cổng dịch vụ là cổng BÊN NGOÀI dùng với IP CÔNG KHAI. Để tìm public IP, dùng dịch vụ như whatsmyip.com.
Cổng nội bộ là cổng BÊN TRONG. Chỉ dùng khi kết nối mạng nội bộ.
_Lưu ý: Quy tắc đầu nói chuyển hướng tất cả kết nối từ PUBLIC_IP:443 đến 192.168.1.125:444_
Kiểm tra
- Tìm public IP và thay IP cũ bằng public IP trong file .ovpn hoặc VPN client.
- Kết nối VPN.
Đó là tất cả.
Dynamic DNS
Phần lớn trường hợp, IP của bạn thay đổi vì là IP động. Cách khắc phục: tạo chương trình nhỏ trên Pi lưu IP và gửi email hàng ngày. Hoặc lưu IP trong database online như Firebase.
Router của tôi có cài đặt Dynamic DNS. Cách này dùng nhà cung cấp như NoIP lấy domain như example.no-ip.com luôn trỏ đến public IP của tôi.
TL-WR841N DDNS settings page
Tài nguyên khác:
- A Childs Garden Of Pluggable Transports
- Viscosity-Obsfurcation/
- https://www.pluggabletransports.info/transports/
Nếu có câu hỏi, liên hệ tôi trên Twitter.
Học lập trình miễn phí. Chương trình mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người tìm được việc làm lập trình viên. Bắt đầu ngay