Bản ghi DNS của tôi chỉ có thể trỏ đến một địa chỉ IP. Làm thế nào để tôi làm cho nó đạt đến một cổng?


10

Tôi còn khá mới đối với quản trị mạng và do đó rất hào hứng khi thiết lập thành công bản ghi DNS.

Bây giờ tôi có một chút bối rối, vì tôi muốn có URL này:

http://www.example.org:8080/fetch/characters/

thực sự đạt được điều này

http://www.example.org/fetch/characters/

Vì vậy, người dùng có thể tiếp cận dịch vụ trên cổng 8080 mà không cần phải đặt cổng rõ ràng.

Tôi có thể làm cái này như thế nào? Tôi có cần một số ứng dụng đặc biệt trên máy chủ của mình không? Hoặc bất kỳ công cụ chuyển hướng sẽ được áp dụng cho các yêu cầu?


4
Trình duyệt theo mặc định không truy cập cổng 8080. Đó có phải là một lỗi trong việc gõ câu hỏi không?
Džuris

quan niệm sai lầm về những gì một dns là và những gì nó làm.
Pedro lobito

@ Džuris Na, đó là một sai lầm của tôi khi nghĩ 8080 là mặc định http thay vì 80
xetra11

Câu trả lời:


32

Bản ghi DNS không thể trỏ đến các cổng (với một vài trường hợp ngoại lệ đặc biệt không áp dụng ở đây).

Nếu bạn có dịch vụ web nghe trên cổng 8080 và muốn tiếp cận nó mà không chỉ định cổng này, bạn có 3 tùy chọn:

  • Làm cho nó thực sự nghe trên cổng 80 (hoặc 443 với https).
  • Định cấu hình bất cứ điều gì đã nghe trên cổng 80 để chuyển tiếp yêu cầu đến dịch vụ của bạn trên cổng 8080 (proxy ngược).
  • Nếu bạn có thể sống với chuyển hướng, hãy sử dụng điều này thay vì proxy, nhưng sau đó khách hàng của bạn sẽ thấy :8080phần trong thanh địa chỉ của họ sau khi chuyển hướng.

10
Điều gì xảy ra nếu chúng ta có thể sử dụng các bản ghi SRV và chỉ định các cổng cho dịch vụ ... Các trình duyệt quá tệ không sử dụng điều này.
Jacob Evans

4
@JacobEvans: Hồ sơ SRV cho mọi thứ là một giấc mơ cũ của tôi. Nó sẽ làm cho mọi thứ dễ dàng hơn nhiều (ngoại trừ quản trị viên tường lửa, những người bây giờ chỉ có thể chặn mọi thứ trừ 80 và 443)
Sven

Các bản ghi SRV hoạt động rất tốt đối với một số dịch vụ, như XMPP ... nhưng đáng buồn là không có nhiều (và không chắc chắn về HTTP)
Josh

Tùy chọn 4: chuyển tiếp cổng bằng tường lửa
Joel Coel 17/11/18

10

Các máy chủ web nghe cổng TCP 80 theo mặc định. Nếu bạn không muốn nhập số cổng rõ ràng trong URL, bạn có một vài tùy chọn:

  • Bạn có thể cấu hình lại máy chủ web của mình để sử dụng cổng 80 thay vì cổng 8080. Điều này được khuyến nghị cho các máy chủ web như nginx hoặc Apache nhưng không dành cho các máy chủ web như Gunicorn. Tùy chọn này cũng không phải lúc nào cũng có thể vì cổng đó có thể đã được sử dụng bởi một máy chủ web khác.

    Ngoài ra, khi máy chủ của bạn ở phía sau cổng NAT, nó không sở hữu địa chỉ IP công cộng và sự kết hợp của địa chỉ NAT công cộng đó và cổng 80 có thể đã được chuyển tiếp đến một máy chủ web khác.

  • Bạn có thể đặt máy chủ proxy ngược trước máy chủ web chấp nhận lưu lượng trên cổng TCP 80 và gửi đến máy chủ web của bạn trên cổng TCP 8080. Điều này cũng sẽ hoạt động nếu cổng 80 đã được sử dụng. Đơn giản chỉ cần đặt máy chủ proxy ngược trước cả hai máy chủ web, khiến cả hai đều nghe các cổng khác ngoài 80.

