Truy cập kết nối Postgres bị từ chối trên địa chỉ IPv6


9

Đã cài đặt PostgreSQL 9.1 x64 trên Windows, thiết lập địa chỉ nghe, nhưng khi kết nối với pgAdmin tôi gặp lỗi sau. Không chắc chắn tại sao PostgreSQL nhìn thấy địa chỉ IPv6 của tôi chứ không phải địa chỉ IP thông thường của tôi:

nhập mô tả hình ảnh ở đây

Để làm việc xác thực, dựa trên thông báo lỗi, tôi đã cập nhật pg_hba.confvới điều này:

host all all fe80::c5d2:XXXX:XXXX:3bc0/12 trust

Điều đó đã làm việc, nhưng nó xấu, và quá cụ thể. Tôi đã thử các cách sau dựa trên tài liệu PostgreSQL, nhưng không có cách nào hoạt động, tôi nhận được lỗi 'truy cập bị từ chối' tương tự:

local all all trust
host all all 0.0.0.0/12 trust

Tôi đã làm việc này, nó bao gồm toàn bộ không gian địa chỉ IPv6, nhưng làm cách nào tôi có thể chỉ định một phạm vi IPv6 để hạn chế hơn?

host  mydb  myuser  ::/0   trust

Câu hỏi

  • Tại sao pgAdmin nhận địa chỉ IPv6 của tôi chứ không phải IP thông thường của tôi?
  • Làm cách nào để chỉ định một phạm vi trong IPv6 mà không cần dùng đến ::/0?

Câu trả lời:


17

Các địa chỉ IPv6 bắt đầu bằng fe80:là địa chỉ liên kết cục bộ. Chúng không thể được định tuyến trên các mạng con khác nhau hoặc internet. Chúng chỉ dành cho giao tiếp giữa các máy được kết nối với cùng một mạng LAN. Phạm vi liên kết cục bộ được định nghĩa là fe80::/10. Nếu bạn tin tưởng tất cả mọi người trên mạng LAN cục bộ của bạn thì bạn có thể làm

host  all  all  fe80::/10  trust

Nếu bạn không tin tưởng tất cả mọi người trên mạng LAN cục bộ thì có lẽ bạn muốn sử dụng tên người dùng + bảo vệ mật khẩu:

host  all  all  fe80::/10  md5

Khi chỉ định md5bạn vẫn đang sử dụng tên người dùng + bảo vệ mật khẩu, nhưng mật khẩu không được truyền ở định dạng có thể đọc được nữa. Vì bạn không tin tưởng mọi người trên mạng LAN cục bộ của mình, có lẽ bạn cũng không nên gửi mật khẩu có thể rình mò qua mạng.


fe80làm tiền tố làm việc, thx. Tầm quan trọng của là gì /12, /24vv, trên địa chỉ IPv4?
Raffian

Đó là số bit được 'cố định' trong địa chỉ. Vì vậy, 10.0.0.0/16có nghĩa là 16 bit đầu tiên được cố định và 16 bit cuối cùng có thể là bất cứ thứ gì. Vì vậy, 10.0.0.0để 10.0.255.255. 10.0.0.0/24sẽ 10.0.0.0đến 10.0.0.255. Và 10.0.0.0/18sẽ 10.0.0.0đến 10.0.63.255, 10.0.64.0/18sẽ 10.0.64.0đến 10.0.127.255vv
Sander Steffann

Và các địa chỉ IPv6 cũng vậy. fe80::/10phương tiện fe80:0000:0000:0000:0000:0000:0000:0000để febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff. Google trên "ký hiệu CIDR" để biết thêm thông tin.
Sander Steffann

PS: Tôi không biết 0.0.0.0/12phải làm gì. Nó sẽ là phạm vi 0.0.0.0đến 0.15.255.255, tất cả trong số đó là không gian địa chỉ dành riêng theo iana.org/assignments/ipv4-address-space . Những địa chỉ đó sẽ không bao giờ xuất hiện trong bất kỳ kết nối thực sự.
Sander Steffann

2

Tôi không chắc tại sao pgAdmin có hành vi như vậy. Đề nghị của tôi sẽ là hỏi về danh sách hỗ trợ của họ và nhận thông tin về thiết kế của công cụ đó và liệu đây là lỗi hay tính năng. Nó cũng có thể phải làm với độ phân giải tên Windows. Như một giải pháp thay thế, bạn sẽ có thể chỉ định kết nối qua địa chỉ ipv4 hoặc tới 127.0.0.1.

Đối với câu hỏi pg_hba.conf, ipv4 và ipv6 có các khoảng trống khác nhau trong tệp để không làm tôi ngạc nhiên rằng bạn sẽ phải thêm điều này.

Một tùy chọn bạn có, bây giờ bạn có thể kết nối, là đặt mật khẩu ( ALTER USER "username" WITH PASSWORD 'password'). Sau đó, bạn có thể đặt toàn bộ không gian ipv6 của mình thành md5 trong pg_hba.conf và không phải lo lắng quá nhiều. Ngoài ra nếu bạn ở trên miền windows, bạn có thể sử dụng xác thực LDAP, SSPI hoặc Kerberos 5 và do đó chỉ cho phép truy cập vào các thành viên miền. Đây là một chủ đề nâng cao mặc dù.


2

IPv6 được sử dụng vì bạn đang kết nối với localhost. localhostgiải quyết cho cả hai 127.0.0.1::1.

Vì các hệ điều hành thích IPv6 hơn IPv4, đó là lý do tại sao IPv6 được sử dụng (mặc dù trên Linux, điều này có thể được cấu hình thông qua /etc/gai.conf). Địa chỉ ::1không bao giờ được sử dụng làm địa chỉ nguồn và bạn không có địa chỉ toàn cầu ( 2000::/3), để lại địa chỉ liên kết cục bộ ( fe80::/10) làm địa chỉ nguồn.

Tất cả hành vi hoàn toàn hợp lý, bình thường, mong đợi khi bạn nghĩ về nó.


1
Nếu nó hợp lý với tôi, tôi sẽ không đặt câu hỏi ngay từ đầu, lol, nhưng thx để giải thích.
Raffian
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.