21/07/2023
Chia sẻ
9565 lượt xem

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.

VNC là gì? Vì sao nó không giống các công cụ remote desktop khác

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 hoạt động ở tầng pixel, không phải tầng ứng dụng

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 Server: cài trên máy bạn muốn điều khiển từ xa, chụp và gửi hình ảnh màn hình đi.
  • VNC Viewer (còn gọi VNC Client): chạy trên máy của bạn, nhận hình ảnh và gửi ngược lại thao tác chuột, bàn phím.
  • RFB (Remote Frame Buffer, tạm dịch: vùng đệm khung hình từ xa): giao thức quy định hai bên trao đổi dữ liệu theo định dạng nào. RFB đã chuẩn hóa thành RFC 6143, thiết kế theo hướng client càng nhẹ càng tốt. Đây là lý do VNC Viewer chạy được trên gần như mọi thiết bị, kể cả điện thoại.

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.

Sơ đồ luồng dữ liệu hai chiều qua giao thức RFB giữa VNC Server (chụp framebuffer, gửi cập nhật pixel) và VNC Viewer (giải mã, hiển thị, gửi thao tác chuột bàn phím ngược lại)

VNC hoạt động như thế nào: từ framebuffer tới màn hình của bạn

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.

Mockup cửa sổ ứng dụng VNC Viewer đang kết nối tới localhost:1 qua port 5901, trạng thái hiển thị đang kết nối, bên trong là khung màn hình desktop thu nhỏ

Ưu điểm và nhược điểm của VNC: một đánh đổi, không phải hai danh sách

Ư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.

VNC dùng để làm gì trong thực tế

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:

  • Quản trị máy chủ Linux qua giao diện đồ họa: cấu hình phần mềm có GUI hoặc thao tác trên trình duyệt chạy trong máy chủ, những việc làm bằng dòng lệnh rất bất tiện.
  • Hỗ trợ kỹ thuật từ xa: nhân viên IT nhìn đúng màn hình người dùng đang gặp lỗi, thay vì hỏi qua điện thoại và đoán tình huống.
  • Truy cập máy làm việc từ nhà: dữ liệu vẫn nằm trên máy ở văn phòng, máy cá nhân chỉ đóng vai màn hình hiển thị.
  • Điều khiển thiết bị nhúng và máy không có màn hình, ví dụ Raspberry Pi hoặc máy trạm trong dây chuyền sản xuất.

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. SSHRemote 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.

Mockup giao diện trang quản trị VPS trong trình duyệt với nút Console nổi bật để mở VNC Console trực tiếp, không cần cài thêm phần mềm nào

Cách cài VNC Server và kết nối tới máy từ xa

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.

Cài trên máy chủ Linux (Ubuntu)

Trên Ubuntu Server, bạn thực hiện quy trình gồm năm bước:

  1. Bạn cài môi trường đồ họa, vì bản Ubuntu Server mặc định không có sẵn.
  2. Bạn cài gói VNC Server, phổ biến nhất là TigerVNC (gói tigervnc-server).
  3. Bạn chạy lần đầu để đặt mật khẩu và sinh phiên làm việc. Phiên :1 tương ứng port 5901.
  4. Bạn cấu hình VNC Server chỉ lắng nghe trên localhost (địa chỉ nội bộ của chính máy chủ), không lắng nghe trên IP công cộng.
  5. Bạn mở đường hầm SSH từ máy cá nhân rồi kết nối vào chính máy chủ: chạy lệnh ssh -L 5901:localhost:5901 user@IP_máy_chủ, sau đó trỏ VNC Viewer vào localhost:1. Toàn bộ phiên làm việc lúc này đi trong kênh SSH đã mã hóa, thay vì đi trần trên mạng.

Mockup cửa sổ terminal chạy lệnh ssh -L 5901:localhost:5901 user@IP_máy_chủ, kèm biểu tượng khóa thể hiện kết nối VNC đi trong kênh SSH đã mã hóa

Cài trên máy Windows

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.

5 việc cần làm để VNC không thành cửa sau cho hacker

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:

  1. Không để VNC nghe thẳng trên IP công cộng. Mọi kết nối phải đi qua SSH tunnel hoặc VPN. Đây là điều kiện tối thiểu, không phải mẹo nâng cao.
  2. Giới hạn truy cập theo IP: dùng firewall, chỉ cho phép dải IP văn phòng hoặc IP tĩnh của người quản trị kết nối tới port VNC.
  3. Đổi port mặc định khỏi 5900/5901 để tránh các đợt quét tự động. Đây là biện pháp giảm nhiễu, không phải biện pháp bảo mật thật.
  4. Chọn bản VNC có xác thực và mã hóa hiện đại, thay vì dùng cơ chế mặc định của RFB cổ điển vốn giới hạn 8 ký tự.
  5. Tắt VNC Server khi không dùng, đừng để nó tự khởi động cùng hệ thống trên máy chủ sản xuất.

Checklist 5 việc cần làm để VNC không thành cửa sau cho hacker: không nghe trên IP công cộng, giới hạn theo IP, đổi port mặc định, chọn bản có xác thực và mã hóa hiện đại, tắt khi không dùng

VNC khác RDP, SSH và TeamViewer thế nào

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.

Chọn phần mềm VNC nào cho từng nhu cầu

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:

  • TigerVNC: chọn nếu bạn quản lý máy chủ Linux. Hiệu năng tốt, có sẵn trong kho phần mềm của hầu hết bản phân phối, là lựa chọn mặc định cho Ubuntu và CentOS.
  • RealVNC: chọn nếu bạn cần mã hóa và quản lý tập trung cho doanh nghiệp. Bản thương mại RealVNC Connect có xác thực và mã hóa mạnh hơn cơ chế VNC cổ điển, kèm bản miễn phí giới hạn cho cá nhân.
  • UltraVNC: chọn nếu bạn dùng máy Windows và cần truyền file, chat trong phiên làm việc. Miễn phí, mã nguồn mở, nhiều tính năng phụ trợ nhất trong nhóm.
  • TightVNC: chọn nếu bạn kết nối qua đường truyền chậm. Thuật toán nén tối ưu cho băng thông thấp, nhẹ, cài nhanh.
  • noVNC: chọn nếu bạn không muốn cài gì trên máy khách. Chạy thẳng trong trình duyệt qua HTML5, chính là công nghệ đứng sau nút “Console” trong trang quản trị VPS.

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.

Dùng VNC đúng chỗ, và đừng để nó mở toang máy chủ

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.

cloud vps tenten

FAQ

VNC Server và VNC Viewer khác nhau thế nào?

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.

VNC có miễn phí không?

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.

VNC có dùng được trên điện thoại không?

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.

Vì sao kết nối VNC bị giật, chậm và khắc phục thế nào?

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.

VNC có truyền được file và âm thanh không?

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 của nhà cung cấp khác gì VNC tự cài trên máy chủ?

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.