Để cung cấp trợ giúp tốt hơn và chi tiết hơn về tùy chọn nào có thể là tốt nhất và các hạn chế, v.v., chúng tôi cần biết thêm về thiết lập của bạn. Hy vọng rằng lời giải thích này đã làm rõ mọi thứ một chút.


Tôi đã có infos tôi cần! Tôi đã nhầm cổng web mặc định 80 là 8080
xetra11

7

Câu trả lời đơn giản, liên quan đến mức độ câu hỏi

Bỏ qua việc sử dụng DNS kỳ lạ và cũng đảo ngược tra cứu DNS (không liên quan đến câu hỏi), hầu như tất cả việc sử dụng DNS đều có dạng:

  1. Khách hàng gửi tên miền (đủ điều kiện hoặc cách khác) đến máy chủ DNS
  2. Máy chủ DNS trả về thông tin tên miền từ hồ sơ của nó. Thông thường thông tin chính được yêu cầu là địa chỉ IP để liên lạc với web / email trên tên miền đó hoặc địa chỉ IP của máy chủ DNS khác có thể cung cấp thông tin đó tốt hơn.

Khi máy khách đã liên lạc với máy chủ, máy chủ sẽ tự xử lý và hệ thống DNS rơi ra khỏi hình ảnh.

Điều đó có nghĩa là, hệ thống DNS không cần cung cấp thông tin cổng và hầu như không bao giờ làm như vậy. Vì vậy, mặc dù mục đích của câu hỏi là hợp lệ và thường được thực hiện, nhưng thực tế nó không phải là hệ thống DNS thực hiện nó. Đó là lý do tại sao bạn không thể giải quyết nó :)

Ý tưởng là một khi khách hàng của bạn có thể xác định vị trí của máy hoặc máy chủ cụ thể mà họ đang tìm kiếm, thì máy đó sẽ lắng nghe bất kỳ cổng nào họ chọn và chấp nhận / từ chối / trả lời bất kỳ giao thức nào trên bất kỳ cổng nào được định cấu hình.

Ví dụ: các dịch vụ web HTTP thường được cung cấp trên cổng 80. Điều đó có nghĩa là một khi khách hàng biết IP máy, có thể giả định rằng việc gửi tin nhắn đến cổng 80 sẽ dẫn đến việc tin nhắn đó được đọc / phản hồi bởi dịch vụ web của máy đó. Nhưng nó không phải theo cách đó. Nếu máy chủ được cấu hình để lắng nghe các yêu cầu đến web trên cổng 9000, mọi máy khách có thể truy cập cổng 9000 sẽ có thể truy cập dịch vụ web của nó. Nếu máy chủ đứng sau proxy / NAT / bộ định tuyến chuyển hướng cổng 10000 sang cổng 9000 và máy khách sẽ gửi yêu cầu web trên cổng 10000, máy chủ sẽ nhận được nó trên cổng 9000 và cũng phản hồi.

Chuyển hướng / ánh xạ trong máy chủ web

Bạn đã hỏi về ánh xạ chuyển hướng hoặc viết lại trong một bình luận. Đây là những chức năng mà một máy chủ web có thể làm. Về cơ bản, bạn có thể định cấu hình máy chủ web (hoặc hầu hết / nhiều máy chủ web) để quản lý cách xử lý URL mà nó nhận được trong yêu cầu. Vì vậy, nó có thể sửa đổi nội bộ URL khi nhận để làm cho các URL khác nhau được xử lý theo cùng một cách hoặc sửa lỗi chính tả (ánh xạ) hoặc thực sự có thể trả lời để nói với khách hàng hỏi lần thứ hai, sử dụng một số URL thay thế, khác nhau (chuyển hướng).

