我有一台位于 NAT 后面的 Web 服务器。因此,Web 服务器有两个 IP 地址:一个是全球可见的,另一个仅在 LAN 上可见。
对于移动设备,我希望能够从单个地址引用服务器上的页面,例如www.myhost.com
在两种情况下,而不是使用本地 IP 地址(例如192.168.1.x
当设备在 LAN 上时和www.myhost.com
当设备在 LAN 外时)。这样做有两个原因:首先,必须根据所处位置手动切换地址非常不方便。其次,LAN IP 地址没有单独的 SSL 证书,导致必须点击烦人的浏览器警告。
然而,大概是由于通过www.myhost.com
样式地址的流量必须经过 NAT 而192.168.1.x
流量则不需要,因此存在很大的性能差异 - LAN 上的传输速率快 6 倍以上。
是否有某种方法可以始终使用世界可见的名称,但在 LAN 上仍能获得 LAN 性能?
在任何一种情况下,我都无法访问 DNS 服务器,但是类似多播 DNS(又名 Bonjour)的东西可以工作吗?
为了让事情变得更复杂一点,我还希望它能适用于第二个站点。它有一个不同的域,例如,www.myhost2.com
它复制第一个主机。理想情况下, www.myhost.com
解析www.myhost2.com
第二个站点 LAN 中的 IP。
答案1
假设
- FW 将 80/tcp 和 443/tcp 转发到 192.168.1.5(绿色 httpd)
- FW 发布 DHCP 选项 6,当前指向互联网上的外部名称服务器(红色公共 DNS)
- 公众DNS A 记录为
www.myhost.com
198.51.100.20
解决方案
- 建个DNS解析器192.168.1.10 为您的私人网络(深红色绑定/bonjour)
- 在您的私有 DNS 上添加私有区域文件
myhost.com
(深红色绑定/bonjour) - 配置 DHCP 服务器的DHCP 选项 6(域名服务器)指向 192.168.1.10
为什么你的网络服务器现在很慢
有些防火墙不知道如何从内部接口对 198.51.100.20 进行 NAT,因此它们将所有流量发送到 ISP(ISP 随后将流量发送www.myhost.com
回 198.51.100.20)。这种往返 ISP 路由器的过程会降低您的速度。
图表参考:
您的网络可能看起来不同,但真正重要的是您的 Web 服务器和内部名称服务器。
bind
此网络的解析器配置示例
听起来您正在运行 OSX,因此我会提供 *nix 配置,但您可以使用 Windows 设置类似的解析名称服务器。
我必须在家里做类似的事情;这是我的bind
配置的转录版本。请记住,bind
喜欢标签。一旦您开始bind
运行它可以将 bind 与 bonjour 集成,但这并不是真正需要的。
从技术上讲,可以将名称服务器和 httpd 合并到同一台机器上,但出于安全考虑,我会将它们分开。另外,在没有真正的 DMZ 的情况下托管网络服务器有点危险,但我们现在超出了您的问题范围。
文件/etc/bind/named.conf
:
include "/etc/bind/named.conf.options";
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
include "/etc/bind/named.conf.local";
文件/etc/bind/named.conf.options
:
acl kill_clients {
192.168.1.32; // Black hole requests here (I have a cheap webcam)
};
acl valid_clients {
192.168.1.0/24;
127.0.0.0/8;
};
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;
// };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
listen-on { any; };
blackhole { kill_clients; };
forwarders {4.2.2.2; 8.8.8.8; }; // Replace with your ISP DNS servers
};
// Configure the communication channel for Administrative BIND9 with rndc
// By default, they key is in the rndc.key file and is used by rndc and bind9
// on the localhost
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; };
};
文件/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 "myhost.com" {
type master;
file "/etc/bind/db.myhost";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1.0";
};
文件/etc/bind/db.myhost
:
;
; BIND data file for local loopback interface
;
$TTL 3600
myhost.com. IN SOA ns.myhost.com. hostmaster.myhost.com. (
201301091350 ; Serial
3600 ; Refresh
86400 ; Retry
2419200 ; Expire
3600 ) ; Negative Cache TTL
;
myhost.com. IN NS ns.myhost.com.
www IN A 192.168.1.5
www-public IN A 198.51.100.20
ns IN A 192.168.1.10
fw IN A 192.168.1.254
文件/etc/bind/db.192.168.1.0
:
@ IN SOA ns.myhost.com. root.. (
2013010901 ;serial
14400 ;refresh
3600 ;retry
604800 ;expire
10800 ;minimum
)
1.168.192.in-addr.arpa. IN NS ns.myhost.com.
10 IN PTR ns.myhost.com.
5 IN PTR www.myhost.com.
254 IN PTR fw.myhost.com.