0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng Dẫn Cấu Hình Port Forwarding Trong UTM

Đăng vào 1 tháng trước

• 7 phút đọc

☁️ Danh Sách Kiểm Tra Trước Khi Cất Cánh

Đây là một chuyến bay kết nối. Trước khi chúng ta cất cánh, hãy xem kế hoạch chuyến bay của bạn. Giữ lại điều này để điều hướng lộ trình của bạn.

Chào mừng bạn đến với đám mây! ☁️

🌥️ Cất Cánh

Tại Sao Bạn Cần Port Forwarding

Trong bài viết này, chúng ta sẽ khám phá cách cấu hình port forwarding trong UTM, giúp bạn kết nối với ứng dụng web đang chạy trong VM của mình từ máy Mac. Port forwarding không chỉ là một tiện ích địa phương; nó là một kỹ năng cơ bản giúp bạn hiểu và gỡ lỗi một trong những thành phần quan trọng nhất của OCI: Danh sách Bảo mật và Nhóm Bảo mật Mạng (NSG).

⛅️ Độ Cao Bay

  • Cách Cấu Hình Port Forwarding Trong UTM (macOS + Linux VM)
  • Cách Port Forwarding Liên Quan Đến Mạng OCI

🌤️ Hạ Cánh & Di Chuyển

  • Kết Luận

Chúc bạn có một chuyến bay thú vị! ☁️


Trong loạt bài trước, chúng ta đã xây dựng một VM Ubuntu giống như môi trường sản xuất và kết nối nó với máy Mac của bạn thông qua một thư mục chia sẻ. Bây giờ, chúng ta phải đối mặt với rào cản cuối cùng: mạng.

Bạn đã viết một ứng dụng web và đang chạy nó trong VM. Làm thế nào để bạn kiểm tra API của nó từ máy Mac? Làm thế nào để bạn gỡ lỗi frontend trong trình duyệt? Theo mặc định, VM giống như một chiếc hộp đen.

Đây chính là lúc port forwarding phát huy tác dụng. Nó cho phép bạn truy cập các dịch vụ mà VM mở ra, và trong bài viết này, tôi sẽ hướng dẫn bạn cách cấu hình port forwarding trong UTM để hoàn thành phòng thí nghiệm OCI địa phương của bạn.

Tại Sao Bạn Cần Port Forwarding

Chế độ Mạng Chia sẻ mặc định của UTM hoạt động giống như một bộ định tuyến tại nhà cho VM của bạn. Nó sử dụng NAT (Network Address Translation) để cung cấp quyền truy cập internet cho VM trong khi ẩn nó sau một tường lửa ảo. Điều này rất tốt cho việc cách ly, nhưng có nghĩa là máy Mac của bạn không thể nhìn thấy trực tiếp các dịch vụ (hoặc "cổng") mà VM mở ra.

Port forwarding giống như việc tạo một quy tắc đặc biệt trên bộ định tuyến ảo đó. Nó nói với UTM, "Bất kỳ lưu lượng nào đến cổng cụ thể này trên máy Mac của tôi nên được chuyển tiếp trực tiếp đến cổng cụ thể đó bên trong VM của tôi."

Bạn cần nó để:

  • Truy cập một máy chủ web trong VM từ trình duyệt của máy Mac.
  • SSH vào VM từ terminal của máy Mac.
  • Kết nối với cơ sở dữ liệu hoặc API chạy trong VM.
  • Phát triển với các framework như React, Flask hoặc FastAPI bên trong VM và xem kết quả trên máy Mac.

Cách Cấu Hình Port Forwarding Trong UTM (macOS + Linux VM)

Trong các bước sau, tôi sẽ hướng dẫn bạn cách chính xác để thiết lập port forwarding trong UTM, thử nghiệm với một máy chủ web Python đơn giản, và khắc phục các vấn đề phổ biến.

Bước 1: Cấu Hình Port Forwarding Trong UTM

Đảm bảo rằng VM được tắt trước khi thực hiện thay đổi mạng. Các thay đổi port forwarding không thể được thực hiện khi VM đang chạy.

Bước 2: Mở UTM và Chọn VM Của Bạn

  1. Khởi động UTM.
  2. Trong cửa sổ chính của UTM, chọn VM Ubuntu của bạn từ danh sách bên trái.
  3. Nhấp chuột phải và chọn tùy chọn chỉnh sửa để mở cấu hình VM.

Bước 3: Cấu Hình Mạng

1. Trong tab “Mạng”:

2. Đặt Chế Độ Mạng thành Emulated VLAN (Mạng Chia Sẻ) (đôi khi được gán nhãn là “NAT”). Khi bạn làm điều này, một tùy chọn Port Forward sẽ xuất hiện bên dưới Mạng.

3. Thêm Quy Tắc Port Forwarding:

Nhấp vào New và sau đó thiết lập:

Trường Ví dụ
Giao thức TCP
Địa chỉ Host (để truy cập localhost) hoặc để trống cho tất cả các giao diện. 127.0.0.1
Cổng Host (Cổng trên máy Mac của bạn) 8080 (hoặc bất kỳ cổng mở nào)
Địa chỉ Khách (IP của VM) sử dụng 10.0.2.15 hoặc chỉ để trống để tự động chọn
Cổng Khách (Cổng trên VM) 80 (hoặc cổng của ứng dụng của bạn)

Ví dụ: Chuyển tiếp localhost:8080 trên Mac → port 80 trên VM (nơi máy chủ web sẽ chạy).

