Trong bài viết này, chúng tôi sẽ xem xét việc cài đặt và cấu hình OpenVPN máy chủ chạy Linux CentOS / RHEL (7/8) và hiển thị cách kết hợp hai máy tính từ xa (hoặc văn phòng) sau NAT thành một mạng duy nhất bằng máy chủ OpenVPN đã được định cấu hình. Máy khách VPN sẽ được xác thực bằng chứng chỉ.
VPN là một tập hợp các công nghệ cho phép xây dựng một mạng an toàn qua các mạng công cộng hoặc Internet. Sử dụng VPN, bạn có thể kết nối các thiết bị hoặc mạng khác nhau thành một mạng cục bộ an toàn duy nhất qua Internet.
OpenVPN là một trong những triển khai dựa trên SSL / TLS mã nguồn mở của công nghệ VPN dựa trên OpenSSL. Sử dụng OpenVPN, bạn có thể kết nối cả văn phòng từ xa và các máy tính cá nhân phía sau thiết bị NAT thành một mạng duy nhất.
Cài đặt OpenVPN và Easy-RSA
Trong bước đầu tiên, bạn phải kết nối kho EPEL và cập nhật máy chủ của mình:
# yum install epel-release -y
# yum update -y
Sau khi hệ thống cập nhật, hãy cài đặt OpenVPN và Easy-RSA sử dụng trình quản lý gói yum (chúng tôi sẽ cần nó để triển khai cơ sở hạ tầng khóa PKI trên máy chủ VPN).
# yum install openvpn easy-rsa -y
Cách định cấu hình Easy-RSA và tạo chứng chỉ X.509?
Sao chép tất cả easy-rsa tập lệnh tới / etc / openvpn / :
# cp -r /usr/share/easy-rsa /etc/openvpn/
Truy cập / etc / openvpn / easy-rsa / 3 / và tạo vars nộp ở đó:
# cd /etc/openvpn/easy-rsa/3/
# nano vars
Thêm nội dung tệp (bạn có thể sửa đổi cấu hình theo nhu cầu của mình):
set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "MUN" set_var EASYRSA_REQ_CITY "BY" set_var EASYRSA_REQ_ORG "WOSHUB" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "IT dept" set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_NS_SUPPORT "no" set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY" set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf" set_var EASYRSA_DIGEST "sha512"
Bạn có thể chỉ định bất kỳ dữ liệu nào trong tệp, nó sẽ không ảnh hưởng đến cấu hình và hoạt động thêm của máy chủ.
Tệp phải thực thi được, vì vậy hãy chạy:
# chmod +x vars
Tạo chứng chỉ và khóa OpenVPN
Trước khi tạo khóa, hãy khởi chạy PKI thư mục và tạo CA khóa.
# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/easy-rsa/3/pki
Tạo CA khóa:
# ./easyrsa build-ca
Sau khi chạy lệnh, bạn sẽ cần nhập mật khẩu để tạo khóa và chứng chỉ. Bạn sẽ cần mật khẩu sau này để ký các chứng chỉ.
Tạo khóa máy chủ (tên máy chủ là vpn.woshub.com ):
nopass tùy chọn vô hiệu hóa mật khẩu
# ./easyrsa gen-req vpn.woshub.com nopass
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key .........................++ writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [vpn.woshub.com]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/vpn.woshub.com.req key: /etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key
Khi cấp chứng chỉ, nhấn Enter trong cột Tên chung .
Ký khóa vpn.woshub.com bằng chứng chỉ CA của chúng tôi:
# ./easyrsa sign-req server vpn.woshub.com
Để ký chứng chỉ, chúng tôi sẽ cần mật khẩu mà chúng tôi đã đặt khi phát hành CA chứng chỉ:
Như được hiển thị trong ảnh chụp màn hình, bạn sẽ phải nhập có và CA mật khẩu đang được xử lý.
Để đảm bảo rằng các chứng chỉ đã được tạo không có lỗi, hãy chạy lệnh này:
# openssl verify -CAfile pki/ca.crt pki/issued/vpn.woshub.com.crt
pki/issued/vpn.woshub.com.crt: OK
Tất cả chứng chỉ máy chủ OpenVPN đã được tạo.
- Chứng chỉ gốc
pki/ca.crt
- Khóa máy chủ riêng
pki/private/vpn.woshub.com.key
- Chứng chỉ máy chủ
pki/issued/vpn.woshub.com.crt
Để tạo khóa ứng dụng, hãy chạy lệnh sau:
# ./easyrsa gen-req client_name nopass
Hãy tạo admin1 khóa ứng dụng khách:
# ./easyrsa gen-req admin1 nopass
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key ..........++ writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [admin1]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key
Bạn phải ký nó bằng chứng chỉ CA, như khóa máy chủ:
# ./easyrsa sign-req client admin1
Chứng chỉ cho người dùng đã được tạo.
Ngoài ra, bạn phải tạo khóa Diffie-Hellman để được sử dụng cho việc trao đổi khóa:
# ./easyrsa gen-dh
Phải mất một khoảng thời gian để tạo:
Sau đó, tạo chứng chỉ TSL:
# openvpn --genkey --secret ta.key
Nếu sau này chúng tôi định thu hồi chứng chỉ ứng dụng khách, chúng tôi cần tạo khóa CRL:
# ./easyrsa gen-crl
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Using configuration from /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/openvpn/easy-rsa/3/pki/crl.pem
Để thu hồi chứng chỉ, hãy chạy lệnh sau:
./easyrsa revoke admin1
- nơi admin1 là tên chứng chỉ
Các chứng chỉ cần thiết đã được tạo. Bây giờ sao chép chúng vào thư mục công việc.
Đây là các chứng chỉ máy chủ:
# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/vpn.woshub.com.crt /etc/openvpn/server/
# cp pki/private/vpn.woshub.com.key /etc/openvpn/server/
# cp pki/private/dh.pem /etc/openvpn/server/
# cp pki/private/ta.key /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/
Đây là các chứng chỉ khách hàng:
# cp pki/issued/admin1.crt /etc/openvpn/client/
# cp pki/private/admin1.key /etc/openvpn/client/
Tệp cấu hình máy chủ OpenVPN, Quy tắc tường lửa
Hãy chuyển sang cài đặt của tệp cấu hình OpenVPN. Trước hết, hãy tạo tệp cấu hình OpenVPN của bạn server.conf :
# cd /etc/openvpn/ && nano server.conf
Thay đổi nội dung tệp như sau:
# Specify the port, protocol and device port 1194 proto udp dev tun # Specify the paths to the server certificates ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/vpn.woshub.com.crt key /etc/openvpn/server/vpn.woshub.com.key # Paths to key CRL and DH dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem # Specify the IP settings of the network VPN clients will get addresses from server 10.1.2.0 255.255.255.0 push "redirect-gateway def1" # Specify the assigned DNS servers push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # Allow connection to different clients with the same key duplicate-cn # TLS protection tls-auth /etc/openvpn/server/ta.key 0 cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache # Other configuration details keepalive 20 60 persist-key persist-tun comp-lzo yes daemon user nobody group nobody # Path to the log file log-append /var/log/openvpn.log verb 3
Sau đó, lưu tệp. Tôi đã chỉ định cổng UDP mặc định 1194 cho máy chủ VPN của mình, nhưng bạn có thể chỉ định bất kỳ cổng miễn phí nào trên máy chủ cho OpenVPN của bạn.
Bây giờ bạn chỉ cần thiết lập các quy tắc tường lửa để cho phép kết nối và định tuyến giữa các phân đoạn.
Nếu bạn đang sử dụng firewalld, hãy kích hoạt chuyển tiếp mô-đun hạt nhân đầu tiên:
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1
Thêm dịch vụ openvpn vào firewalld và tun0 giao diện với vùng đáng tin cậy:
# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --permanent --zone=trusted --add-interface=tun0
Kích hoạt ‘MASQUERADE’ cho vùng đáng tin cậy của firewalld:
# firewall-cmd --permanent --zone=trusted --add-masquerade
Kích hoạt NAT:
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.1.2.0/24 -o Server_IP -j MASQUERADE
# firewall-cmd –reload
# iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
# iptables -A INPUT -p udp –dport 1194 -j ACCEPT
# service iptables save
Chạy dịch vụ OpenVPN và thêm nó vào khởi động:
# systemctl start openvpn@server
# systemctl enable openvpn@server
Đảm bảo rằng cổng udp \ 1194 đang nghe bởi dịch vụ openvpn:
# lsof -i:1194
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME openvpn 12327 nobody 5u IPv4 45122 0t0 UDP *:openvpn
Kiểm tra cài đặt IP của giao diện mạng:
# ip a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.1.2.1 peer 10.1.2.2/32 scope global tun0 valid_lft forever preferred_lft forever
Như bạn có thể thấy, mạng được chỉ định trong quá trình cấu hình được thêm vào tun0 thiết bị.
Đây là những cài đặt tối thiểu để OpenVPN của bạn hoạt động.
Cách kết nối nhiều văn phòng (Máy tính) bằng OpenVPN?
Hãy xem cách kết nối với máy chủ OpenVPN từ hai máy tính từ xa có quyền truy cập Internet thông qua NAT và kết nối chúng thành một mạng duy nhất. Để kết nối từ máy tính chạy Windows với máy chủ OpenVPN, tôi đang sử dụng ứng dụng khách chính thức. Bạn có thể tải xuống trên trang web chính thức, nhưng chúng tôi sẽ không mô tả chi tiết về nó và hãy chuyển trực tiếp đến cấu hình của nó.
Sau khi bạn đã cài đặt ứng dụng khách, hãy chuyển sang tạo tệp cấu hình tại đây:
C:\Program Files\OpenVPN\config\
Tôi đã tạo một tệp với ứng dụng khách tên và thêm các nội dung sau vào đó:
client dev tun proto udp remote 112.113.114.15 1194 resolv-retry infinite nobind block-outside-dns persist-key persist-tun mute-replay-warnings remote-cert-tls server tls-client auth SHA512 tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 remote-cert-eku "TLS Web Server Authentication" ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\admin1.crt" key "C:\\Program Files\\OpenVPN\\config\\admin1.key" cipher AES-256-CBC comp-lzo verb 3
Để định cấu hình nó, chúng tôi sẽ cần các chứng chỉ ứng dụng khách, bảo mật và máy chủ mà chúng tôi đã tạo trước đó. Bạn phải tải chúng xuống từ máy chủ của mình và đặt vào một thư mục cục bộ. Sau đó, chỉ định đường dẫn đến chúng trong tệp cấu hình ứng dụng khách OpenVPN.
Sau đó, bạn có thể kết nối với máy chủ bằng cách nhấp vào biểu tượng OpenVPN trong khay:
Tôi đã kết nối và có địa chỉ IP sau cho thiết bị của mình:
IPv4 address. . . . . . . . . . . . : 10.1.2.14 Subnet mask . . . . . . . . . . : 255.255.255.0
Trên máy tính thứ hai sau NAT, tôi đã thực hiện các hành động tương tự và tạo trước chứng chỉ cho người dùng thứ hai. Sau khi kết nối, PC thứ hai cũng nhận được địa chỉ IP từ mạng VPN:
IPv4 address. . . . . . . . . . . . : 10.1.2.16 Subnet mask . . . . . . . . . . : 255.255.255.0
Sau khi kết nối, cả hai máy tính đều ở trong cùng một mạng và nhìn thấy nhau.
Ping PC thứ hai:
Pinging 10.1.2.16 with 32 bytes of data: Reply from 10.1.2.16: bytes=32 time=73ms TTL=127
Ping trên PC đầu tiên:
Pinging 10.1.2.14 with 32 bytes of data: Reply from 10.1.2.14: bytes=32 time=79ms TTL=127
Cả hai máy khách VPN được kết nối đều có thể gửi gói và truyền tệp trực tiếp cho nhau. Do đó, chúng tôi có thể kết hợp thực tế hai thiết bị đặt ở những nơi khác nhau của quốc gia thành một mạng cục bộ.
Bạn có thể tạo bất kỳ số lượng khóa hoặc chứng chỉ nào cho người dùng trên máy chủ OpenVPN của mình. Nếu bạn cần chứng chỉ mới, hãy chạy các lệnh này cho / etc / openvpn / easy-rsa / 3:
# ./easyrsa gen-req clientname nopass
# ./easyrsa sign-req client clientname
Đừng quên thu hồi chứng chỉ ứng dụng khách nếu chúng không được sử dụng để giữ an toàn cho mạng của bạn.