Cài đặt OpenVPN server trên Linux giúp bạn tạo mạng riêng ảo (VPN) an toàn để truy cập internet và tài nguyên mạng cục bộ từ xa. Các kết nối sẽ được mã hoá tăng bộ bảo mật, tránh rò rỉ dữ liệu không mong muốn. Hãy cùng Vietnix tìm hiểu thêm về cách cài đặt OpenVPN server trên Linux qua bài viết sau đây.
Sơ lược về OpenVPN
OpenVPN là một SSL VPN có đầy đủ tính năng, với phần mở rộng mạng OSI layer 2 hoặc 3 dựa trên giao thức SSL/TLS. Đây là một phần mềm mã nguồn mở, được phân phối theo GNU GPL. Một VPN cho phép người dùng kết nối an toàn đến mạng các mạng công cộng có bảo mật thấp, chẳng hạn như ở quán cafe hay sân bay. Bên cạnh đó, VPN cũng thường được dùng để truy cập tài nguyên công ty hoặc server gia đình. VPN còn cho giúp người dùng truy cập vào các website bị chặn theo vị trí địa lý, đồng thời tăng khả năng bảo mật khi sử dụng Internet.
Trong bài viết này, ta sẽ cùng tìm hiểu cách cài đặt tự động OpenVPN server trên Linux Ubuntu 18.04, 20.04 LTS và cấu hình firewall ufw/iptables.
Các bước thực hiện cài đặt OpenVPN server trên Linux
Bước 1: Kiểm tra địa chỉ IP public
Sử dụng một trong các lệnh dưới đây để tìm địa chỉ IPv4 public của máy, tùy vào việc tên interface là eth0
hay eth1
:
ip addr show eth0
Hoặc
ip addr show eth1
Ngoài ra ta cũng có thể sử dụng lệnh host
hoặc dig
như sau:
host myip.opendns.com resolver1.opendns.com ## get IPv4 ## host -4 myip.opendns.com resolver1.opendns.com
Hoặc
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com ## see IPv4 instead of default IPv6 ## dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com
![Hướng dẫn cài đặt OpenVPN server trên Linux 3 Hướng dẫn cài đặt OpenVPN server trên Linux](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/my-public-ip.webp)
Sau khi có được IP4 hoặc IPv6 thì bạn hãy ghi chú lại 2 giá trị này sẽ cần dùng đến sau đó để thiết lập OpenVPN server trên Ubuntu.
Ví dụ: bạn ghi lại địa chỉ IPv4 public là 172.105.102.90 (hoặc IPv6 2600:3c04::f03c:92ff:fe42:3d72), tức là địa chỉ IP public của OpenVPN server được cung cấp bởi Ubuntu Linux.
Bước 2: Tải về script openvpn-install.sh
Nhập lệnh dưới đây để download script:
wget https://git.io/vpn -O openvpn-install.sh
Để xác thực xem quá trình download đã hoàn tất hay chưa, ta có thể dùng một text editor bất kỳ:
nano openvpn-install.sh
Bước 3: Chạy file script để cài đặt OpenVPN server
Nhập các lệnh dưới đây để cài đặt server từ script openvpn-install.sh:
sudo chmod +x openvpn-install.sh sudo bash openvpn-install.sh
Hãy đảm bảo rằng ta đã cung cấp đủ thông tin:
Welcome to this OpenVPN road warrior installer!
Which protocol should OpenVPN use?
1) UDP (recommended)
2) TCP
Protocol [1]: 1
What port should OpenVPN listen to?
Port [1194]:
Select a DNS server for the clients:
1) Current system resolvers
2) Google
3) 1.1.1.1
4) OpenDNS
5) Quad9
6) AdGuard
DNS server [1]: 2
Enter a name for the first client:
Name [client]: iphone
OpenVPN installation is ready to begin.
Press any key to continue...
Nhấn bất kỳ phím nào trên bàn phím, màn hình sẽ hiển thị thông tin như sau:
writing new private key to '/etc/openvpn/server/easy-rsa/pki/easy-rsa-1768.FjG9Gr/tmp.vQL9q8'
-----
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-1768.FjG9Gr/tmp.FiauWW
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Dec 7 09:22:17 2030 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating a RSA private key
....................................+++++
...................+++++
writing new private key to '/etc/openvpn/server/easy-rsa/pki/easy-rsa-1843.4USwJm/tmp.lOecLW'
-----
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-1843.4USwJm/tmp.5j0n6q
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'iphone'
Certificate is to be certified until Dec 7 09:22:17 2030 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-1899.k6zZtP/tmp.riZi2R
An updated CRL has been created.
CRL file: /etc/openvpn/server/easy-rsa/pki/crl.pem
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-iptables.service → /etc/systemd/system/openvpn-iptables.service.
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-server@server.service → /lib/systemd/system/openvpn-server@.service.
Finished!
The client configuration is available in: /root/iphone.ovpn
New clients can be added by running this script again.
Bước 4: Kiểm tra và thiết lập server OpenVPN trên Ubuntu Firewall Rules
Bây giờ server OpenVPN đã được thiết lập thành công và sẵn sàng để sử dụng. Ta có thể xem các quy tắc firewall đã được thêm trong file sau:
/etc/systemd/system/openvpn-iptables.service
sudo systemctl cat openvpn-iptables.service
Output:
[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.105.102.90
ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/usr/sbin/iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.105.102.90
ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 1194 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStart=/usr/sbin/ip6tables -t nat -A POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2600:3c04::f03c:92ff:fe42:3d72
ExecStart=/usr/sbin/ip6tables -I FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStart=/usr/sbin/ip6tables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/usr/sbin/ip6tables -t nat -D POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2600:3c04::f03c:92ff:fe42:3d72
ExecStop=/usr/sbin/ip6tables -D FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStop=/usr/sbin/ip6tables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Bạn có thể xem file cấu hình của server openvpn được tạo bởi script:
sudo more /etc/openvpn/server/server.conf
Output như sau:
local 172.105.102.90
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
server-ipv6 fddd:1194:1194:1194::/64
push "redirect-gateway def1 ipv6 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
explicit-exit-notify
Các thao tác với server OpenVPN trên Ubuntu Linux
Dừng – chạy – khởi động lại server OpenVPN
Chạy lệnh sau để dừng dịch vụ OpenVPN trên máy:
sudo systemctl stop openvpn-server@server.service
Khởi động lại server:
sudo systemctl start openvpn-server@server.service
Restart dịch vụ:
sudo systemctl restart openvpn-server@server.service
Kiểm tra trạng thái:
sudo systemctl status openvpn-server@server.service
Cấu hình client OpenVPN
Trên server sẽ có một file config client có tên ~iphone.ovpn (tên có thể khác tùy vào quá trình cài đặt). Ta có thể tìm file config này như sau:
sudo find / -type f -name "iphone.ovpn" sudo find / -type f -name "*.ovpn" -ls
Bây giờ ta có thể copy file này vào desktop cục bộ bằng lệnh scp
rồi đưa file này cho client OpenVPN để kết nối (lưu ý thay iphone.ovpn và root username bằng tên tương ứng như khi cài đặt):
scp root@172.105.102.90:~/iphone.ovpn .
Nếu không chạy được lệnh scp
bằng quyền root thì hãy thử đăng nhập theo user thường:
ssh {user}@172.105.102.90<br>ssh vietnix@172.105.102.90
Tìm vị trí file opvn:
sudo find / -type f -name "*.ovpn" -ls
Sau đó copy file bằng lệnh cp
trong home directory (trong ví dụ này là /home/vietnix
):
sudo cp /root/desktopclient.ovpn /home/vietnix/
Sau đó nhập lệnh scp
từ desktop:
scp vivek@172.105.102.90:/home/vivek/desktopclient.ovpn .
Bây giờ ta cần download client OpenVPN theo hệ thống hoặc thiết bị di động:
- Client cho Apple iOS bản 6.x trở lên
- Android client
- Apple MacOS (OS X)
- Windows 8/10 OpenVPN client
Cấu hình cho OpenVPN macOS/OS X
Click đúp vào file iphone.ovpn rồi mở trong client tunnelblick, sau đó chọn vào Only Me để cài đặt.
![Hướng dẫn cài đặt OpenVPN server trên Linux 4 Cấu hình MacOS / OS X openvpn client](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/openvpn-macos.webp)
Sau khi cài đặt xong, nhấn vào nút Connect để kết nối. Bạn có thể dùng lệnh sau để xác thực xem địa chỉ IP public đã được đổi sang IP của server VPN hay chưa:
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
Ping địa chỉ IP private của server:
ping 10.8.0.1
Cấu hình Linux OpenVPN client
Trước tiên, cài đặt client openvpn:
sudo yum install openvpn
Hoặc:
sudo apt install openvpn
Sau đó copy iphone.ovpn bằng lệnh cp
:
sudo cp iphone.ovpn /etc/openvpn/client.conf
Kiểm tra khả năng kết nối:
sudo openvpn --client --config /etc/openvpn/client.conf
Bây giờ Linux sẽ tự động kết nối khi restart máy bằng script:
/etc/init.d/openvpn
sudo /etc/init.d/openvpn start
Đối với các hệ thống dựa trên systemd
thì hãy dùng lệnh dưới đây:
sudo systemctl start openvpn@client
Kiểm tra kết nối:
ping 10.8.0.1 #Ping đến server OpenVPN server
ip route # Kiểm tra xem có phải 10.8.0.1 hay không
# Kiểm tra xem public IP đã được đặt thành địa chỉ server OpenVPN chưa
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
Cấu hình client FreeBSD OpenVPN
Trước tiên, cài đặt client openvpn bằng lệnh pkg
:
sudo pkg install openvpn
Sau đó copy iphone.ovpn:
mkdir -p /usr/local/etc/openvpn/ sudo cp iphone.ovpn /usr/local/etc/openvpn/client.conf
Chỉnh /etc/rc.conf rồi thêm dòng sau:
openvpn_enable="YES" openvpn_configfile="/usr/local/etc/openvpn/client.conf"
Sau đó khởi động OpenVPN:
sudo /usr/local/etc/rc.d/openvpn start
Tiến hành xác thực lại:
# Ping đến server OpenVPN ping 10.8.0.1
# Kiểm tra cài đặt routing netstat -nr
# Kiểm tra public IP dig +short myip.opendns.com @resolver1.opendns.com
Cách thêm client mới
Bây giờ giả sử ta cần thêm một thiết bị mới có tên googlephone. Ta có thể thêm thiết bị bằng lệnh sau:
sudo bash openvpn-install.sh
Output:
Looks like OpenVPN is already installed
What do you want to do?
1) Add a cert for a new user
2) Revoke existing user cert
3) Remove OpenVPN
4) Exit
Select an option [1-4]:
Chọn vào option số 1 rồi nhập tên client là googlephone:
Tell me a name for the client cert
Please, use one word only, no special characters
Client name: googlephone
Generating a 2048 bit RSA private key
.........+++
.................................................................................................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/googlephone.key.FNaDMaP56c'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'googlephone'
Certificate is to be certified until Sep 25 07:31:46 2027 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Client googlephone added, certs available at ~/googlephone.ovpn
Bây giờ ta có thể dùng googlephone.ovpn với thiết bị Google Android. Cũng bằng cách này, ta hoàn toàn có thể thêm bao nhiêu user nữa tùy thích.
Cách xóa/thu hồi certificate của user
Trước tiên, chạy lệnh dưới đây:
sudo bash openvpn-install.sh
Output:
Looks like OpenVPN is already installed
What do you want to do?
1) Add a cert for a new user
2) Revoke existing user cert
3) Remove OpenVPN
4) Exit
Select an option [1-4]:
Chọn vào option 2, bây giờ ta sẽ xem được danh sách các certificate (chứng chỉ) hiện có để thu hồi. Giả sử ta thu hồi lại certificate của googlephone thì kết quả sẽ như dưới đây:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
Revoking Certificate 09.
Data Base Updated
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/pki/crl.pem
Certificate for client googlephone revoked
Lời kết
Trong bài viết này, ta đã biết được cách cài đặt OpenVPN server trên Linux chỉ với vài câu lệnh đơn giản. Vietnix khuyến khích mọi bạn đọc nên cài đặt OpenVPN để cải thiện bảo mật khi kết nối đến các hệ thống khác. Nếu gặp bất kỳ vấn đề nào trong quá trình cài đặt thì hãy để lại comment ở ngay bên dưới để được hỗ trợ nhé!