Chúng có những cách sử dụng và về nguyên tắc có thể xử lý trường hợp sử dụng của bạn, nhưng chúng không giống như giải pháp "đúng" cho bạn, vì những lý do sau:

  1. Tôi không nghĩ rằng bản đồ sẽ giúp tất cả . Lập bản đồ là gần như hoàn toàn nội bộ với máy chủ web, nó nói "điều trị này URL như thể đó là rằng URL". Ví dụ: bạn có thể sử dụng ánh xạ URL của máy chủ web để cho phép người dùng truy vấn diễn đàn bằng các URL rất cũ, cũ và hiện tại (để thuận tiện cho người dùng) bằng cách sử dụng " https://example.com/index.php?area-=forum&topic = 2 ", cũng" https://example.com/forum.php?topic=2 "và cả" https://forum.example.com?topic=2", và chỉ xử lý việc này một lần, bằng cách ánh xạ hai trong số này vào URL thứ ba bên trong, như bước đầu tiên trong việc xử lý truy vấn. Vì mục tiêu này ảnh hưởng đến đường dẫn truy vấn không phải là IP / cổng, ánh xạ không được sử dụng nhiều cho quản lý cổng và trong trường hợp của bạn, máy khách không bao giờ thực sự truy vấn 8080.
  2. Chuyển hướng sẽ làm việc, nhưng có thể không phải là những gì bạn muốn . Chuyển hướng trong máy chủ web phụ thuộc vào máy chủ web thực sự nhận được truy vấn (vì đây là các chức năng bên trong của máy chủ web). Vì vậy, máy chủ web sẽ phải lắng nghe trên cổng 80 để có được truy vấn ban đầu, inm để trả lời với chuyển hướng / bản đồ. Nó cũng sẽ phải nghe trên cổng 8080. Về mặt chức năng, nó sẽ cần một quy tắc chuyển hướng để phải nói với bất kỳ máy khách nào truy vấn cổng 80, để truy vấn lại bằng URL ": 8080", không giống như những gì bạn muốn làm Người dùng cũng sẽ thấy URL mới có ": 8080" trong đó, trong khi nó có vẻ như bạn muốn nó "trong suốt" và không được hiển thị.
  3. Ngoài ra, chuyển hướng sẽ chỉ hoạt động để chuyển hướng một cổng tiêu chuẩn (80 hoặc 443) - bạn không thể chuyển hướng cổng 2000 đến 8080, bởi vì máy khách sẽ không truy vấn trên 2000 theo mặc định, vì vậy nó sẽ không bao giờ đến máy chủ web, ngay cả khi nó đã nghe vào năm 2000. Điều này có thể không phải là vấn đề đối với bạn.

Tuy nhiên, nếu bạn muốn chuyển hướng "thông minh", trong đó chỉ có một số truy vấn nhất định được định tuyến lại thành 8080, đây có thể là cách để đi, bởi vì chuyển hướng có thể bao gồm logic để quyết định URL nào sẽ được chuyển hướng, trong khi ánh xạ cổng (bên dưới) sẽ ánh xạ mọi thứ .

Làm thế nào để làm đúng

Câu trả lời cho câu hỏi của bạn là, bạn muốn máy chủ web trả lời các yêu cầu web mà máy khách gửi đến cổng mặc định (80/443), nhưng máy chủ thực sự nhận được trên cổng 8080.

Điều đó có nghĩa là, như bạn có thể thấy, bạn cần một cái gì đó ở giữa ánh xạ các cổng giữa máy khách và máy chủ . Theo cách đó, máy khách sẽ gửi trên cổng 80 (cổng mặc định được sử dụng bởi các trình duyệt web), nhưng nó thực sự nhận được trên cổng 8080 bởi máy chủ web. Tất nhiên, bạn sẽ phải cấu hình máy chủ web để nghe trên cổng 8080, vì điều này không chuẩn, nhưng thật dễ dàng và bất kỳ máy chủ web nào cũng có thể có các cổng nghe được chỉ định.

Cách thông thường nhất để làm điều này sẽ là trong bộ định tuyến / tường lửa, thông qua ánh xạ cổng.

Nói một cách đơn giản, để thực hiện điều này, bộ định tuyến được đưa ra một quy tắc, rằng bất kỳ thứ gì nhận được có IP đích và cổng đích = 80, nên được chuyển vào mạng LAN với cổng đích thay đổi thành 8080. Cả máy chủ web và máy khách đều không biết về sự thay đổi (được xử lý 100% bởi bộ định tuyến), do đó, nó sẽ minh bạch 100% cho cả hai. Máy khách sẽ không có ": 8080" trong URL của nó và sẽ không cần chuyển hướng bất cứ thứ gì, vì nó truy vấn cổng 80 và máy chủ web có thể bỏ qua cổng 80 và chỉ nghe trên 8080, vì nó không bao giờ nhận được truy vấn trên cổng 80 .

Nếu bạn muốn một cách đơn giản, đơn giản, tương tự như "DNS cho cổng" sẽ làm gì, thì đây có lẽ là cách tương đương gần nhất với những gì bạn yêu cầu trong câu hỏi của mình.


Tôi thường nghe về chuyển hướng ánh xạ hoặc viết lại? những giải pháp này là tốt?
xetra11

Đó là những từ bổ nghĩa rằng đá ở trong các máy chủ web, trong việc xử lý lệnh của khách hàng. Vì vậy, nếu máy chủ web hỗ trợ nó, bạn có thể tự động trả lời bất kỳ yêu cầu nào trên cổng 80, với chuyển hướng HTTP đến cùng một URL trên cổng 8080 - xét cho cùng, chuyển hướng HTTP / 80 -> HTTPS / 443 cũng giống như vậy. Nhưng nó phải có thể nhận được truy vấn trước, vì vậy nó sẽ không hoạt động trên các cổng mà nó không được định cấu hình để nghe và khách hàng có thể thấy URL được sửa đổi: 8080. Làm điều đó thông qua ánh xạ cổng làm cho nó trở nên vô hình 100% với máy khách, vì họ chỉ sử dụng cổng 80 (8080 là chỉ nội bộ 100%)
Stilez

Tôi đã thêm một phần "Chuyển hướng / ánh xạ trong máy chủ web" và mở rộng phần cuối cùng, để bao quát câu hỏi của bạn chi tiết hơn. Tôi hy vọng họ giúp!
Stilez

3

Bạn không thể.

Ý tôi là, về mặt kỹ thuật điều này có thể được thực hiện. DNS nổi tiếng vì có thể gửi tên miền và nhận địa chỉ IP. Tuy nhiên, tôi đã nghiên cứu giao thức DNS một chút và thực sự DNS có khả năng hoạt động như một cơ chế truy vấn / phản hồi không chỉ là tên miền và địa chỉ IP. Một cách tiếp cận khả thi là sử dụng bản ghi tài nguyên DNS không phải là loại A hoặc AAAA điển hình, chẳng hạn như bản ghi TXT (về mặt kỹ thuật chỉ là văn bản và có thể được sử dụng cho mọi thứ) hoặc có thể là bản ghi SRV hoặc bất kỳ bản ghi nào khác loại bản ghi tài nguyên mới hơn bạn chọn.

Nếu bạn đang tạo phần mềm của riêng bạn (cả máy khách và máy chủ), có thể không có lý do kỹ thuật nào để không làm điều đó, ngoại trừ biết rằng một số người sử dụng các công ty lưu trữ DNS và giới hạn họ chỉ sử dụng một số loại bản ghi nhất định. Điều đó thật đáng tiếc, vì những người điều hành máy chủ DNS của riêng họ chắc chắn có đủ sự linh hoạt cho những thứ đó.

Tuy nhiên, nếu bạn không tạo giao thức mạng của riêng mình (ví dụ: nếu bạn muốn sử dụng HTTP), bạn có thể gặp phải một vấn đề lớn, đó là phần mềm hiện tại sẽ không sử dụng giải pháp tùy chỉnh của bạn, trừ khi bạn sử dụng giải pháp đã được thiết lập. Đó sẽ là rào cản. Không phải là một bất khả thi kỹ thuật. Một rào cản xã hội: Bạn có thể thuyết phục mọi người làm mọi thứ theo cách của bạn?

Bây giờ tôi đã giải thích lý do tại sao bạn không thể làm điều đó, tuy nhiên, tôi có thể có một giải pháp cho những gì bạn đang theo đuổi. Trước tiên, hãy xem tại sao chúng ta thậm chí có địa chỉ IP và cổng.

