Hướng Dẫn Tạo VPN Server Với Raspberry Pi

Hướng Dẫn Tạo VPN Server Với Raspberry Pi

Chào các bạn, chắc hẳn các bạn đã nghe qua về VPN rồi, qua bài viết này mình sẽ tản mạn một chút về VPN và hướng dẫn mọi người tạo một VPN server tại nhà rất đơn giản với một con Raspberry Pi nhỏ gọn. Cùng bắt đầu nhé!

1. VPN là gì?

VPN viết tắt của Virtual Private Network – mạng riêng ảo. Để hiểu rõ hơn khái niệm này, chúng ta sẽ chia sẽ chia thành hai phần Virtual (ảo) và Private network (mạng riêng).

  • Virtual có nghĩa là nó không thực sự tồn tại dưới dạng vật lý mà là dạng phần mềm.
  • Private network là đối ngược lại với public network. Nói một cách cụ thể, mạng riêng là mạng không thể định tuyến, chủ yếu sử dụng địa chỉ IP riêng (không cần phải là địa chỉ IP riêng, nhưng đây là trường hợp phổ biến nhất do khan hiếm IPv4) và do đó không thể truy cập được trên internet. Nó thường an toàn hơn nhiều so với mạng công cộng vì mạng riêng thường hạn chế kết nối với một số nhóm người nhất định như nhân viên công ty và dữ liệu được truyền trên mạng riêng có thể dễ dàng bị tin tặc ngồi trên mạng công cộng.

Vì vậy, mạng riêng ảo cùng nhau là một công nghệ cho phép các thiết bị trên mạng công cộng kết nối an toàn với các thiết bị trên mạng riêng. Dữ liệu thực sự vẫn được truyền trên mạng công cộng, nhưng công nghệ giúp kết nối an toàn như thể dữ liệu được truyền trên mạng riêng.

2. VPN có thể làm gì?

VPN mã hóa tất cả dữ liệu bạn gửi qua internet

Khi bạn được kết nối với máy chủ VPN, tất cả lưu lượng truy cập internet của bạn được mã hóa. Điều này có nghĩa là không ai có thể thấy những gì bạn đang làm trực tuyến, ngay cả nhà cung cấp dịch vụ internet (ISP) của bạn. Và điều đó có nghĩa là ISP của bạn cũng không thể điều tiết tốc độ của bạn, điều này thường xảy ra nếu bạn đang làm một việc gì đó đòi hỏi tốc độ cao như phát trực tuyến hoặc chơi game.

Mã hóa ngăn chặn tin tặc nhìn thấy thông tin nhạy cảm mà bạn nhập vào các trang web, như mật khẩu của bạn. Điều này đặc biệt quan trọng nếu bạn đang sử dụng WiFi công cộng vì tội phạm mạng dễ dàng theo dõi kết nối của bạn trên các mạng công cộng. Nhưng VPN đảm bảo rằng ngay cả khi ai đó đánh cắp dữ liệu của bạn, họ sẽ không thể giải mã được hoặc thậm chí hiểu nó.

VPN của bạn cũng che giấu địa chỉ IP của bạn 

Các trang web và dịch vụ, như Netflix, sử dụng IP của bạn để xác định vị trí của bạn. Khi bạn kết nối với máy chủ VPN, các trang web bạn truy cập chỉ thấy địa chỉ IP của VPN. Hoặc đơn cử như là việc bạn muốn lên Pỏn Hup để tìm code nhưng lại bị các nhà mạng chặn (có thể là chặn IP hoặc sử dụng DPI) thì bạn có thể hoàn toàn truy cập đến một VPN server nằm ở ngoài phạm vi quản lý của ISP đó. 

Vì họ không còn thấy IP thực của bạn nữa nên họ không thể thấy bạn đang ở đâu. Điều này rất cần thiết nếu bạn muốn torrent, hoặc bỏ qua geoblocks và kiểm duyệt. Điều đó có nghĩa là bạn có thể truy cập bất kỳ chương trình, bộ phim hoặc trò chơi nào trên thế giới và duyệt hoàn toàn tự do ở mọi quốc gia bạn đến.

