Thứ ba, 14/04/2015 | 00:00 GMT+7

Cách cấu hình và kết nối với server OpenVPN riêng trên FreeBSD 10.1

OpenVPN là ứng dụng server / client mạng riêng ảo (VPN) open-souce cho phép bạn tham gia mạng ảo (tương tự như mạng LAN) một cách an toàn.

Hướng dẫn này sẽ giải thích cách cài đặt và cấu hình server OpenVPN trên máy FreeBSD 10.1 với IPv4 NAT và định tuyến. Nó bao gồm các giải thích ngắn về các tùy chọn cấu hình khác nhau.

Đến cuối hướng dẫn này, bạn sẽ chạy server OpenVPN của riêng mình và có sẵn file cấu hình client để download để kết nối với mạng này.

Yêu cầu

  • Một server FreeBSD 10.1. Kích thước server phụ thuộc vào số lượng client bạn định kết nối với VPN; 519 MB là tốt cho một số khách hàng
  • Quyền truy cập root. sudo được cài đặt sẵn trên DigitalOcean, vì vậy không cần làm gì thêm

Hướng dẫn này yêu cầu quyền truy cập root. Trên DigitalOcean, truy cập server với quyền là user freebsd mặc định, sau đó truy cập root shell:

sudo tcsh 

Bước 1 - Cài đặt OpenVPN

Cài đặt OpenVPN với hệ thống pkg khá đơn giản. Chỉ cần chạy các lệnh sau để cập nhật danh sách gói và cài đặt phần mềm VPN:

pkg update pkg install openvpn 

Điều này cũng sẽ cài đặt gói easy-rsa , gói này sẽ được sử dụng để tạo các cặp khóa SSL.

Bước 2 - Cấu hình Server OpenVPN

Đối với hướng dẫn này, ta sẽ dựa trên file cấu hình mẫu do OpenVPN cung cấp. Ta sẽ tạo một folder cấu hình cho OpenVPN:

mkdir /usr/local/etc/openvpn 

Sao chép file ví dụ server.conf vào folder mới.

cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf 

Cài đặt nano hoặc editor yêu thích của bạn:

pkg install nano 

Mở file cấu hình để chỉnh sửa:

nano /usr/local/etc/openvpn/server.conf 

