Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 5: Thiết lập Packet forwarding, cấu hình Firewall và khởi động VPN Server

Kết thúc Phần 4, bạn đã hoàn thành phần lớn các nội dung công việc cấu hình trên VPN Server. Trong kỳ này, tôi sẽ trình bày nốt các nội dung cấu hình còn lại bao gồm thiết lập Packet forwarding, Firewall và sau đó khởi động cho con VPN Server bắt đầu chạy.

#1 Thiết lập packet forwarding

Để thực hiện thiết lập này, bạn sẽ cần thay đổi nội dung trong file “sysctl.conf”. Do vậy, đầu tiên, sau khi ssh vào bên trong con VM Instance, bạn cần mở file “sysctl.conflên với dòng lệnh:

sudo nano /etc/sysctl.conf

Dùng phím mũi tên, bạn tìm dòng liên quan đến “IP forwarding” và bỏ dấu “# ở đầu dòng để kích hoạt dòng này:

net.ipv4.ip_forward=1

Thiết lập Packet forwarding
Thiết lập Packet forwarding

Sau đó bạn lưu thay đổi và thoát ra với với tổ hợp phím “Crtl + X”, “Y” và “Enter” rồi load lại file cấu hình này với dòng lệnh:

sudo sysctl -p

Góc trợ giúp:

– “sysctl.conf” tại thư mục “/etc” cung cấp nhiều tùy chọn thông số cấu hình cho Linux Kernel nhưng với mục tiêu tạo VPN Server, bạn sẽ chỉ cần tập trung vào nội dung nói trên là chuẩn cmnr

– Tùy chọn -p hay --load được sử dụng để sysctl đọc thiết lập từ file chỉ định (không chỉ định thì nó sẽ triển với file “sysctl.conf”)

#2 Cấu hình Firewall

#2.1 Kiểm tra Network Interface

Kế tiếp, bạn cần làm cập nhật thiết lập Firewall để để VPN hoạt động. Trước khi tiến hành thiết lập bạn cần xác định xem Network Interface mặc định nào đang hoạt động với dòng lệnh:

ip route | grep default

Góc trợ giúp:

– “ip route” sẽ hiển thị cho bạn danh sách các interface đang sử dụng cho việc định tuyến

