Câu hỏi Port fowarding: Thi đua IP công cộng trên Ubuntu dưới Virtual Box


Tôi cần cài đặt ứng dụng Demo được tạo trong Ubuntu trên máy ảo chạy từ Windows 10 trên Laptop, được trình bày cho khách hàng tiềm năng ở các địa điểm khác nhau trong cùng một quốc gia, nhưng ứng dụng này trong môi trường ảo sẽ được xem bên ngoài một IP chính xác. Lý do cho điều này là chúng ta có một IP công cộng (giả sử, 11.22.33.44, giả thuyết) được cung cấp bởi một ISP, và quyền truy cập phải được công khai; trên thực tế, một trong những cách để xác thực truy cập từ xa là bởi IP của ứng dụng đó. Trong thực tế, trong thiết bị ảo này sẽ chạy Khách hàng dịch vụ (thông qua trình duyệt) thông qua mạng nội bộ của khách hàng (ví dụ: 192.168.a.b), như trường hợp bên dưới (giá trị hư cấu),

> ------------------ +
>                    [---------------]                   [------------]
> Guest (Ubuntu)     [ Host (W10)    ]                   [ Web Server ]
> Static IP          [ Static IP     ]--- Internet --- >>[ Static IP  ]
> 11.22.33.44        [ 192.168.0.100 ]                   [ 11.22.33.x ]
>                    [---------------]                   [------------]
> ------------------ +

Nhưng mọi thứ tôi đã thử đã không làm việc; Tôi thậm chí không thể thực hiện PING cho bất kỳ IP công khai nào thành công. Trong VirtualBox, tôi đã thử một số kết hợp, như sau:

Settings >> Network >> NAT >> (virtuo-net) >> Port Fowarding
--TCP: HostIP = blank || HostPort = 6789 || GuestIP = blank || GuestPort = 80
--UDP: HostIP = blank || HostPort = 4567 || GuestIP = blank || GuestPort = 53

Trong Guest (Ubuntu), tôi thiết lập cấu hình sau cho Network, thông qua giao diện GUI cũng như thông qua / etc / network / interfaces (mặc dù nó đã được đề cập ở đây rằng cấu hình GUI được ưu tiên hơn cấu hình thủ công)

auto 
iface lo inet loopback

auto enp0s3
iface inet enp0s3 static
address 11.22.33.44
netmask 255.255.255.0
network 11.22.33.0
broadcast 11.22.33.254
gateway 11.22.33.1
dns-nameservers 8.8.8.8 8.8.4.4

Ai đó có thể cung cấp cho một cái nhìn sâu sắc nếu tôi đang thiếu một cái gì đó?


2
2018-06-21 20:17


gốc


LƯU Ý: Câu hỏi này ban đầu được hỏi tại diễn đàn "askubuntu", nhưng có tuyên bố rằng "superuser" diễn đàn là nơi thích hợp để đặt ra một chủ đề như thế này. - andre_teprom


Các câu trả lời:


Bạn không chắc chắn lý do tại sao bạn đang cố gắng sử dụng cổng chuyển tiếp - nó không phải là Thậm chí đóng cửa với những gì bạn đang cố gắng làm.

Thay vào đó, máy khách của bạn cần có kết nối VPN đến mạng nơi có vị trí thực tế là 11.22.33.44.

Tại sao công việc "chuyển tiếp cổng" không hoạt động

  1. Bạn đang cố thêm quy tắc "chuyển tiếp cổng" để dịch TCP và UDP. Ping không phải là; đó là ICMP.

  2. Bạn đang cố gắng thực hiện các kết nối gửi đi từ máy ảo, nhưng mục đích "chuyển tiếp cổng" là dịch các kết nối đến (ví dụ: DNAT từ địa chỉ IP máy chủ cho khách). SNAT sẽ phù hợp hơn (nếu có). Nếu bạn chọn mạng "NAT" trong VirtualBox, nó sẽ tự động thực hiện SNAT, nhưng ...

  3. Mục đích cuối cùng của cả DNAT ("cổng chuyển tiếp") và SNAT là dịch địa chỉ. Khi bạn đã cấu hình 11.22.33.44 trên giao diện mạng của VM  muốn hiển thị 11.22.33.44 bởi Internet bên ngoài, có vẻ như bản dịch là chính xác những gì bạn không muốn.

Tại sao không bất kì cái nào trong đây công việc

Giả sử bạn chỉ có cấu hình IP cơ bản: hệ điều hành khách của bạn được cấu hình với địa chỉ IP là 11.22.33.44/24 và với cổng là 11.22.33.1.

Vấn đề # 2: Ví dụ của bạn có địa chỉ IP của máy chủ trên tương tự 11.22.33.0/24 subnet như VM máy khách có. Nếu đó thực sự là trường hợp, thì máy ảo của bạn sẽ cho rằng máy chủ nằm trên cùng một "mạng LAN ảo" giống như bản thân máy ảo - nó sẽ không bao giờ thử để tiếp cận nó thông qua cổng Internet.

