Kut*_*lan 8 dns port proxy networking reverse-proxy
我有一些基于 Web 的本地应用程序用于家庭自动化,这些应用程序可以通过 IP 地址访问,端口号类似于http://192.168.1.100:8080.
我试图实现的是将每个单独的 IP 和端口号组合链接到一个内部域名,以便任何人都可以使用域和子域名而不是 IP 地址。
例如,一个人可以指定一个 URLhttp://kitchen.home而不是一个带有端口号 URL 的 IP 地址,例如http://192.168.1.100:8080.
同时http://192.168.1.100:8081可以映射到一个域名,例如hall.home,http://hall.home可以使用URL代替该 IP 地址和端口号。
对服务器的访问不需要修改hosts单个 PC的文件,而应该是某种域名服务器,将域名映射到本地网络上任何 PC 的 IP 地址和端口号。
DNS 名称独立于端口号。dns 记录将名称与 IP 地址相关联。如果您想从 url 中省略端口号,您需要在默认端口 (80/443) 上托管,或者使用代理。
对于家庭网络,dns 可能很棘手,通常在很大程度上取决于您拥有的特定路由器。您的选择基本上是:
A记录example.com该点。服务器本身可能只能在您的网络内部访问,但 dns 将在任何地方可用。我已经bind9在我的家庭网络上作为 Ubuntu 20.04 下的 DNS 服务器运行的 PC 上设置了一个 DNS 服务器,以便拥有我自己的特殊域名。
关于 DNS 和 HTTP 代理服务器的一些细节
要将域内的多个不同子域名映射到同一台 PC 上的特定端口,您需要在 PC 上安装代理服务器以及本地网络的 DNS 服务器。域名通过 DNS 协议映射到特定的 IP 地址,而不是映射到 IP 地址的特定端口。
就我而言,我的 PC 硬件与 Ubuntu 20.04 相同,具有 (1) Bind9 用于我的 DNS 服务器和 (2) Apache 用于我的代理服务器。我可以使用两台不同的 PC,一台作为 DNS 服务器,将域名解析为 IP 地址,另一台提供通过单个 IP 端口访问的各种服务,使用代理服务器侦听该端口以将连接分派到服务或直接到通过指定所需服务的正确端口号来提供服务。
例如http://kitchen.home/,在浏览器中会指示浏览器kitchen.home使用端口 80(默认 HTTP 协议端口)打开到由域名表示的 IP 地址的 TCP 连接。DNS 服务器用于将域名解析为kitchen.homeIP 地址。使用 URL 时http://kitchen.home:8081/,浏览器将要求 DNS 服务器将域名解析为kitchen.homeIP 地址,然后打开到该 IP 地址的 TCP 连接,但使用端口 8081 而不是标准的 HTTP 端口 80。
因此,http://kitchen.home/要映射到该 IP 地址处的端口 8080 并http://hall.home/映射到该 IP 地址处的端口 8081,您需要将解析域名的 DNS 服务器与驻留在端口 80(标准 HTTP 端口)的代理服务器结合起来。然后,代理服务器将重定向选择的PC上的请求,以在不同的端口基于子域名,hall或者kitchen,整个结构域说明符,kitchen.home或hall.home。
请参阅/sf/answers/4068589311/,其中描述了将 Nginx 设置为代理服务器。
Apache Web 服务器也可以作为我正在研究的代理服务器。请参阅 DigitalOcean 的本教程,如何使用 Apache HTTP Server 作为反向代理使用 mod_proxy 扩展以及在 apache 中设置基本 Web 代理。
我的环境
我在楼下有一台 Windows 10 PC,楼上有一台 Ubuntu 20.04 PC,通过 Arris 路由器与我的有线互联网提供商进行通信。两台 PC 都通过 WiFi 连接到我的本地家庭网络。
Ubuntu 20.04 PC 是我使用 Apache Web 服务器的 Subversion 服务器。我大部分时间都在楼下的 Windows 10 PC 上,在需要时使用 PuTTY 连接到带有一个或多个终端窗口的 Ubuntu PC。我计划在 Windows 10 PC 上使用 Visual Studio,通过 Apache Web 服务器访问 Subversion,并使用 Ubuntu PC 作为数据库服务器 (MySQL) 和 Web 服务器(Apache with Php)和微服务(golang 和 node.js) .
我想在 Ubuntu PC 上设置一个 DNS 服务器,然后将我的 Windows 10 PC 指向一个特殊的域名使用本地 DNS 服务器,同时使用标准的 DNS 服务器,例如 8.8.8.8 和 8.8.4.4 的谷歌。
我做了什么
我遵循的程序是(请参阅如何在 Ubuntu 20.04 上配置 BIND9 DNS 服务器,并参阅域名服务 (DNS)以及您需要了解的有关 Ubuntu DNS 服务器的所有内容):
bind9使用sudo apt install bind9sudo ufw allow Bind9/etc/bind/named.conf.options/etc/bind/named.conf.local/etc/bind/db.local为我的新域名创建一个副本,home.x/etc/bind/db.home.x使用正确的规则修改新文件我想在本地使用的域名home.x的想法是,如果我输入http://www.home.x/结果页面的网站 URL,将是我的 Ubuntu PC 上的 Apache Web 服务器。或者,如果我输入http://home.x/svn,结果将是我的 Ubuntu 服务器上的 Subversion 存储库。
注意:为了通过 Apache 访问 Subversion,我必须进行设置。如果您对此感兴趣,请参阅在 Ubuntu 上通过 Apache Web 服务器和 DAV 启用 Subversion 访问。
有关更改和修改文件的详细信息
Ubuntu PC 在我的本地网络上的 IP 地址为 192.168.0.4。在下面的描述中,这个 IP 地址用于任何引用 Ubuntu PC 的地方。
我forwarders在文件/etc/bind/named.conf.options中添加了一个部分,以便将我的 Ubuntu 服务器未知的任何 DNS 请求转发到其他一些 DNS 服务器。我从ipconfig /all我在 Windows 10 PC 上运行的 Window 10 命令返回的 DNS 服务器列表中复制的 IP 地址。修改后的文件如下:
rick@rick-MS-7B98:~/Documents$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
// following forwards are to Google DNS servers at 8.8.8.8 and 8.8.4.4
forwarders {
8.8.8.8;
8.8.4.4;
209.55.27.13;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
};
Run Code Online (Sandbox Code Playgroud)
更改文件后/etc/bind/named.conf.options,我然后运行检查实用程序,发现没有错误,然后重新启动bind服务。
sudo named-checkconf
sudo systemctl restart bind9
Run Code Online (Sandbox Code Playgroud)
接下来,我zone在文件中添加了一个新指令,/etc/bind/named.conf.local为我的新本地域名创建 DNS 条目home.x。修改后的文件如下所示:
rick@rick-MS-7B98:~/Documents$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "home.x" {
type master;
file "/etc/bind/db.home.x";
};
Run Code Online (Sandbox Code Playgroud)
最后,我需要创建/etc/bind/db.home.x在file指令的zone指令中指定的文件。我/etc/bind/db.local通过使用以下命令从现有文件的副本开始
sudo cp /etc/bind/db.local /etc/bind/db.home.x
Run Code Online (Sandbox Code Playgroud)
然后我修改了该文件/etc/bind/db.home.x,以指定将 的域名home.x以及 的子域www.home.x解析为我的 Ubuntu PC 的 IP 地址所需的规则。修改后的文件如下所示:
rick@rick-MS-7B98:~/Documents$ cat /etc/bind/db.home.x
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA home.x. root.home.x. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.home.x.
@ IN A 192.168.0.4
@ IN AAAA ::1
ns IN A 192.168.0.4
www IN A 192.168.0.4
Run Code Online (Sandbox Code Playgroud)
此时,我可以使用nslookup命令窗口中的命令来测试我的 Windows 10 PC 上的工作是否正常。我先尝试了没有指定 Ubuntu PC IP 地址,然后使用 Ubuntu PC IP 地址
C:\Users\rickc>nslookup home.x
Server: dns.google
Address: 8.8.8.8
*** dns.google can't find home.x: Non-existent domain
C:\Users\rickc>nslookup home.x 192.168.0.4
Server: UnKnown
Address: 192.168.0.4
Name: home.x
Addresses: ::1
192.168.0.4
Run Code Online (Sandbox Code Playgroud)
然后我使用 Windows 10 控制面板 ( Control Panel > Network and Internet > Network Connections) 查看我的网络适配器列表,以修改我的 WiFi 适配器使用的 DNS 服务器地址。通过在适配器上单击鼠标右键弹出浮动菜单,选择属性以打开属性对话框,然后选择 Internet 协议版本 4,然后单击对话框上的属性按钮并修改 DNS 服务器地址,即可找到此设置。下面是对话框的屏幕截图。
修改DNS服务器地址后,nslookup不指定DNS服务器地址重试,命令发现home.x:
C:\Users\rickc>nslookup home.x
Server: UnKnown
Address: 192.168.0.4
Name: home.x
Addresses: ::1
192.168.0.4
Run Code Online (Sandbox Code Playgroud)
当我测试时,http://www.home.x/会显示我的 Apache Web 服务器的测试页面的URL 。当我测试http://home.x/svnWeb 浏览器的 URL 时,显示了我的 Subversion 存储库的目录树。当我使用http://home.x/svn/trunk/Visual Studio 2017 的 Ankh Subversion 插件访问我的 Subversion 存储库时,它可以工作。
其他想法
此设置的一个问题是,如果我的 Ubuntu PC 未启动并运行,则 Windows 10 PC 将无法运行 DNS 服务器,直到 Ubuntu PC 启动或 DNS 服务器地址设置回原始设置无线适配器。以前,它被设置为发现 DNS 服务器。可能我可以从指定的 DNS 服务器地址、我的 Ubuntu PC 的 IP 地址和我的 Windows 10 PC 更改回来,并且无论如何我的 Ubuntu PC 都会发现我的 Ubuntu PC 作为 DNS 服务器。
| 归档时间: |
|
| 查看次数: |
29188 次 |
| 最近记录: |