– “grep” có chức năng tìm kiếm theo từ khóa chỉ định (trong dòng lệnh trên bạn tìm từ khóa “default” – ý là bạn muốn tìm cái Network Interface mặc định. Lưu ý: thằng “|” (pipe) tôi nói ở Phần 4 rồi, bạn không nhớ thì quay lại nhé.

Kiểm tra Default Network Interface
Kiểm tra Default Network Interface

Với trường hợp của tôi thì thì Network Interface mặc định sẽ là “ens4” (bạn lưu ý kiểm lại thông tin của tương ứng và cập nhật cho phù hợp nếu cần)

#2.2 Cấu hình Firewall

Sau đó, bạn tiến hành mở file để cập nhật cấu hình Firewall với dòng lệnh

sudo nano /etc/ufw/before.rules

Trong file này, bạn tìm đến vị trí bên trên dòng “Don’t delete these required lines…” và bổ sung đoạn sau:

# OPENVPN
# NAT Table
*nat
:POSTROUTING ACCEPT [0:0]
# OpenVPN client traffic
-A POSTROUTING -s 10.8.0.0/8 -o ens4 -j MASQUERADE
COMMIT
# OPENVPN

Lưu ý: Đoạn này bạn nên copy và paste với “Ctrl+V” nhé vì hơi dài nên dễ gõ nhầm

Cấu hình Firewall
Cấu hình Firewall

Bạn lưu thay đổi và thoát ra để tiếp tục chuyển sang cấu hình Forward Policy bằng dòng lệnh:

sudo nano /etc/default/ufw

Bạn tìm đến nội dung “DEFAULT_FORWARD_POLICY” và đổi “DROP” thành “ACCEPT” như sau:

Cấu hình Forward Policy
Cấu hình Forward Policy

Hiển nhiên, bạn cần lưu trước khi thoát khỏi file cấu hình này.

Và cuối cùng nhưng cũng rất quan trọng đó là bổ sung dòng rule cho phép VPN hoạt động ở port 443 với TCP protocol (bạn xem lại Phần 4 nếu không biết cái này ở đâu ra nhé)

sudo ufw allow 22/tcp

sudo ufw allow 443/tcp

Lưu ý quan trọng: có thêm cái dòng “sudo ufw allow 22/tcp” là để cho phép bạn vẫn có thể ssh vào VM Instance qua port mặc định 22 sau khi bạn kích hoạt Firewall và thoát ra ngoài VM. Nếu quên cái này thì bạn có thể phải dùng đến các thủ thuật như “startup script” để tắt Firewall từ bên ngoài VM. Vì mục tiêu chính là dựng VPN Server nên tôi sẽ không nói thêm về tình huống “khóa cửa xong mới biết quên cầm chìa” này. Tuy nhiên, nếu vì dòng đời xô đẩy mà bạn lỡ lâm vào hoàn cảnh éo le đó thì có thể comment để tôi nói chi tiết thêm.

Trước khi kết thúc mục này, bạn cần bảo đảm Firewall đã hoạt động với dòng lệnh

sudo ufw enable

Kích hoạt Firewall
Kích hoạt Firewall

#3. Chạy OpenVPN Server

Để chạy con Open VPN Server, bạn dùng dòng lệnh

sudo systemctl start openvpn@server

Sau đó, bạn kiểm tra trạng thái hoạt động với:

sudo systemctl status openvpn@server

Nếu thấy kết quả như sau là ngon (xem chán rồi thì bạn bấm “q” để thoát ra)

Kiểm tra trạng thái hoạt động OpenVPN Server
Kiểm tra trạng thái hoạt động OpenVPN Server

Và cuối cùng link cái OpenVPN này vào quá trình khởi động với:

sudo systemctl enable openvpn@server

Symlink cho OpenVPN Server
Symlink cho OpenVPN Server

OK, nếu bạn đã đến được đây mà mọi chuyện vẫn êm đẹp thì xem như đã xong được cỡ 80% rồi đây. Trong kỳ tới (tôi hy vọng sẽ là kỳ cuối), tôi sẽ chuyển sang nội dung thiết lập cho Client trước khi có thể bắt đầu khai thác con hàng VPN Server.

7 thoughts on “Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 5: Thiết lập Packet forwarding, cấu hình Firewall và khởi động VPN Server”

  1. chào bạn mình làm theo hướng dẫn mà tới phần start openvpn@server thì trong status báo lỗi như sau:
    openvpn@server.service – OpenVPN connection to server
    Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Tue 2021-02-23 07:55:59 UTC; 41s ago
    Docs: man:openvpn(8)
    https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
    https://community.openvpn.net/openvpn/wiki/HOWTO
    Process: 3920 ExecStart=/usr/sbin/openvpn –daemon ovpn-%i –status /run/openvpn/%i.status 10 –cd /etc/openvpn –script-security 2 –config /etc/openvpn/%i.conf –writepi
    Feb 23 07:55:59 tuanlinh systemd[1]: Starting OpenVPN connection to server…
    Feb 23 07:55:59 tuanlinh ovpn-server[3920]: Options error: –tls-auth fails with ‘ta.key’: No such file or directory
    Feb 23 07:55:59 tuanlinh ovpn-server[3920]: Options error: Please correct these errors.
    Feb 23 07:55:59 tuanlinh ovpn-server[3920]: Use –help for more information.
    Feb 23 07:55:59 tuanlinh systemd[1]: openvpn@server.service: Control process exited, code=exited status=1
    Feb 23 07:55:59 tuanlinh systemd[1]: Failed to start OpenVPN connection to server.
    Feb 23 07:55:59 tuanlinh systemd[1]: openvpn@server.service: Unit entered failed state.
    Feb 23 07:55:59 tuanlinh systemd[1]: openvpn@server.service: Failed with result ‘exit-code’.
    lines 1-16/16 (END)

    Bạn giúp mình với mình cám ơn. Bài viết rất bổ ích ạ!

    1. Xin lỗi bạn. Tôi bỏ sót không thấy comment của bạn. Không biết hiện giờ bạn đã đã xử lý được lỗi chưa? Nếu chưa thì nhờ bạn phản hồi để tôi xem có thể giúp được gì hay không.

  2. Cám ơn những chia sẻ rất thực tế của anh. Đang mong chờ bài kế tiếp !
    Cám ơn !

  3. @tuanthu:~/openvpn-ca/keys$ sudo systemctl status openvpn@tuanthu
    openvpn@tuanthu.service – OpenVPN connection to tuanthu
    Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
    Active: activating (auto-restart) (Result: exit-code) since Sun 2021-12-05 14:12:28 UTC; 2s ago
    Docs: man:openvpn(8)
    https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
    https://community.openvpn.net/openvpn/wiki/HOWTO
    Process: 9260 ExecStart=/usr/sbin/openvpn –daemon ovpn-tuanthu –status /run/openvpn/tuanthu.status 10 –cd /etc/
    Main PID: 9260 (code=exited, status=1/FAILURE)
    Dec 05 14:12:28 tuanthu systemd[1]: openvpn@tuanthu.service: Main process exited, code=exited, status=1/FAILURE
    Dec 05 14:12:28 tuanthu systemd[1]: openvpn@tuanthu.service: Failed with result ‘exit-code’.
    Dec 05 14:12:28 tuanthu systemd[1]: Failed to start OpenVPN connection to tuanthu.

    Khởi động Open VPN server và lỗi như này. Bác cho xin hướng giải quyết giúm với.
    Cảm ơn bác

    1. Xin lỗi bạn vì bận việc quá nên tôi không kiểm tra comment thường xuyên. Không biết bạn đã khắc phục được chưa hay vẫn còn bị lỗi trên

  4. trong lúc mình làm thì gặp lỗi này:

    Job for openvpn@server.service failed because the control process exited with error code.
    See “systemctl status openvpn@server.service” and “journalctl -xe” for details.

    sau đó check “journalctl -xe” thì ra lỗi này:
    Options error: –explicit-exit-notify can only be used with –proto udp

    Ai gặp thì quay trở lại file /etc/openvpn/server.conf comment cái dòng này đi là đc:
    ;explicit-exit-notify 1

Leave a Reply

Your email address will not be published. Required fields are marked *