切入正题:
我的一个具体问题是: 10.0.3.X/24 网络上的客户端无法访问subdomain.site.com
.如何使 10.0.2.X/24 和 10.0.3.X/24 上的客户端在呼叫时能够解析 10.0.1.4 subdomain.site.com
?
我想使用 WAN 端域名让我的 DNS 解析适用于我的 Web 服务器 LAN,subdomain.site.com
例如n任何 LAN 子网上的客户端只需键入subdomain.site.com
or即可site.com
进行适当的路由(可扩展,所以这/etc/hosts
是不可能的)。
我的 LAN 有多个使用以下命令创建的子网发光二极体(网络.1)和开放WRT(网络.2和网络.3):
10.0.1.X/24 Main puppy with WAN interface facing internet and NAT, web server fixed at 10.0.1.4 with ports forwarded
10.0.2.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed)
10.0.3.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed)
我不需要任何发夹 NAT/环回 NAT 解决方案。我更喜欢使用 DNS 的解决方案,原因如下:
- 来自客户端的传出呼叫调用权威 DNS 来查找 IP(用于路由!),然后将数据包发送到该目的地,
- 到达后,会被DNATed到服务器。
- 源IP是客户端的本地地址,因此服务器直接调用客户端(使用数据包的源IP)。
- 客户端拒绝此包,因为它希望它来自网关,间接来自网关的分机。地址。由上面的 DNS 提供。
- NAT 环回通过将出站源 IP 转换为网关的 LAN 端地址来解决该问题。使得
- 然后服务器响应网关,而不是直接响应客户端。凉豆子。
此数据流的问题在于离开 LAN 并联系全球 DNS 服务器获取 IP 地址的效率不高。当服务器是本地对等方时(在 NAT 的同一侧,在我的情况下不一定位于同一本地子网内)。当客户端和服务器是本地对等体时,为什么还要离开 LAN?关于环回 NAT 流的详细解释可以在这里找到, https://unix.stackexchange.com/a/282094/33386。
我知道可以使用它来实现我想要的DNS 水平分割或现在一些人所说的任何流行术语。此外,在某些情况下优先于全局命名服务器的本地命名服务器也可以解决此问题。使用多个子网(多个 DHCP+DNS 服务器)时,如何在 OpenWRT 或 LEDE 中实现此功能?一定有人已经这么做了。
目前,10.0.1.X/24 上的客户端可以subdomain.site.com
通过相应的 dnsmasq 设置进行访问/etc/config/dhcp
,但我不知道为什么,因为我认为这不涵盖子域:
config domain
option name 'site.com'
option ip '10.0.1.4' # LAN address of web server
答案1
第一个缺失元素
我必须在 dnsmasq 配置中添加两件事辅助路由器在文件中/etc/config/dhcp
:
list server '10.0.1.1'# Clients will still get 10.0.3.1 as dns server
list rebind_domain 'subdomain.site.com' # Allow rebind to web server
使list server
dnsmasq 将 dns 查询转发到 10.0.1.1 处的服务器(主路由器 dnsmasq 服务器)。允许list rebind_domain
重新绑定特定站点,以便可以保留 DNS 重新绑定保护。在这里谢谢“jow”。另一种选择是完全禁用 dns 重新绑定保护。或者,也可以使用option rebind_localhost 1
,但我没有对此进行测试。如果没有这一步,我就无法 ping 通subdomain.site.com
。
第二个缺失元素
将以下条目添加/etc/dnsmasq.conf
到主路由器。
address=/.site.com/10.0.1.4
.
请注意所有子域的占位符。这种改变也可能在 中实现/etc/config/dhcp
,但我不确定如何实现。
原来的第二个缺失元素(有限)
这是我最初的解决方案,后来我放弃了。我10.0.1.4 subdomain.site.com
在主路由器的文件中添加了一个条目 ( ) /etc/hosts
,它的限制是没有子域或扩展 URL 的占位符,就像使用 webdav 时一样。
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.0.1.4 subdomain.site.com
logqueries 1
通过添加来/etc/config/dhcp
记录所有 DNS 查询来测试这一点。将显示类似以下内容,表明这/etc/hosts
是来源:
Fri Jan 5 14:11:20 2018 daemon.info dnsmasq[7368]: 73 10.0.3.149/64299 /etc/hosts subdomain.site.com is 10.0.1.4
什么没有奏效
/etc/config/dhcp
令我惊讶的是,主路由器上的以下配置仅在10.0.1.X/24
子网内有效:
config domain
option name 'site.com'
option ip '10.0.1.4'
config domain
option name 'subdomain.site.com'
option ip '10.0.1.4'
如果有人能阐明这一点,我很想知道为什么!也许有问题?
看来在辅助路由器上添加option dns 10.0.1.1
对/etc/config/network
我的情况也没有真正的帮助。
config interface 'lan'
option ifname 'eth0.1'
option force_link '1'
option type 'bridge'
option proto 'static'
option ipaddr '10.0.2.1'
option netmask '255.255.255.0'
option dns '10.0.1.1'
config interface 'wan'
option ifname 'eth0.2' # Comment this out if connecting as sta using wlan
option proto 'dhcp'
option netmask '255.255.255.0'
option gateway '10.0.1.1'
option dns '10.0.1.1'
添加此选项会使条目显示在 中cat /tmp/resolv.conf.auto
。然而,list server 10.0.1.1
如上所述,添加了nameserver 10.0.1.1
WAN 接口。
在辅助路由器上添加dhcp_option
s/etc/config/dhcp
没有帮助。
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '72h'
option ra 'server'
#list 'dhcp_option' '3,10.0.1.1' # SET DEFAULT GATEWAY, CAUTION CAN BREAK STUFF
#list 'dhcp_option' '6,10.0.1.1' # SEND DNS SERVER ADDR TO CLIENTS, CAUTION CAN BREAK STUFF
答案2
您需要水平分割或本地名称服务器。
将 10.0/16 后面的客户端指向对该subdomain.example.com
区域具有权威性的本地名称服务器,否则进行递归。这可以通过独立的名称服务器或水平分割来实现。
下面的两个示例都包含执行其任务的最低限度。安全问题和其他配置细节不属于此问题的范围。
水平分割
view "internal" {
match-clients { // Add any other "on-net" blocks here.
localnets;
127.0.0.1;
};
recursion yes;
zone "example.com" in {
type master;
file "internal/example.com"; // Contains RFC1918 addresses for on-net hosts
};
zone "." in {
type hint;
file "root.cache";
};
};
view "external" {
recursion no;
zone "example.com" in {
type master;
file "external/example.com"; // Contains public IPs for hosts
};
};
独立域名服务器
这是一个普通的 BIND 实例,但配置为对内部区域具有权威性。
options {
recursion yes;
// and any other options you want
};
zone "example.com" in {
type master;
file "example.com"; // Contains the RFC1918 addresses.
};
zone "." in {
type hint;
file "root.cache";
};