Địa chỉ IP và cổng làm những việc khác nhau. Mục đích của địa chỉ IP là hoàn thành các mục tiêu của Lớp 2 và 3 của Mô hình OSI về truyền thông mạng. Mục đích của địa chỉ IP là xác định lưu lượng truy cập của máy tính nào. Thực tế là chúng ta có thể sử dụng số cổng cho mục đích đó, bằng cách có tường lửa / bộ định tuyến điều tra số cổng để thực hiện NAPT (Dịch thuật dựa trên cổng địa chỉ mạng, đôi khi được gọi là PNAT hoặc chỉ NAT), là một kỹ thuật mới hơn sử dụng một tài nguyên (thông tin), nhưng không phải là một phần của thiết kế ban đầu. Nếu chúng ta tránh xa sự "lạm dụng" số cổng này trong một phút và xem xét thiết kế ban đầu, chúng ta có thể tìm thấy một giải pháp dễ dàng hơn. Theo thiết kế của Internet, máy móc được tìm thấy bằng cách sử dụng địa chỉ IP.

Điểm của "số cổng", được sử dụng bởi TCP và UDP và một số lựa chọn thay thế, là có thể theo dõi các cuộc hội thoại riêng lẻ. Điều này giúp sắp xếp liên lạc với các chương trình đang chạy. Vì vậy, nếu một máy nhận lưu lượng trên cổng TCP 80, máy sẽ biết rằng lưu lượng mạng có nghĩa là được sử dụng bởi chương trình là máy chủ web. Nếu trình duyệt web tải xuống nhiều đồ họa cùng một lúc, kết hợp số "cổng nguồn" và số "cổng đích" có thể theo dõi dữ liệu nào có nghĩa là đồ họa nào, do đó những cuộc hội thoại đồng thời có thể xảy ra mà không trộn lẫn dữ liệu.

Bây giờ, tôi đoán là bạn có quyền truy cập vào máy chủ DNS và có vẻ như bạn nghĩ rằng quản trị DNS sẽ thuận tiện để có thể xử lý một số định tuyến lưu lượng truy cập nhiều hơn một chút. Nhưng DNS dường như không thể giúp bạn có được số cổng. Bạn có thể làm gì?

Hãy xem xét IPv6. IPv6 cho phép bạn có nhiều địa chỉ IP hơn. Hơn nữa, không giống như một số triển khai của IPv4, các thiết bị sử dụng IPv6 thường có thể dễ dàng hỗ trợ nhiều địa chỉ IPv6 hoạt động cùng một lúc. Vì vậy, nếu bạn muốn có ba giao thức mạng khác nhau trên một máy tính, bạn có thể gán ít nhất ba địa chỉ IPv6 khác nhau cho cùng một máy tính. Và sau đó bạn có thể thực hiện bất kỳ định tuyến shenanigans nào bạn muốn với các địa chỉ IPv6 đó.

Sau đó, bạn có thể sử dụng loại bản ghi tài nguyên AAAA để gán tên cho địa chỉ IPv6 đó, thiết kế mạng của bạn có thể được coi là dành riêng cho dịch vụ cụ thể trên máy tính cụ thể mà bạn muốn.

Wallah, giờ đây bạn đã có DNS chỉ vào phần mềm một cách hiệu quả và đã hoàn thành mục tiêu đó mà không cần phải cố gắng dựa vào việc tạo DNS trỏ tới số cổng, điều này không hoạt động tốt đơn giản vì chức năng đó chỉ xảy ra không phổ biến được hỗ trợ.

Phản đối có thể xảy ra:
Và nếu bạn cảm thấy bế tắc với IPv4 và nghĩ rằng IPv6 không được hỗ trợ bằng cách nào đó, tôi sẽ khuyến khích bạn cố gắng giải quyết vấn đề đó. Vấn đề đó có thể sẽ dễ dàng hơn để khắc phục (có thể sử dụng một số loại đường hầm) và có thể sẽ trở thành một sửa chữa bổ ích hơn một khi bạn đã thực hiện nó.


IPv6 luôn hỗ trợ tốt, nhưng sẽ không giúp ích nếu vì lý do nào đó bạn hiện được phép sử dụng cổng 80 (hoặc 443).
Paulo Ebermann

Điều này là đúng, nhưng nếu DNS quản lý để truyền tải số cổng, thì nó cũng sẽ không hoạt động xung quanh tường lửa chặn lưu lượng trên một số cổng cụ thể. Bên cạnh đó, lời giải thích của tôi về cách sử dụng IPv6 thực sự chỉ là một phần của câu trả lời và tôi thực sự tin rằng các phần trước của câu trả lời của tôi giải quyết câu hỏi.
TUYỆT VỜI 18/11/18
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.