Cách sử dụng DNS / Tên máy chủ hoặc Các cách khác để phân giải thành một IP cụ thể: Cổng


51

Đây là Câu hỏi Canonical về độ phân giải DNS / Tên máy chủ đối với IP / Cổng

ví dụ 1

Tôi đang chạy một máy chủ web trên cổng 80 và một máy chủ khác trên cổng 87. Tôi muốn sử dụng DNS để www.example.com chuyển đến cổng 87. Làm cách nào tôi có thể thực hiện việc này chỉ bằng DNS?

Ví dụ 2

Tôi đang chạy một dịch vụ trên máy chủ của mình trên một cổng không chuẩn. Làm cách nào tôi có thể khiến khách hàng tự động kết nối với cổng không chuẩn này? Tôi có thể sử dụng DNS không? Có một số hỗ trợ cụ thể cho ứng dụng trong đó DNS có thể chỉ ra IP và Cổng không?

Ví dụ 3

Do một số giao thức ứng dụng đặc biệt hỗ trợ nhận thức tên máy chủ và cho phép các hành động đặc biệt được thực hiện dựa trên thông tin này? Có câu hỏi nào khác về Server Fault bao gồm một số trong số này không?

Commandeering:Câu hỏi này ban đầu được hỏi về việc chạy IIS và Apache trên cùng một máy chủ, nhưng các khái niệm tương tự có thể được áp dụng cho bất kỳ phần mềm máy chủ nào nhận kết nối từ máy khách. Câu trả lời dưới đây mô tả các vấn đề kỹ thuật và giải pháp sử dụng DNS và hỗ trợ giao thức ứng dụng để gán số cổng cho máy khách kết nối.


Về ví dụ ba, độc giả cũng có thể muốn kiểm tra câu hỏi kinh điển của chúng tôi về việc làm cho các giao thức tùy ý nhận biết tên máy chủ .
MadHatter

Câu trả lời:


34

Bạn không thể sử dụng DNS để trỏ đến một cổng (trừ khi máy khách hỗ trợ các bản ghi SRV, hầu hết không).

Trang web và giao thức với tiêu đề máy chủ

Bạn sẽ phải đặt một số phương pháp front-end để làm điều này. Thông thường, bạn sẽ sử dụng máy chủ web mặt trước hoặc phần mềm proxy chuyên dụng để chuyển tiếp kết nối từ cổng 80 sang cổng! 80 dựa trên tên của máy chủ được yêu cầu trong tiêu đề. Một số tường lửa cũng có thể chuyển tiếp dựa trên tiêu đề máy chủ.

Hồ sơ SRV

Một số khách hàng hỗ trợ tra cứu bản ghi SRV cho biết tên máy chủ và số cổng của máy chủ cho dịch vụ được chỉ định (nghĩa là người dùng chỉ định "example.com", khách hàng tìm kiếm bản ghi SRV và nhận "server101.example.com" trên cổng "255 "; sau đó kết nối với điều đó). Một số khách hàng cũng thực hiện điều này khi không bắt buộc (điện thoại thông minh cuối cùng của tôi sẽ tra cứu các bản ghi SRV khi thiết lập tài khoản e-mail mới chẳng hạn).

Thật không may, hỗ trợ cho các hồ sơ SRV là rất hiếm. Chỉ có một vài giao thức đáng chú ý bắt buộc nó hỗ trợ (Jabber / XMPP, Kerberos, LDAP, SIP) và không phải mọi khách hàng đều hỗ trợ nó ngay cả khi được ủy quyền.


15

Khi bạn nhập http://www.domain.com vào trình duyệt của mình, có thể hiểu rằng cổng HTTP nằm trên 80. Do đó, không có cách nào trực tiếp để trỏ www.domain.com đến cổng 87 nếu bạn đã có dịch vụ chạy trên cổng đó trong IIS.

Điều đó đang được nói, có một vài "cách giải quyết".

  • Chỉ cần sử dụng http://www.domain.com:87/ - điều này sẽ kết nối với cổng 87 (apache) trên máy chủ của bạn.
  • Bạn có thể thiết lập chuyển hướng, để http://www.domain.com/apache sẽ chuyển tiếp (hoặc proxy, nếu bạn muốn nhận được sự ưa thích) đến www.domain.com:87.
  • Bạn có thể thiết lập "Virtualhost" để www.domain2.com vẫn ở trên cổng 80, được chia sẻ với www.domain.com. Bạn không thể thiết lập điều này mà không sửa đổi IIS.

Sam nói đúng, DNS là bất khả tri khi nói đến cổng. Bất kỳ loại chuyển hướng cổng nào xảy ra bởi dịch vụ đang chạy trên cổng đó. Do đó, bạn sẽ cần phải làm gì đó với IIS để thực hiện điều này, nếu bạn không có lựa chọn nào khác ngoài việc để nó ở cổng 80.

Tôi cũng đã khắc phục được tình huống của bạn bằng cách sử dụng mod_proxy trên Apache, không biết có cách nào để làm điều này với IIS không.


Ok, vậy làm thế nào để thiết lập proxy trên IIS?
Tomasz Smykowski

2
Nếu là IIS7, bạn có thể sử dụng Định tuyến yêu cầu ứng dụng (ARR).
Scott Forsyth - MVP

1
Scott, bạn có một liên kết tốt cho tài liệu về ARR?
Jacques