(Nhân tiện, địa chỉ quảng bá cho 11.22.33.0/24 là 11.22.33.255, không phải 254. Bạn có thể tránh được lỗi này bằng cách không cố gắng tự xác định địa chỉ phát sóng: hệ điều hành hoàn toàn có thể tự tính toán nó một cách hoàn hảo.)

Nhưng giả sử địa chỉ IP của máy chủ thực sự nằm trên một mạng con khác (hoặc có thể bạn đang cố gắng ping Google). Sau đó, có, máy ảo khách hàng sẽ cố gắng gửi các gói thông qua cổng vào Internet. Nhưng đây là những gì sẽ xảy ra:

  • Nếu VM được cấu hình cho mạng "NAT", thì VirtualBox sẽ SNAT tất cả các gói tin gửi đi để chúng trông giống như được gửi từ địa chỉ IP của máy chủ (192.168.0.100 trong trường hợp này). Đó không phải là những gì bạn muốn.

    Sau khi những gói dịch đã rời khỏi máy chủ và truy cập vào bộ định tuyến cục bộ của khách hàng, nó sẽ lại SNAT các gói đó để chúng trông giống như được gửi từ địa chỉ IP công cộng của khách hàng. Và đó không phải là điều bạn muốn.

  • Nếu VM được cấu hình cho mạng "Bridged", hệ điều hành khách sẽ cố gắng tìm cổng của nó trên mạng LAN của khách hàng - tất nhiên là không có 11.22.33.1 trong đó.

Nếu VM được cấu hình cho mạng "Chỉ dành cho máy chủ" và nếu giao diện LAN ảo tương ứng trên hệ điều hành máy chủ được định cấu hình là 11.22.33.1/24  nếu hệ điều hành máy chủ có chuyển hướng / chuyển tiếp IP được kích hoạt (một chút rắc rối trên Windows), thì gói thực sự có cơ hội rời khỏi máy chủ lưu trữ chưa sửa đổi. Nhưng nó sẽ không đi xa hơn nữa:

  • Rất có khả năng bộ định tuyến mạng LAN của khách hàng sẽ SNAT gói tin đó, đặt địa chỉ IP công cộng của khách hàng là nguồn thay vì của bạn.

  • Nếu bộ định tuyến không thực hiện SNAT và gửi gói chưa được sửa đổi, nó có thể sẽ bị từ chối bởi ISP. (Nhiều ISP chặn các gói có địa chỉ nguồn IP 'giả mạo', vì lý do bảo mật rõ ràng hy vọng.)

  • Nếu gói đã thoát khỏi cả SNAT của bộ định tuyến  bộ lọc chống giả mạo của ISP và đã tiếp cận thành công máy chủ đích ... các thư trả lời sẽ chuyển đến mạng của công ty bạn, vì đó là địa chỉ IP có thật không nằm. Nói cách khác, các máy chủ ngẫu nhiên trên Internet thực sự không biết rằng máy tính xách tay của bạn đang "mượn" địa chỉ IP đó.

Cách thực hiện công việc này

Tóm lại, ngay cả khi bạn có thể liên lạc với máy chủ, máy chủ không thể liên lạc với bạn - hoặc trả lời trong cùng một mạng con, hoặc họ đi qua Internet, nhưng trong mọi trường hợp, tất cả các gói có nghĩa là 11.22.33.44 sẽ đến nhà bạn 'ISP và sau đó tại mạng của công ty bạn.

Vì vậy, bạn cần một số cách để cho mạng của công ty bạn biết làm thế nào để tiếp cận với máy ảo bên trong máy tính xách tay của bạn, để máy ảo có thể nhận các gói tin có nghĩa là cho 11.22.33.44. Điều đó thường được thực hiện bằng cách thiết lập đường hầmhoặc VPN. (Điều tương tự thực sự.)

Bạn sẽ phải:

  1. thiết lập máy chủ VPN tại mạng của công ty bạn (nếu chưa có);
  2. làm cho máy khách kết nối với VPN;
  3. định cấu hình VPN máy chủ sở hữu địa chỉ IP 11.22.33.44 (một trong những cách tiếp cận có thể có, nhưng có thể là phương pháp đơn giản nhất).

1
2018-06-21 21:37



Cảm ơn bạn đã giải thích chi tiết, trên thực tế, VPN có vẻ giống như cách tiếp cận phù hợp, dù sao tôi cũng muốn giữ cho ứng dụng chạy ảo hóa dưới Ubuntu với tư cách khách, không phải ở máy chủ. Tôi đoán câu trả lời của bạn (tốt đẹp) đưa vào tài khoản kịch bản này, phải không? - andre_teprom
Nếu ứng dụng nằm trong VM, hãy chạy ứng dụng khách VPN trong máy ảo ... Hầu hết các giao thức VPN trông giống như các luồng UDP thông thường, vì vậy không quan trọng liệu hệ điều hành máy khách có được ảo hóa hay không. - grawity