Sử dụng các nhãn ở trên cùng (tức là Giao thức, Địa chỉ Khách, Cổng Khách) để hướng dẫn bạn cho các mục nhập của bạn.

Sau đó lưu lại.

Bước 4: Chạy Một Máy Chủ Web Bên Trong VM

Khởi động vào VM Linux của bạn và chạy:

Cài đặt Python (nếu cần):

Copy
sudo apt update
sudo apt install python3 -y

Bắt đầu một máy chủ HTTP thử nghiệm:

Copy
sudo python3 -m http.server 80

Lưu ý: Cổng 80 yêu cầu quyền sudo. Bạn cũng có thể sử dụng python3 -m http.server 8080 và điều chỉnh lại port forwarding cho phù hợp.

Bước 5: Thử Nghiệm Từ macOS

Từ Terminal trên máy Mac của bạn, chạy:

Copy
curl http://localhost:8080

Bạn sẽ thấy một danh sách thư mục HTML từ VM — thành công! Máy Mac của bạn đã kết nối với máy chủ web nội bộ của VM thông qua localhost:8080, được định tuyến qua NAT của UTM — chính xác như mong muốn.

Nếu bạn chạy curl http://localhost:8080 từ máy Mac mà không khởi động máy chủ thử nghiệm, bạn sẽ nhận được curl: (56) Recv failure: Connection reset by peer.

Tại Sao Bạn Thấy Một Danh Sách Thư Mục

Đó là hành vi mặc định của:

Copy
python3 -m http.server 80

Nó phục vụ nội dung của thư mục hiện tại qua HTTP. Vì có thể bạn đang ở / (thư mục gốc) và không có tệp nào ở đó (hoặc quyền hạn chế danh sách), <ul> là rỗng.

Tóm Tắt Khắc Phục Sự Cố

Vấn Đề Cách Khắc Phục
curl: (7) Không thể kết nối Đảm bảo máy chủ VM đang chạy và port forwarding đã được lưu
PermissionError: [Errno 13] Sử dụng sudo cho các cổng dưới 1024
Không có gì hiển thị trong trình duyệt. Thử chuyển tiếp sang cổng khách 8080 thay vì 80

Bonus: Chuyển Tiếp Các Dịch Vụ Khác

Dịch Vụ Cổng Khách Cổng Host Ghi Chú
SSH 22 2222 ssh user@localhost -p 2222
Ứng dụng Flask 5000 5000 Chạy với host='0.0.0.0'
JupyterLab 8888 8888 Chạy với Jupyter Lab --ip=0.0.0.0.
FastAPI 8000 8000 Chạy với uvicorn app:app --host 0.0.0.0 --port 8000
React (Vite) 5173 5173 Chạy với npm run dev hoặc vite --host (hoặc đặt "host": true trong cấu hình)
React (CRA) 3000 3000 npm start — ghi đè với .env: HOST=0.0.0.0 nếu cần

Với port forwarding được cấu hình, VM của bạn không còn là một hộp cách ly nữa. Nó trở thành một phần mở rộng mạnh mẽ và an toàn của môi trường phát triển địa phương của bạn.

Cách Port Forwarding Liên Quan Đến Mạng OCI

Trong OCI, không có gì có thể truy cập từ bên ngoài trừ khi bạn mở một cổng trong Danh sách Bảo mật hoặc NSG. Nhận lỗi "connection timed out" vì một quy tắc tường lửa thiếu là một trong những vấn đề phổ biến nhất mà các nhà phát triển gặp phải.

Port forwarding trong UTM là tương đương với một quy tắc ingress của OCI.

  • Vấn Đề: Dịch vụ của bạn đang chạy, nhưng bạn không thể kết nối.

  • Giải Pháp OCI: Bạn thêm một quy tắc ingress vào Danh sách Bảo mật của VCN cho cổng đích (ví dụ: cho phép lưu lượng TCP trên cổng 443 từ nguồn 0.0.0.0/0).

  • Giải Pháp VM Địa Phương: Bạn thêm một quy tắc port forwarding trong UTM (ví dụ: chuyển tiếp cổng host 8443 đến cổng khách 443).

Bằng cách thực hành điều này tại địa phương, bạn xây dựng trí nhớ cơ bắp cho mạng đám mây. Bạn học cách suy nghĩ về các cổng mà ứng dụng của bạn cần và cách để mở chúng, làm nhanh chóng quá trình gỡ lỗi của bạn khi triển khai vào một môi trường OCI thực tế. Nó biến một quy tắc mạng trừu tượng thành một khái niệm cụ thể, thực tiễn.

Kết Luận

Với port forwarding được cấu hình, phòng thí nghiệm địa phương của bạn đã hoàn thành. Bạn đã xây dựng thành công một môi trường cách ly, giống như sản xuất mà bạn có thể lập trình và kết nối, tất cả từ sự thoải mái của máy Mac của bạn.

Hành trình ba phần này của việc thiết lập VM, tạo một thư mục chia sẻ, và cấu hình port forwarding không chỉ là về công cụ. Nó còn về việc áp dụng quy trình làm việc của một kỹ sư đám mây chuyên nghiệp. Nỗ lực ban đầu để xây dựng môi trường này sẽ được đền đáp gấp mười lần trong thời gian tiết kiệm, ít lỗi trong sản xuất và hiểu biết sâu sắc hơn về cách cơ sở hạ tầng đám mây thực sự hoạt động. Bạn đã loại bỏ "nó chạy trên máy của tôi" khỏi từ vựng của bạn mãi mãi.


Ảnh Bìa bởi BoliviaInteligente trên Unsplash

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào