Không thể kết nối với phiên bản RDS từ bên ngoài VPC (ERROR 2003 (HY000) Không thể kết nối với Máy chủ MySQL)


12

Tôi đã tạo một VPC và bên trong nó là một ví dụ RDS. Ví dụ RDS có thể truy cập công khai và các cài đặt của nó như sau:

Cài đặt RDS

Nhóm bảo mật được đính kèm với phiên bản RDS chấp nhận tất cả lưu lượng truy cập:

Cài đặt nhóm bảo mật

Tất cả các ACL mạng của tôi chấp nhận tất cả các đề tài. Tuy nhiên, tôi không thể truy cập ví dụ của mình từ một máy bên ngoài VPC của mình. Tôi nhận được lỗi sau đây:

    root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)

Nếu tôi chạy cùng một lệnh từ EC2 bên trong VPC của mình, tôi có thể kết nối. Tôi đã thử kết nối từ một số máy, tất cả đều không có tường lửa (tức là cổng 3306 mở).

Tôi rõ ràng đang thiếu một cái gì đó nhưng mọi thứ dường như được cấu hình chính xác. Điều gì có thể là vấn đề?


1
Thông (110)báo lỗi có nghĩa là "hết thời gian kết nối", vì vậy chắc chắn đây là sự cố kết nối IP. Ví dụ RDS của bạn hiển thị được liên kết với hai mạng con. Trong bảng điều khiển VPC, tuyến đường mặc định của hai mạng con đó là gì? Là "igw-xxxxxxxx" hay là "i-xxxxxxxx"?
Michael - sqlbot

Cả hai mạng con được liên kết ngầm với bảng lộ trình chính của VPC.
dazedviper

1
Liên kết rõ ràng cả hai mạng con với bảng tuyến tùy chỉnh định tuyến tất cả lưu lượng truy cập đi đến cổng internet của VPC không có gì khác biệt.
dazedviper 19/07/2015

1
Chà, đó là một người lập dị. Tuyến mặc định tới "igw" có vẻ như là phần bị thiếu có thể xảy ra nhất ... và trong mọi trường hợp cần thiết để điều này hoạt động. Giả sử bạn đã cho VPC đủ thời gian để tự cấu hình lại nền sau khi thay đổi cấu hình mạng con cho phù hợp, tôi không có ý tưởng nào.
Michael - sqlbot

2
Ah, khối bạn cần cho tất cả các địa chỉ IP là 0.0.0.0/0. Tôi sẽ đăng câu trả lời.
Michael - sqlbot

Câu trả lời:


20

Để một phiên bản RDS trong VPC có thể truy cập "công khai" (Internet), tất cả các mạng con được đính kèm phải là "công khai" - trái ngược với "riêng tư" - các mạng con của VPC.

Một mạng con công cộng về cơ bản được định nghĩa là một mạng con có đối tượng Cổng Internet (igw-xxxxxxxx) là tuyến đường đến "Internet" hoặc ít nhất là đến bất kỳ điểm đến Internet nào bạn cần truy cập. Thông thường, đây là một địa chỉ đích của 0.0.0.0/0. Các mạng con công cộng phải được sử dụng cho các phiên bản (bao gồm RDS) sẽ có địa chỉ IP công cộng được liên kết và không được sử dụng cho các trường hợp sẽ không có địa chỉ IP công cộng, vì địa chỉ riêng không hoạt động trên Internet mà không dịch.

Ngược lại, một mạng con riêng có bảng định tuyến được cấu hình để tiếp cận các điểm đến Internet thông qua một thể hiện EC2 khác, điển hình là một thể hiện NAT. Điều này hiển thị trong bảng tuyến đường VPC được liên kết với mạng con đó là i-xxxxxxxx, thay vì "igw." Máy đó (chính nó, thực sự sẽ ở trên một mạng con khác với mạng con mà nó hoạt động như một đích tuyến) hoạt động như một dịch giả, cho phép các cá thể chỉ IP riêng tư thực hiện các yêu cầu Internet bên ngoài bằng cách sử dụng công khai máy NAT IP cho nhu cầu Internet của họ. Các trường hợp có địa chỉ IP công cộng không thể tương tác đúng với Internet nếu được gắn với mạng con riêng tư.

Trong trường hợp cụ thể, ở đây, các mạng con được liên kết với thể hiện RDS không thực sự được cấu hình như một thứ có thể được phân loại đơn giản là mạng con riêng tư hoặc mạng công cộng, bởi vì mạng con không có tuyến mặc định nào cả. Thêm một tuyến mặc định thông qua đối tượng "igw", hoặc, như OP đã làm, thêm một tuyến tĩnh vào địa chỉ IP Internet nơi cần kết nối, vào bảng tuyến VPC để các mạng con khắc phục sự cố kết nối.

Tuy nhiên ... Nếu bạn gặp phải một vấn đề tương tự, bạn không thể thay đổi bảng tuyến hoặc xây dựng bảng tuyến mới và liên kết các mạng con với chúng, trừ khi bạn không có gì khác hoạt động chính xác trên mạng con, vì sự thay đổi có thể hợp lý dự kiến ​​sẽ phá vỡ kết nối hiện có. Khóa học chính xác, trong trường hợp đó, sẽ là cung cấp các thể hiện trên các mạng con khác nhau với các mục trong bảng lộ trình chính xác.

Khi thiết lập VPC, lý tưởng là xác định rõ ràng vai trò của mạng con và cung cấp đầy đủ sau đó với các tuyến cần thiết khi VPC được đưa vào sử dụng lần đầu tiên. Điều quan trọng cần nhớ là toàn bộ VPC "LAN" là một mạng được xác định bằng phần mềm. Không giống như trong một mạng vật lý, nơi bộ định tuyến có thể trở thành nút cổ chai và thường có thể đặt các máy có lưu lượng lớn trong số chúng trên cùng một mạng con ... mạng con giao thông không có bất lợi về hiệu năng trên VPC. Máy nên được đặt trên các mạng con phù hợp với nhu cầu địa chỉ IP của máy - địa chỉ công cộng, mạng con công cộng; không có địa chỉ công cộng, mạng con riêng tư.

Thảo luận thêm về hậu cần của các mạng con riêng tư / công cộng trong VPC có thể được tìm thấy trong Tại sao chúng ta cần mạng con riêng tư trong VPC (tại Stack Overflow).


2

Điều này đã có một câu trả lời tuyệt vời, nhưng AWS sẽ tạo một mạng con công cộng cho bạn khi bạn chọn tùy chọn "truy cập công khai". Thay vào đó, đối với tôi, vấn đề là nhóm bảo mật VPC mặc định. Tôi đã xem xét các quy tắc Mạng ACL - không phải Nhóm bảo mật . (Chọn tùy chọn "truy cập công khai" trong RDS sẽ thêm nhóm bảo mật nhưng không tự động thêm quy tắc gửi đến.)

Nhấp vào RDS và xác định và nhấp vào nhóm bảo mật. Sau đó, trong "quy tắc gửi đến", hãy thêm cổng 3306 và thêm địa chỉ IPV4 đang kết nối của bạn, xxxx / 32 (hoặc 0.0.0.0 / 32 - nếu bạn muốn toàn bộ Internet kết nối - nhưng hãy cẩn thận với điều đó).


0

Đồng thời kiểm tra để đảm bảo mạng bạn kết nối không chặn kết nối với máy chủ khác trên cổng 3306. Đây là trường hợp đối với tôi khi kết nối với mạng công ty.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.