VNC (Virtual Network Computing) là công nghệ xem và điều khiển màn hình máy tính khác qua mạng, hoạt động ở tầng pixel. Khác RDP hay TeamViewer, VNC là chuẩn mở, và nên dùng như đường vào dự phòng tầng hạ tầng, không phải công cụ remote desktop hàng ngày.
Contents
VNC (Virtual Network Computing) là công nghệ xem và điều khiển màn hình máy tính khác qua mạng, hoạt động ở tầng pixel. Khác RDP hay TeamViewer, VNC là chuẩn mở, và nên dùng như đường vào dự phòng tầng hạ tầng, không phải công cụ remote desktop hàng ngày.
Bài viết này giải thích cụ thể VNC là gì, cách hoạt động, cách cài đặt, tới 5 việc cần làm để VNC không thành cửa sau cho hacker.
VNC làm việc ở tầng pixel: nó truyền hình ảnh màn hình, không truyền lệnh hay dữ liệu ứng dụng. Đây là khác biệt gốc so với RDP, công cụ truyền lệnh vẽ giao diện thay vì hình ảnh đã dựng sẵn.
Ba thành phần tạo nên một phiên VNC:
VNC ra đời tại Olivetti & Oracle Research Laboratory (Cambridge, Anh) giai đoạn 1994-1998, phát hành mã nguồn mở năm 1998. Nhóm phát triển gốc lập RealVNC năm 2002. Vì mã nguồn mở từ đầu, nay có nhiều bản VNC cùng tồn tại: TigerVNC, RealVNC, UltraVNC, TightVNC, noVNC. Mỗi bản khác nhau về hiệu năng và mức bảo mật, dù cùng nói chuyện qua giao thức RFB.

VNC hoạt động theo mô hình client/server: VNC Server chụp và mã hóa vùng framebuffer, VNC Viewer giải mã và vẽ lại lên màn hình của bạn. Framebuffer là vùng nhớ chứa toàn bộ điểm ảnh đang hiển thị trên máy đích. VNC đồng bộ trực tiếp vùng nhớ này theo thời gian thực, không phải chụp ảnh màn hình rồi gửi đi từng khung hình rời rạc.
Luồng dữ liệu đi hai chiều trong cùng một kết nối: server gửi cập nhật pixel xuống viewer, viewer gửi sự kiện chuột và bàn phím lên server. Để giảm tải, VNC chỉ gửi phần màn hình có thay đổi so với khung trước, kèm nén dữ liệu. Vì thế gõ văn bản qua VNC thường mượt, còn xem video hoặc kéo cửa sổ nhanh dễ giật, do lượng pixel thay đổi mỗi khung hình quá lớn.
Về cổng kết nối, VNC dùng TCP 5900 cộng số display, không phải cố định ở 5900. Display :1 chạy ở port 5901, display :2 ở port 5902. Mở nhầm port 5900 trong khi server đang chạy ở display :1 là lỗi cấu hình phổ biến nhất khi mới triển khai VNC. Người mới hay debug sai hướng vì tưởng port bị chặn, trong khi thực ra chỉ nhầm số display.
Vì làm việc ở tầng pixel, VNC không quan tâm hệ điều hành nào đang chạy phía sau. Đây là gốc rễ của tính đa nền tảng: VNC Server chạy trên Linux vẫn kết nối được từ VNC Viewer trên Windows, macOS hay điện thoại. Cả hai bên chỉ trao đổi hình ảnh và thao tác nhập, không trao đổi lệnh hệ điều hành.

Ưu và nhược điểm của VNC không phải hai danh sách tách biệt. Phần lớn đặc tính của nó vừa là lợi thế vừa là rủi ro, tùy vào bối cảnh sử dụng.
|
Ưu điểm |
Nhược điểm đi kèm |
|
Chạy trên mọi hệ điều hành nhờ hoạt động ở tầng pixel |
Tốn băng thông và có độ trễ hơn công cụ truyền lệnh vẽ như RDP |
|
Vào được cả khi hệ thống đang lỗi hoặc mất mạng nội bộ (qua VNC Console) |
Chính vì vào được ở tầng thấp nên rủi ro rất lớn nếu bị chiếm quyền |
|
Chuẩn mở, nhiều bản miễn phí (TigerVNC, TightVNC, UltraVNC) |
Chất lượng và mức bảo mật khác nhau tùy bản, không đồng nhất |
Ngoài ba cặp đánh đổi trên, VNC có hai nhược điểm riêng, không đi kèm ưu điểm tương ứng. VNC không hợp tác vụ nặng đồ họa như dựng phim, chơi game hay thiết kế 3D, vì độ trễ và giới hạn băng thông của việc truyền pixel liên tục. VNC bản gốc cũng thiếu tính năng phụ trợ như truyền file, in từ xa hay âm thanh, những thứ RDP và TeamViewer hỗ trợ sẵn.
Bốn trường hợp phổ biến của VNC xoay quanh việc cần giao diện đồ họa ở nơi khó hoặc không thể có sẵn:
Trường hợp đáng chú ý nhất là VNC Console, đường vào cuối cùng khi VPS mất kết nối. SSH và Remote Desktop chỉ hoạt động khi hệ điều hành đã khởi động xong và mạng đã thông. Ba tình huống làm cả hai chết cùng lúc: cấu hình sai firewall tự khóa mình ra ngoài, đổi cấu hình mạng làm mất IP, hoặc máy kẹt ở màn hình boot.
VNC Console gắn thẳng vào máy ảo ở tầng hạ tầng, không đi qua mạng của hệ điều hành bên trong, nên vẫn vào được ngay cả khi hai tình huống trên xảy ra. Phần lớn nhà cung cấp cho mở thẳng trong trình duyệt, không cần cài thêm phần mềm nào. Đây chính là lý do VNC Console khác VNC tự cài: nó độc lập với hệ điều hành khách, nên không chết cùng hệ điều hành đó.
Nếu bạn từng khóa mình ra khỏi VPS vì gõ nhầm rule firewall, câu hỏi đáng hỏi không phải “làm sao SSH lại được” mà là “gói VPS đang dùng có đường vào nào không phụ thuộc SSH hay không”. Phần lớn nhà cung cấp Cloud VPS chạy trên nền KVM đều có sẵn một dạng console gắn thẳng vào máy ảo trong trang quản trị, dùng được kể cả khi VPS đã mất kết nối mạng, để bạn không phải chờ ai đó cắm màn hình vật lý vào máy chủ đặt ở data center (trung tâm dữ liệu). Trước khi cần đến nó, bạn nên kiểm tra trực tiếp trang quản trị của gói VPS đang dùng xem console này có sẵn hay không.

Cách cài VNC Server khác nhau giữa Linux và Windows, nhưng cả hai đều cần thêm một bước bảo vệ kết nối trước khi dùng thật.
Trên Ubuntu Server, bạn thực hiện quy trình gồm năm bước:

Trên Windows, bạn cài UltraVNC hoặc RealVNC Server, trình cài đặt đã bao gồm bước đặt mật khẩu. Máy Windows thường nằm trong mạng nội bộ có router, nên sau khi cài xong, VNC chỉ gọi được từ trong cùng mạng LAN.
Muốn gọi từ ngoài mạng nội bộ, bạn có hai đường. Một là dùng VPN vào mạng nội bộ trước rồi kết nối VNC như trong LAN (mạng nội bộ), cách này được khuyến nghị. Hai là mở port forwarding (chuyển tiếp cổng) trên router để đưa máy chủ VNC ra thẳng Internet, cách này nhanh hơn nhưng đánh đổi bằng việc mở một cổng kết nối trực tiếp ra ngoài. Phần tiếp theo sẽ giải thích vì sao cách hai rủi ro.
VNC có hai điểm yếu gốc nằm ngay trong thiết kế giao thức, không phải lỗi cấu hình của người dùng. RFB nguyên bản không mã hóa dữ liệu: hình ảnh màn hình và thao tác bàn phím đi qua mạng ở dạng đọc được nếu bị chặn giữa đường. Mật khẩu VNC còn bị giới hạn 8 ký tự, vì cơ chế VNC Authentication trong RFC 6143 dùng DES (một thuật toán mã hóa cũ) với khóa 8 byte. Mật khẩu dài hơn 8 ký tự bị cơ chế này cắt bỏ phần đuôi, ngắn hơn thì nó tự đệm thêm cho đủ 8 byte. Đặt mật khẩu 20 ký tự vì vậy không an toàn hơn 8 ký tự, trong khi mật khẩu 8 ký tự lại dò được bằng máy tính phổ thông.
Đây không phải rủi ro lý thuyết. Shadowserver Foundation đã bổ sung riêng một báo cáo cho máy chủ VNC không xác thực, gắn tag vnc-unauth, từ 01/05/2025. Báo cáo này cho thấy số lượng máy chủ VNC lộ thẳng ra Internet vẫn đủ lớn để cần theo dõi riêng.
Năm việc bạn cần làm để đóng lỗ hổng này:

Bốn công cụ truy cập từ xa phổ biến khác nhau ở thứ chúng thực sự truyền đi qua mạng, không chỉ khác ở giao diện.
|
Công cụ |
Thứ được truyền |
Hệ điều hành |
Mã hóa mặc định |
Hiệu năng trên mạng yếu |
|
VNC |
Hình ảnh pixel (framebuffer) |
Đa nền tảng |
Không (cần bọc SSH/VPN) |
Trung bình, giật khi nhiều pixel đổi |
|
RDP |
Lệnh vẽ giao diện |
Chủ yếu Windows |
Có sẵn |
Tốt hơn VNC |
|
SSH |
Văn bản dòng lệnh |
Đa nền tảng |
Có sẵn |
Rất tốt, nhẹ nhất |
|
TeamViewer/AnyDesk |
Hình ảnh qua máy chủ trung gian |
Đa nền tảng |
Có sẵn |
Tốt, phụ thuộc hạ tầng hãng |
RDP truyền lệnh vẽ giao diện thay vì hình ảnh đã dựng, nên nhẹ và mượt hơn VNC, nhưng gắn chặt với hệ sinh thái Windows. SSH truyền văn bản nên nhẹ nhất trong bốn công cụ, nhưng không có giao diện đồ họa. TeamViewer và AnyDesk đi qua máy chủ trung gian của hãng nên không cần cấu hình mạng ở hai đầu. Đổi lại, dữ liệu phiên làm việc đi qua hạ tầng bên thứ ba mà bạn không kiểm soát.
Biết sự khác biệt này, câu hỏi thực tế là khi nào bạn nên bỏ VNC để chọn công cụ khác. Nếu máy đích chạy Windows và cả hai đầu đều là Windows, bạn dùng RDP vì mượt hơn và có mã hóa sẵn. Nếu bạn chỉ cần chạy lệnh, sửa file cấu hình hoặc khởi động lại dịch vụ, dùng SSH vì nhanh và an toàn hơn hẳn. Nếu bạn đang hỗ trợ khách hàng không rành kỹ thuật và không thể yêu cầu họ mở port, dùng TeamViewer hoặc AnyDesk. Chỉ khi bạn cần thao tác đồ họa trên máy chủ Linux, hoặc cần vào máy lúc hệ điều hành đang lỗi, VNC mới là lựa chọn đúng.
Năm bản VNC phổ biến phục vụ năm nhu cầu khác nhau, không có bản nào tốt nhất cho mọi trường hợp:
Chọn bản VNC theo nơi máy chủ nằm và theo yêu cầu bảo mật của bạn, không chọn theo số lượng tính năng liệt kê trên trang chủ từng bản.
VNC là đường vào ở tầng thấp nhất, vào được cả khi những cách khác đã chết. Chính đặc tính đó khiến bạn cần bảo vệ nó chặt hơn chứ không lỏng hơn. Ba điểm bạn dễ nhầm nhất khi mới dùng: VNC không nghe ở port 5900 cố định mà ở 5900 cộng số display, nên phiên :1 nằm ở 5901. Mật khẩu VNC dài hơn 8 ký tự không làm bạn an toàn hơn, vì phần dư bị cắt bỏ ngay trong cơ chế xác thực. Và nếu bạn chỉ cần dòng lệnh, hãy dùng SSH: VNC chỉ đáng dùng khi bạn thật sự cần giao diện đồ họa, hoặc khi SSH đã không vào được nữa.
Kiểm tra xem gói VPS đang dùng có sẵn console dạng VNC trong trang quản trị hay không, vì đó là thứ cứu bạn trong lần cấu hình sai firewall kế tiếp. Nếu đang cân nhắc đổi nhà cung cấp, Cloud VPS của Tenten.vn là một lựa chọn để bạn tham khảo và đối chiếu trang quản trị trước khi quyết định.

VNC Server cài trên máy bạn muốn điều khiển từ xa, có nhiệm vụ gửi hình ảnh màn hình đi. VNC Viewer cài trên máy bạn dùng để điều khiển, nhận hình ảnh và gửi thao tác chuột, bàn phím ngược lại. Một máy có thể cài cả hai cùng lúc.
TigerVNC, TightVNC, UltraVNC và noVNC là mã nguồn mở và miễn phí hoàn toàn. RealVNC có bản miễn phí giới hạn số thiết bị cho cá nhân, và bản trả phí RealVNC Connect cho doanh nghiệp cần quản lý tập trung.
Có, VNC Viewer có bản cho Android và iOS. Màn hình nhỏ và không có chuột vật lý khiến trải nghiệm hạn chế, nên chỉ hợp xử lý sự cố khẩn cấp thay vì thao tác dài.
Nguyên nhân chính là lượng pixel thay đổi mỗi khung hình quá lớn so với băng thông. Khắc phục bằng cách giảm độ phân giải phiên VNC, giảm số màu hiển thị, tăng mức nén, và tắt hình nền cùng hiệu ứng của môi trường đồ họa.
RFB nguyên bản chỉ truyền hình ảnh và thao tác nhập, không có file hay âm thanh. Truyền file là tính năng do từng bản tự thêm: UltraVNC và RealVNC hỗ trợ, bản cơ bản thì không. Hầu như không bản VNC nào hỗ trợ âm thanh, đây là khác biệt lớn so với RDP.
VNC Console chạy ở tầng hạ tầng nên độc lập với hệ điều hành và mạng bên trong máy ảo, vẫn vào được khi máy ảo mất mạng. VNC tự cài chạy bên trong hệ điều hành, nên chết cùng hệ điều hành nếu hệ điều hành gặp lỗi hoặc mất kết nối mạng.