Lưu ý: Định dạng file cấu hình OpenVPN đặt tiền tố cho comment bằng dấu chấm phẩy ( ; ) hoặc dấu thăng ( # ). Trong ví dụ này, dấu chấm phẩy được sử dụng để comment (vô hiệu hóa) các tùy chọn cấu hình và dấu thăng được sử dụng cho comment .

Nếu bạn biết tùy chọn cấu hình nào bạn muốn sửa đổi, bạn có thể làm như vậy tại thời điểm này.

  • port tùy chọn : Cổng mặc định là 1194, nhưng bạn có thể thay đổi cổng này thành bất kỳ thứ gì bạn thích
  • proto tùy chọn : Chọn tcp hoặc udp ; mặc định là ổn
  • usergroup : Đặt chúng thành nobody bằng cách bỏ ghi chú các dòng. Điều này sẽ làm cho OpenVPN chạy với ít quyền hơn, để bảo mật
user nobody group nobody 

Lưu ý: Mỗi cấu hình chỉ có thể chạy một cổng và giao thức cùng một lúc.

Cuối cùng, hãy nhớ lưu các thay đổi .

Bước 3 - Tạo certificate và khóa server

easy-rsa giúp tạo certificate và khóa đơn giản.

Đầu tiên, sao chép chương trình vào folder cấu hình của bạn, vì bạn sẽ sửa đổi các giá trị.

cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa 

Mở file vars để chỉnh sửa:

nano /usr/local/etc/openvpn/easy-rsa/vars 

Thay đổi kích thước khóa bằng cách sửa đổi dòng này:

export KEY_SIZE=2048 

Ngày nay, tiêu chuẩn là các khóa 2048-bit, mặc dù bạn cũng có thể sử dụng 4096-bit, an toàn hơn nhưng làm chậm quá trình đàm phán.

Nếu muốn, bạn cũng có thể đặt các giá trị khóa và certificate mặc định trong file này để không phải nhập chúng sau này.

Vì shell mà ta đang sử dụng là tcsh , các dòng export cần được thay thế bằng setenv . Điều này được thực hiện với sed trước khi source . Di chuyển đến folder easy-rsa của ta (bắt buộc).

cd /usr/local/etc/openvpn/easy-rsa/ 

Thay thế các dòng:

cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin 

Vẫn từ folder /usr/local/etc/openvpn/easy-rsa/ của ta , trước tiên hãy làm sạch folder , sau đó xây dựng tổ chức phát hành certificate (CA).

./clean-all ./build-ca 

Bạn sẽ được yêu cầu đặt các tùy chọn CA. Điền vào những thông tin chi tiết của bạn:

Country Name (2 letter code) [US]:GB State or Province Name (full name) [CA]:Somerset Locality Name (eg, city) [SanFrancisco]:Bath Organization Name (eg, company) [Fort-Funston]:Callum Organizational Unit Name (eg, section) [changeme]:VPN Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com Name [changeme]:Callum's VPN CA Email Address [mail@host.domain]:callum@example.com 

Bây giờ xây dựng khóa server :

./build-key-server server 

, hãy cài đặt các tùy chọn. Bạn không cần password hoặc tên công ty tùy chọn.

Nhập y để ký và xác nhận khóa:

Country Name (2 letter code) [US]:GB State or Province Name (full name) [CA]:Somerset Locality Name (eg, city) [SanFrancisco]:Bath Organization Name (eg, company) [Fort-Funston]:Callum Organizational Unit Name (eg, section) [changeme]:VPN Common Name (eg, your name or your server's hostname) [server]:vpn.example.com Name [changeme]:Callum's VPN Server Email Address [mail@host.domain]:callum@example.com  Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ENTER An optional company name []: ENTER  Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days) Sign the certificate? [y/n]: y  1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated 

Cuối cùng, khóa Diffie-Hellman phải được tạo. Quá trình này có thể mất một chút thời gian tùy thuộc vào kích thước khóa:

./build-dh 

Bây giờ tất cả các khóa server và certificate đã được tạo, chúng sẽ được sao chép vào folder cấu hình OpenVPN của ta .

cd /usr/local/etc/openvpn/easy-rsa/keys/ cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/ 

Bạn đã hoàn tất với các certificate server ! Bây giờ đến certificate khách hàng.

Bước 4 - Tạo certificate khách hàng

Mỗi client cũng cần một certificate và khóa để xác thực và kết nối với VPN. Đảm bảo rằng bạn đang ở trong folder /usr/local/etc/openvpn/easy-rsa/ .

cd /usr/local/etc/openvpn/easy-rsa/ 

Chạy lệnh sau, trong đó clientName là tên bạn muốn sử dụng cho certificate ứng dụng client cụ thể này.

./build-key clientName 

Bạn sẽ được yêu cầu nhập lại tên quốc gia, tên city , v.v. Quá trình này cũng giống như quá trình tạo khóa server . Đây được coi là thông tin của khách hàng nhưng không có thông tin nào thực sự quan trọng.

Bạn không cần password hoặc tên công ty. Nhập y để ký và commit certificate .

Lưu ý: Bạn nên sử dụng một certificate khác nhau cho từng client và điều này được thực thi bởi OpenVPN theo mặc định. Tuy nhiên, nếu được yêu cầu, điều này có thể bị tắt trong cấu hình OpenVPN (sẽ giải thích ở phần sau).

Nếu bạn đã sử dụng kích thước khóa khác với 2048 bạn cần sửa đổi cấu hình OpenVPN để trùng với tên file của kích thước khóa mà bạn đã sử dụng. Nếu bạn không nhớ, bạn có thể xem tên file chính xác của file dh bằng lệnh sau:

ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem 

Chỉnh sửa server.conf :

nano /usr/local/etc/openvpn/server.conf 

Thay thế dòng dh dh2048.pem bằng:

dh dhSIZE.pem 

Nếu bạn đã làm theo đề xuất của ta cho khóa 2048-bit trước đó, bạn không phải thực hiện bất kỳ thay đổi nào.

Lặp lại phần này cho từng certificate ứng dụng client riêng biệt mà bạn muốn tạo.

Bước 5 - Cấu hình định tuyến NAT IPv4

FreeBSD bao gồm natd như một phần của firewall ipfw cho phép định tuyến NAT và được dùng cho OpenVPN. Để sử dụng điều này, hãy chỉnh sửa /etc/rc.conf :

nano /etc/rc.conf 

Thêm các nội dung này ở dưới cùng:

firewall_enable="YES" firewall_type="open"  gateway_enable="YES" natd_enable="YES" natd_interface="vtnet0" natd_flags="-dynamic -m" 
  • firewall_enable ipfw cần cho natd
  • firewall_type="open" làm cho firewall cho phép lưu lượng truy cập như mặc định
  • gateway_enable đặt net.inet.ip.forwarding thành 1 cho phép định tuyến IPv4 trên hệ thống
  • natd_enable bộ định tuyến NAT thực tế
  • natd_interface là giao diện bên ngoài hướng tới Internet; vtnet0 được sử dụng cho DigitalOcean
  • natd_flags làm cho NAT động và -m bảo toàn số cổng

Bây giờ khởi động lại server của bạn để tải ipfwnatd :

reboot 

Đăng nhập lại. Sau khi khởi động lại, hãy nhớ chạy lại sudo tcsh để trở thành root nếu bạn chưa có.

Bước 6 - Cấu hình cấu hình định tuyến OpenVPN và DNS

Theo mặc định, OpenVPN không được cấu hình để yêu cầu client định tuyến lưu lượng truy cập Internet thông qua VPN. Ta sẽ đảm bảo nó định tuyến lưu lượng truy cập qua OpenVPN bằng cách bỏ ghi chú một số dòng trong /usr/local/etc/openvpn/server.conf :

nano /usr/local/etc/openvpn/server.conf 

Xác định vị trí và bỏ ghi chú ba dòng sau:

push "redirect-gateway def1 bypass-dhcp"  push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" 

Server DNS đặt trước dành cho OpenDNS nhưng bạn có thể đặt chúng thành bất kỳ DNS nào bạn thích (chẳng hạn như Google DNS với 8.8.8.88.8.4.4 ).

Cài đặt tùy chọn:

Bạn cũng có thể cho phép khách hàng giao tiếp trực tiếp với các IP của nhau bằng cách bỏ ghi chú:

client-to-client 

Nếu, như đã đề cập trước đó, bạn muốn sử dụng cùng một khóa và certificate cho nhiều client (hơi kém an toàn hơn), hãy bỏ comment này:

duplicate-cn 

Có thể bật và tắt tính năng nén với dòng này:

comp-lzo 

Mật mã của bạn có thể được đặt theo cách thủ công bằng cách bỏ ghi chú một trong các dòng sau:

cipher BF-CBC        # Blowfish (default) cipher AES-128-CBC   # AES cipher DES-EDE3-CBC  # Triple-DES 

Lưu ý: Bất kỳ mật mã nào bạn sử dụng cũng phải được xác định trong file cấu hình client mà ta sẽ tạo sau này.

Các mật mã bổ sung cũng có sẵn, chẳng hạn như aes-256-cbc .

Bước 7 - Khởi động OpenVPN

Cho phép OpenVPN tải khi khởi động và tải bằng lệnh service bằng cách thêm dòng sau vào /etc/rc.conf :

nano /etc/rc.conf 

Thêm các dòng này ở cuối file :

openvpn_enable="YES" openvpn_configfile="/usr/local/etc/openvpn/server.conf" 

Server OpenVPN hiện đã được cấu hình đầy đủ và sẽ tải khi khởi động.

Khởi động server theo cách thủ công với:

service openvpn start 

Sản lượng mong đợi:

add net 10.8.0.0: gateway 10.8.0.2 

Server OpenVPN của bạn hiện đang chạy.

Bước 8 - Cấu hình file khách hàng

Trên server , ta sẽ tạo file cấu hình cho từng client .

Đầu tiên, tạo một folder để làm việc trong:

mkdir -p /usr/local/etc/openvpn/clients/clientName 

Đặt clientName là tên khách hàng mà ta đã đặt trước đó trong khi tạo certificate . (Không quan trọng chính xác cách bạn đặt nó như thế nào vì nó chỉ là một folder đang hoạt động.)

Di chuyển đến folder mới:

cd /usr/local/etc/openvpn/clients/clientName/ 

Sao chép khóa ứng dụng và certificate mà ta đã tạo bằng easy-rsa và file client.conf mẫu. Đảm bảo rằng bạn thay thế clientName bằng tên bạn đã sử dụng trước đó cho các file .key.crt :

cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.key ./ cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf cp /usr/local/etc/openvpn/ca.crt ./ 

, clientName là những gì ta đã sử dụng trước đó.

Chỉnh sửa file client.conf :

nano ./client.conf 

Cập nhật dòng remote để bao gồm địa chỉ IP của Server (có thể lấy được bằng ifconfig ) và số cổng; 1194 là mặc định:

remote your_server_ip 1194 

Lưu ý: Nếu bạn đã sửa đổi cài đặt cipher hoặc comp-lzo của server , thì điều này phải được phản ánh trong file client.conf . Sử dụng các cài đặt tương tự bạn đã làm trước đó; ví dụ:

cipher aes-256-cbc ;comp-lzo 

Cài đặt này sử dụng mật mã aes-256-cbc và tắt tính năng nén.

Nếu bạn đã thay đổi dòng proto trong cấu hình server , thì điều này cũng cần được phản ánh trong client .

Đảm bảo những dòng này trùng với những gì bạn đã đặt trước đó; nếu bạn không thay đổi bất kỳ điều gì ở phía server , đừng thay đổi chúng ở đây.

Bây giờ một chút về quản lý nhà; ta sẽ nhúng các certificate và khóa vào file cấu hình duy nhất. Điều này làm cho việc chuyển giao cho khách hàng cá nhân dễ dàng hơn. Ngoài ra, bạn có thể download file cấu hình và khóa và hai file certificate cho client riêng biệt.

Trong cùng một file client.conf , hãy comment về certificate và tên file khóa:

;ca ca.crt ;cert client.crt ;key client.key 

Lưu các thay đổi .

Cuối cùng, ta cần nhúng các clientName .crt ca.crt , clientName .crtclientName .key vào file cấu hình. Bạn có thể copy paste nội dung bằng cat hoặc nano hoặc bất cứ thứ gì bạn thấy thoải mái nhất và các biến thích hợp cho OpenVPN hoặc bạn có thể sử dụng tập lệnh một dòng được hiển thị bên dưới.

Chạy tập lệnh này và nhập clientName của bạn khi được yêu cầu . Tập lệnh gắn certificate và các file khóa của bạn vào file client.conf , với các tên biến và dòng mới thích hợp mà OpenVPN đang mong đợi:

echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf 

Đảm bảo rằng bạn cuộn hết cỡ sang bên phải, vì đây là một lệnh dài.

Hãy xem file client.conf đã hoàn thành bằng nano hoặc cat . Bạn sẽ thấy khóa và certificate được thêm vào file ở dưới cùng.

Bạn đã hoàn tất! Tất cả những gì cần làm bây giờ là phân phối file client.conf cho client của bạn. Hầu hết khách hàng thích phần mở rộng .ovpn thành .conf , vì vậy bạn cần đổi tên file local thành my_digitalocean_vpn.ovpn hoặc một cái gì đó tương tự.

Lặp lại phần này cho từng khách hàng. Sử dụng các certificate riêng biệt theo mặc định hoặc sử dụng cùng một certificate ứng dụng client trên mỗi ứng dụng client nếu bạn muốn.

Kết luận và cài đặt client

Đến đây bạn sẽ có một server OpenVPN đang hoạt động!

Download file cấu hình ứng dụng client bạn đã tạo ở bước trước ( /usr/local/etc/openvpn/clients/ clientName /client.conf ) vào máy local của bạn. Sử dụng một phương pháp an toàn để download file , chẳng hạn như SCP hoặc SFTP .

Cũng trên máy local của bạn, hãy cài đặt ứng dụng client OpenVPN. Tunnelblick hoạt động tốt trên Mac OS X và OpenVPN có ứng dụng client Windows.

Đảm bảo rằng file cấu hình client của bạn được đặt tên như mong đợi; đây thường là tên như my_digitalocean_vpn.ovpn .

Bấm đúp vào file hoặc di chuyển nó vào folder mong đợi của khách hàng của bạn.

Khởi động ứng dụng client của bạn và kết nối với server OpenVPN thích hợp.

Để đảm bảo VPN của bạn đang hoạt động, hãy sử dụng trình kiểm tra địa chỉ IP chẳng hạn như http://www.whatismyip.com/ . IP của bạn được hiển thị phải trùng với IP của server OpenVPN của bạn.

Xin chúc mừng! Bạn đã kết nối với server OpenVPN mới của bạn .


Tags:

Các tin trước

Cách chạy OpenVPN trong Docker Container trên Ubuntu 14.04 2015-02-02
Cách thiết lập server OpenVPN trên Ubuntu 14.04 2015-01-28
Cách cài đặt và cấu hình server truy cập OpenVPN trên CentOS 6.5 2014-04-04
Cách bảo mật lưu lượng truy cập giữa các VPS bằng OpenVPN 2013-09-26
Cách thiết lập và cấu hình server OpenVPN trên Debian 6 2013-05-03
Cách thiết lập và cấu hình server OpenVPN trên CentOS 6 2013-05-02