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ọntcp
hoặcudp
; mặc định là ổn -
user
vàgroup
: Đặt chúng thànhnobody
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 chonatd
-
firewall_type="open"
làm cho firewall cho phép lưu lượng truy cập như mặc định -
gateway_enable
đặtnet.inet.ip.forwarding
thành1
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 ipfw
và natd
:
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.8
và 8.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
và .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ặccomp-lzo
của server , thì điều này phải được phản ánh trong fileclient.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 .crt
và clientName .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 .
Các tin liên quan
Cách chạy OpenVPN trong Docker Container trên Ubuntu 14.042015-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