Ta xét hai ví dụ sau khi người dùng sử dụng browser truy cập đến trang web whatismyipaddress.com và gừi yêu cầu đến server đó. Ví dụ này tham khảo tử bài viết 

Đây là hành trình của gói tin khi không có VPN.

Bước 1: người dùng mở trang web whatismyipaddress.com và gửi yêu cầu đến máy chủ whatismyipaddress.com. Gói được khởi tạo từ PC của người dùng để gói có địa chỉ IP nguồn 10.19.190.132, là địa chỉ IP riêng của PC của người dùng (giả sử bộ định tuyến đang sử dụng DHCP để gán địa chỉ IP riêng 10.19.190.132 cho PC của người dùng). Bởi vì yêu cầu này được gửi đến máy chủ whatismyipaddress.com. Vì vậy, gói có địa chỉ đích 128.95.120.1 (giả sử bản ghi DNS whatismyipaddress.com được lưu trữ cục bộ trong PC của người dùng).

Bước 2: khi gói từ PC của người dùng đến bộ định tuyến, bộ định tuyến sẽ sửa đổi địa chỉ IP nguồn của gói và thay thế bằng địa chỉ công khai riêng 205.175.106.121 trước khi gửi gói tin (đôi khi cổng nguồn cũng được sửa đổi trong trường hợp mối quan hệ một-nhiều). Làm thế nào để bộ định tuyến biết gói thiết bị được kết nối này thuộc về nếu địa chỉ IP nguồn và cổng của nó bị thay đổi? Câu trả lời là giao thức NAT (Dịch địa chỉ mạng). Bộ định tuyến sẽ giữ một bảng chuyển tiếp NAT ánh xạ các địa chỉ IP trên mạng bên trong thành địa chỉ IP sang mạng bên ngoài.

Khi một gói có địa chỉ IP đích 205.175.106.121 và cổng 1234 đến bộ định tuyến từ bộ định tuyến khác, bộ định tuyến sẽ tra cứu bảng chuyển tiếp NAT và chuyển tiếp gói đó đến thiết bị được kết nối có địa chỉ IP riêng 10.19.190.132, đó là PC của người dùng. Điều quan trọng cần biết là ở bước này, gói thực sự được chuyển trực tiếp đến ISP mà không cần thông qua bất kỳ bộ định tuyến nào khác (điều này có thể được xác minh bằng cách sử dụng lệnh traceroute). Kết nối của Chúng ta với internet nói đúng bắt đầu tại ISP của Chúng ta. Nói cách khác, Chúng ta tiếp cận internet thế giới thông qua ISP.

Bước 3: sơ đồ đơn giản hóa hành trình của gói từ ISP đến máy chủ whatismyipaddress.com. Trong thực tế, gói thường cần phải đi qua nhiều bộ định tuyến để đến máy chủ. Chuyến đi từ bộ định tuyến này đến bộ định tuyến khác được gọi là một bước nhảy. Vì vậy, gói cần phải thực hiện nhiều bước nhảy. Có thể có hàng triệu bộ định tuyến giữa ISP và máy chủ whatismyipaddress.com, có nghĩa là có thể có hàng triệu đường dẫn cho gói tin đi. Làm thế nào để một bộ định tuyến biết đường dẫn nào là nhanh nhất? Câu trả lời là một bảng định tuyến. Nó thường được lưu trữ trong một bộ định tuyến và chứa các quy tắc để xác định tuyến đường tốt nhất.

Bước 4: bước này rất giống với bước 3 nhưng theo hướng ngược lại. Các địa chỉ IP nguồn và đích được chuyển đổi và gói chứa tải trọng được gửi từ máy chủ whatismyipaddress.com.

Bước 5: ISP gửi gói trực tiếp bộ định tuyến nhà của Chúng ta.

Bước 6: khi gói tin từ ISP đến đích, bộ định tuyến gia đình của người dùng, bộ định tuyến sẽ tra cứu bảng NAT để chuyển tiếp gói này đến một thiết bị được kết nối chính xác (PC của người dùng). Các gói được sửa đổi một lần nữa. Nhưng lần này, địa chỉ IP đích được thay thế bằng địa chỉ IP riêng của PC 10.19.190.132 của người dùng dựa trên bản ghi được tìm thấy trong bảng NAT. gói được chuyển tiếp chính xác đến PC của người dùng dựa trên địa chỉ đích được sửa đổi trong bước 5.

