如何將 FQDN 轉發到虛擬機?
是否可以讓 2 個域名指向在 Ubuntu Server 下執行的兩個不同的虛擬機?我的困境是我只有 1 個面向公眾的 IP 地址。
這是我要實現的目標的圖形:
/---FQDN1--->VM1 External IP ---- \---FQDN2--->VM2
我意識到這可能存在一些陷阱,例如讓應用程序綁定到不同的埠以避免衝突。
線上閱讀後,這可能通過 iptables、bind 和/或 squid 代理實現。
首先,不可能根據客戶端訪問的域將 IP 或傳輸層的埠轉發到不同的內部機器。因此,您想要做的事情必須在更高級別的網路堆棧上完成。但是您可能已經閱讀過這篇文章,因為您正在詢問代理。
將網路堆棧向上移動一層,您會發現各種不同的協議。有些很容易根據主機名進行代理,有些則不可能。我只知道四種協議,可以這樣代理。從最簡單到最難,它們是:
- HTTP
- HTTPS
- 域名系統
- SMTP
標準 HTTP 代理可以為您處理 HTTP 協議。它適用於任何發送主機頭的客戶端。此標頭在 HTTP/1.0 中是可選的,在 HTTP/1.1 中是必需的。到現在為止,HTTP/1.1 已經有十多年的歷史了,你現在可以期待幾乎所有的客戶端都支持它。
HTTPS 有點棘手。它僅適用於支持 SNI 的客戶端。我認為您會發現大多數人支持它,但您可能會發現仍有少數客戶不支持 SNI。您可以將所有不支持 SNI 的客戶端轉發到一個特定的伺服器,這樣至少一個域可以為沒有 SNI 的客戶端工作。
我的建議是為每台伺服器分配一個公共 IPv6 地址。這樣,支持 IPv6 的客戶端就不會遇到代理的缺點,並且您可以使用從代理到實際伺服器的 IPv6 連接。這也意味著代理實際上可以使用 DNS 查找來查找伺服器的地址,這可能會簡化事情。
我已經實現了這樣一個支持 http 和 https 的代理,所以我知道它是可行的。但我認為對於您的設置,現成的代理可能是更好的選擇。我覺得魷魚可以。另一方面,我認為 iptables 和 bind 不會對您有太大幫助。