12

Tôi sợ tên miền chỉ có thể được liên kết với một địa chỉ IP chứ không phải cổng.

Hầu hết các máy chủ web, ví dụ (Apache, IIS, v.v.) cho phép bạn có hai tên miền được lưu trữ trên cùng một địa chỉ IP bằng cách sử dụng thực tế là các yêu cầu web chứa trường tiêu đề máy chủ xác định tên miền trong chính yêu cầu.

Nếu bạn nói máy chủ web là gì bạn đang sử dụng, tôi chắc chắn mọi người có thể chỉ cho bạn tài liệu liên quan để thiết lập máy chủ của bạn như bạn muốn


Đó là điểm. Tôi đang sử dụng hai máy chủ web khác nhau.
Omar Abid

12

Về mặt kỹ thuật, bạn có thể sử dụng các bản ghi SRV trên các máy chủ DNS như được định nghĩa trong RFC 2782 để báo cho các trình duyệt biết máy chủ nào xử lý http trên cổng nào cho miền (phụ):

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

Điều này hoạt động tốt cho nhiều giao thức / dịch vụ, đặc biệt khi việc sử dụng các bản ghi SRV đã được xác định trong đặc tả giao thức.

Tuy nhiên, như " Hội trường xấu hổ " này, hầu hết các trình duyệt web / máy khách không hỗ trợ điều này (đối với HTTP). Cũng xem tại sao-do-browser-not-use-srv-records .

Thỏa thuận về cơ bản là SRV không được bao gồm trong giao thức http là điều bắt buộc để mọi trình duyệt thực hiện nó giải quyết các URL khác với các trình duyệt không có.

Vì vậy, bạn chỉ nên sử dụng điều này như một số cân bằng tải tùy chọn, trong đó không liên quan đến máy chủ nào được chọn về mặt nội dung. "Tùy chọn" vì nó sẽ không cân bằng phần lớn tải nếu chỉ có vài khách hàng thực hiện việc này.


6

DNS không có khả năng chuyển hướng đến một Cổng cụ thể, tất cả các DNS quan tâm là độ phân giải địa chỉ IP của tên và ngược lại.

Một số dịch vụ, chẳng hạn như nhà cung cấp DNS IP động, chẳng hạn như NO-IP cung cấp một dịch vụ có thể giúp bạn làm điều gì đó tương tự để có được chặn IP vòng trên các dịch vụ DNS tại nhà.


Một số nhà đăng ký (GoDaddy) cung cấp chuyển tiếp tên miền thông qua các máy chủ chưa sử dụng của họ. Bạn có thể cho nó một phát súng, nhưng đó là một chút bùn. Thay phiên, bạn có thể viết trình duyệt web của riêng mình để tìm kiếm các bản ghi SRV, và sau đó cố gắng thuyết phục thế giới sử dụng nó :)
Jason Antman

6

Để sử dụng bất kỳ dịch vụ (TBT) nào trên cổng không chuẩn và không ghi cổng vào URI, mọi người đều có thể sử dụng các bản ghi SRV, được xác định trong RFC 2782.

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

Tất cả các máy chủ http khác trong vùng vẫn sẽ được phục vụ trên cổng mặc định 80


3
+1 để chỉ ra rằng một số câu lệnh dưới đây là không chính xác, theo như thông số kỹ thuật - DNS hoàn toàn có thể chỉ ra một cổng dịch vụ thông qua các bản ghi SRV. Nhưng nó cũng giả sử khách hàng biết yêu cầu bản ghi SRV trước.
mcauth

2

Cách đơn giản nhất là sử dụng proxy ngược và đặt nó làm proxy web của bạn. Bạn có thể cấu hình một nginxhoặc apachecho nó. Về cơ bản, tôi đã có cùng một vấn đề trong quá khứ và đã tạo ra một công cụ để đạt được cấu hình như vậy một cách đơn giản. Ergo: https://github.com/cristianoliveira/ergo

Tôi đã sử dụng cái này và về cơ bản, hoạt động như một bùa mê :)


0

Một cách tiếp cận để triển khai hai máy chủ web trên cùng một máy chủ là để cả hai cùng nghe trên cổng 80 trên hai địa chỉ IPv6 khác nhau. IPv6 chính thức chỉ định rằng bạn có thể gán hai địa chỉ cho một giao diện và có đủ địa chỉ IPv6 mà bạn có thể thực hiện việc này mà không hết địa chỉ.

Đây là bằng chứng trong tương lai và hai tên miền của bạn có thể có các bản ghi AAAA trỏ đến các địa chỉ IP khác nhau, vì vậy các tên miền kết thúc tại các máy chủ web khác nhau.

Nếu bạn cũng có một địa chỉ IPv4, bạn có thể sử dụng cổng 80 trên địa chỉ IPv4 để chạy proxy ngược. Bằng cách đó, các máy khách chỉ có IPv4 có thể truy cập cả máy chủ web của bạn. Cách tiếp cận proxy ngược thậm chí hoạt động nếu một số máy chủ web nằm trên cùng một máy chủ với proxy ngược và một số máy chủ web nằm trên các máy chủ khác.

Trong một thiết lập như vậy example.orgcó thể có địa chỉ 192.0.2.12001:db8::1trong khi example.netcó địa chỉ 192.0.2.12001:db8::2.

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.