Bước 1: nếu máy tính của người dùng đã cài đặt phần mềm VPN phía máy khách, gói sẽ được đóng gói trước. Encapsulation thực sự chỉ là một quá trình gói gói ban đầu bên trong một gói khác được tạo bởi phần mềm VPN phía máy khách. Mọi thứ trong gói ban đầu được mã hóa bởi máy khách VPN và chỉ có thể được đọc bởi máy chủ VPN. Đối với công chúng, đây vẫn là một gói hợp lệ và sẽ được định tuyến như bình thường. Lưu ý rằng địa chỉ đích trở thành địa chỉ IP của máy chủ VPN 206.189.234.44.

Bước 2: bước này rất giống với bước 2 trong trường hợp không có VPN. Địa chỉ IP nguồn được thay thế bằng địa chỉ IP công cộng của bộ định tuyến và bản ghi NAT được tạo để theo dõi các liên kết.

Bước 3: ISP chịu trách nhiệm gửi gói tin này đến đích được chỉ định: máy chủ VPN. Các tuyến tốt nhất sẽ được chọn động dựa trên các giao thức định tuyến và bảng định tuyến.

Bước 4: một khi máy chủ VPN nhận được gói, nó sẽ mở gói bên ngoài và sau đó sử dụng khóa đối xứng của nó để giải mã nội dung của gói bên trong (gói ban đầu). Tiếp theo, máy chủ VPN sẽ gửi gói đến nơi định mệnh: máy chủ whatismyipaddress.com.

Bước 5: bước này giống như bước 4 trong trường hợp không có VPN.

Bước 6: Máy chủ VPN mã hóa tải trọng gói và đóng gói gói trước khi gửi đi.

Bước 7: bước này giống như bước 5 trong trường hợp không có VPN.

Bước 8: bước này rất giống với bước 6 trong trường hợp không có VPN. Khi máy tính của người dùng nhận được gói này, phần mềm VPN phía máy khách sẽ mở gói trước và sau đó giải mã gói bên trong bằng khóa đối xứng của nó.

Như chúng ta có thể biết từ sơ đồ, VPN bổ sung hai yếu tố bảo mật quan trọng: đóng gói gói và mã hóa.

VPN chặn các trang web, quảng cáo và trình theo dõi độc hại

Các trang web độc hại có thể tải xuống phần mềm độc hại và trình theo dõi trên thiết bị của bạn mà bạn không biết. VPN có bảo vệ tích hợp giúp ngăn ngừa nhiễm trùng bằng cách chặn các trang web này trước khi chúng có thể gây thiệt hại.

Một số cũng chặn quảng cáo và cửa sổ bật lên. Điều này ngăn quảng cáo độc hại lây nhiễm thiết bị của bạn bằng phần mềm độc hại và điều đó có nghĩa là bạn có thể tận hưởng các nền tảng phát trực tuyến, như YouTube, không có quảng cáo.

3. Các loại VPN 

VPN truy cập từ xa (remote-access VPN)

VPN truy cập từ xa được thiết lập khi một thiết bị duy nhất kết nối với mạng từ xa. Đây có lẽ là trường hợp cho hầu hết người dùng VPN gia đình. Chúng ta tải xuống phần mềm VPN trên điện thoại thông minh hoặc máy tính Hi của mình, đăng nhập bằng thông tin đăng nhập và chọn máy chủ VPN để kết nối. VPN truy cập từ xa cũng có thể mang lại lợi ích cho nhân viên công ty, những người cần truy cập vào tài nguyên của công ty khi làm việc tại nhà. Các bạn sẽ thấy rõ nhất điều này sau khi chúng ta thực hiện cài đặt và cấu hình VPN server trên Pi xong.

VPN Site-To-Site

VPN site-to-site là phổ biến cho các công ty có văn phòng ở các vị trí địa lý khác nhau. Nó kết nối một mạng của một văn phòng với một mạng của một văn phòng khác, cho phép hai văn phòng khác nhau chia sẻ tài nguyên riêng tư một cách an toàn qua internet. VPN site-to-site khác biệt nhiều so với VPN truy cập từ xa ở chỗ nó tạo ra một liên kết riêng giữa hai mạng khác nhau thay vì một thiết bị và một mạng.

Giao thức mã hóa

Lịch sử của các giao thức VPN có thể được bắt nguồn từ năm 1996 khi một kỹ sư phần mềm của Microsoft có tên Gurdeep Singh-Pallđã phát minh ra PPTP (Giao thức đường hầm điểm-điểm). Khi mọi người ngày càng quan tâm đến quyền riêng tư và bảo mật trực tuyến của họ, một số giao thức VPN gần đây đã được nghĩ ra. 

Những giao thức được ứng dụng rộng rãi ngày nay bao gồm: IPsec, TKE, L2TP, SSL/TLS.

4. Chuẩn bị

Để cài đặt đươcj VPN server lên Raspberry Pi, các bạn cần chuẩn bị những thứ sau:

  • Raspberry Pi, mình sử dụng phiên bản c 2011.12.
  • Cài đặt hệ điều hành nhân linux lên Pi, mình sử dụng Raspberry Pi OS (Raspbian) 
  • Máy tính PC hoặc laptop có cài hệ điều hành Windows, Ubuntu hay OS X.

Cấp nguồn điện cho Pi, kết nối Pi với mạng LAN (Wi-Fi hay Ethernet), Kết nối máy tính của bạn với LAN đó. Các bạn có thể điều khiển trực tiếp Pi qua chuột, bàn phím và màn hình hoặc điều khiển Pi qua SSH như mình. SSH có thể dùng trên mọi hệ điều hành, các bạn có thể tra google để tìm hiểu thêm nhé.

ssh {user}@{host}

Trong bài viết này, mình sẽ hướng dẫn các bạn cài đặt OpenVPN server thông qua PiVPN.

5. Cấu hình VPN server cho Raspberry Pi

Cấu hình IP tĩnh cho Raspberry Pi

IP là server trong mạng LAN nên cần có một IP tĩnh để tiện cho việc điều khiển sau này. Các bạn có thế tra google thêm cách cấu hình Ip tĩnh nhé, ở đây mình sẽ hướng dẫn một cách thôi. Mở cửa sổ terminal lên và thực hiện lện sau để kiểm tra cấu hình mạng, cần chú ý đến giao thức (card) mạng đang kết nối với LAN.

ifconfig

sau đó sử dùng lệnh sau để sửa file config.

sudo nano /etc/dhcpcd.conf

Thêm đoạn code sau:

interface eth0
static ip_address=192.168.100.12/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1

Trong đó interface là card mạng đang kết nối, mình cấu hình IP tĩnh là 192.168.100.12.

Tạo tên miền động (DDNS)

Do việc public IP của mạng sẽ thay đổi khi reset router hay theo thời gian cài đặt của nhà mạng ISPs, ta cần một tên miền trỏ tới public IP của nhà mình. Tên miền này sẽ thay cho IP khi một client muốn truy cập đến VPN server trong mạng LAN nhà bạn. Điều này giúp ta không phải sửa lại file cấu hình của client mỗi lần IP thay đổi.

Truy cập trang web https://www.noip.com/, đăng ký một tài khoản và tạo một tên miền theo ý bạn nhé. Đồng thời điền public IP hiện tại của mạng nhà bạn vào đó. Nếu bạn không biết IP của mình là gì thì vào trang này https://canyouseeme.org/ 

DDNS giúp chúng ta cập nhật public IP tự động khi mà địa chỉ IP bị thay đổi. Noip.com cung cấp cho chúng ta một ứng dụng có thể làm việc đó tự động thay chúng ta. Các bạn hãy cài đặt ứng dụng Dynamic update client (DUC) trên Raspberry Pi theo hướng dẫn của trang.

Cài đặt và cấu hình VPN server

Trên màn hình terminal của Pi thực hiện đoạn lệnh sau:

curl -L https://install.pivpn.io | bash

Màn hình terminal load dữ liệu và hiện lên thông báo rằng sẽ cài OpenVPN hoặc WireGuard server cho thiết bị, các bạn cứ nhân OK (Enter) nhé.

Sau đó nó hỏi là sử dụng DHCP hay cài IP tĩnh, ta chọn IP tĩnh nên chọn NO

Chọn user để lưu file cấu hình cho client

Chọn OpenVPN bằng cách di chuyển nút mũi tên và space để chọn sau đó ấn Enter

Đây là cấu hình đề nghị của PiVPN, tuy nhiên chúng ta sử dụng domain name riêng nên các ban hãy chọn YES để cấu hình lại nhé

Chọn giao thức lớp Transport, mình hay chọn UTP vì tốc độ nhanh hơn, các bạn có thể chon TCP vì độ tin cậy đường truyền 

Chọn port cho ứng dụng, mình để port mạch đinhcj của OpenVPN là 1194

Lựa chọn DNS provider, mình chọn OpenDNS

Sử dụng domain name mà các bạn đã tạo đựợc ở bước phía trên điền vào đây nhé.

 

Đoạn cấu hình dưới đây thì cứ để theo recommend của PiVPN. 

Vậy là cài đặt và cấu hình đã xong, các bạn nên reboot Pi để đảm bảo thiết bị hoạt động tốt sau cài đặt.

Mở port forwarding

Trong khi chờ đợ Pi khởi động lại, hãy quay về chiếc máy tính của mình và mở port fowarding cho router chính. Do có nhiều loại router trên thị trường nên mình không thể liệt kê cách thực hiện ở đây được. Các bạn hãy google nhé. Nội dung của việc làm này là mở port forwarding đển địa chỉ tĩnh của Pi ở port 1194 (hoặc cổng các bạn cấu hình bên trên). Mục đích là để các client bên ngoài mạng LAN có thể truy cập vào VPN server của chúng ta ở trong mạng.

Tạo thêm client

Bây giờ, quay lại với cửa sổ terminal của Pi. Hãy gõ lệnh 

pivpn add

Điền tên client muốn thêm, thời gian tồn tại của certificate và mật khẩu

file cấu hình có đuôi .ovpn được lưu trong thư lục /home/pi/ovpns/ (pi là tên user mình chọn trong bước cấu hình bên trên). Để chuyển file này qua máy tính của bạn mình hay sử dụng lệnh scp. Đầu tiên hãy mở terminal trên máy của bạn lên (cmd trên Windows) gõ lệnh sau

scp [email protected]:/home/pi/ovpns/client_1.ovpn .

Lệnh này thực hiện copy file /home/pi/ovpns/client_1.ovpn với quyền user của pi tại host 192.168.100.12 vào thư mục mà terminal đang trỏ tới hiện tại.

Kết nối VPN client với VPN server

Cài đặt OpenVPN client

OpenVPN client hỗ trợ nhiều nền tảng các bạn có thể sử dụng nó trên Windows cũng như Ubuntu hay MacOS. Mình sẽ sử dụng nó trên Ubuntu phiên bản OpenVPN3.

Thêm file cấu hình và connect

Nhớ rằng trước khi sử dụng VPN thì mình cần phải nằm trong một mạng khác thì mới kết nối được đến VPN server trong mạng LAN nhà mình. Hãy chuyển WiFi sang dùng của nhà hàng xóm chẳng hạn. Sử dụng lệnh sau để kết nối với VPN server nhà mình.

openvpn3 session-start --config ${MY_CONFIGURATION_FILE}

Với ${MY_CONFIGURATION_FILE} là tên file config ban đã lấy được tử Pi ở bước Tạo thêm client.

Thông báo Connected thành công. Để kiểm tra xem mình đã vào mạng LAN nhà mình hay chưa bằng lệnh sau:

nmap -sc 192.168.100.0/24

Kết quả trả về như sau

Như vậy là ta đã thấy những thiết bị đang kết nối trong mạng nhà mình, trong đó có con Pi. Các bạn hãy thử đăng nhập vào router nhà mình xem kết quả như nào nhé.

Tổng kết

Như vậy là chúng ta đã có một chiếc VPN server nhỏ gọn cá nhân đặt tại nhà. Hãy cảm nhân sự tiện lợi của nó khi bạn có thể truy cập vào mạng ở nhà khi đang làm việc ở cơ quan hay điều khiển được máy tính của mình một cách thoải mái mà không sợ bị tấn công. Cảm ơn các bạn đã theo dõi bài viết này của mình.