AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 414824
Accepted
Jonathan Komar
Jonathan Komar
Asked: 2018-01-05 10:51:35 +0800 CST2018-01-05 10:51:35 +0800 CST 2018-01-05 10:51:35 +0800 CST

如何从 LAN 内(跨多个子网)获取指向本地托管 Web 服务器的 Internet 域名的 DNS IP 解析?

  • 772

切入正题:

我的一个具体问题是: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?


我想让我的 DNS 解析使用 WAN 端域名为我的 Web 服务器 LAN 工作,例如subdomain.site.com,任何 LAN 子网络上的n 个客户端可以只键入subdomain.site.com或site.com适当地路由(可扩展,所以/etc/hosts不在问题)。

我的 LAN 有多个使用LEDE(网络 .1)和OpenWRT(网络 .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 的解决方案,原因如下:

  1. 来自客户端的呼出调用权威 DNS 来查找 IP(用于路由!),然后将数据包发送到该目的地,
  2. 到达后,将其 DNATed 到服务器。
  3. 源 IP 是客户端的本地地址,因此服务器直接调用客户端(使用数据包的源 IP)。
  4. 客户端拒绝这个包,因为它希望它来自网关,间接来自网关的分机。地址。由上面的 DNS 提供。
  5. NAT 环回通过将出站源 IP 转换为网关的 LAN 端地址来解决此问题。使得
  6. 然后服务器响应网关,而不是直接响应客户端。凉豆。

此数据流的问题在于离开 LAN 并联系全球 DNS 服务器以获取 IP 地址的效率不高。当服务器是本地对等点时(在 NAT 的同一侧,在我的情况下不一定在同一个本地子网中)。当客户端和服务器是本地对等点时,为什么还要离开局域网?可以在这里找到环回 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
dns openwrt
  • 2 2 个回答
  • 3571 Views

2 个回答

  • Voted
  1. Ben Stern
    2018-01-05T11:03:43+08:002018-01-05T11:03:43+08:00

    您需要水平分割或本地名称服务器。

    将 10.0/16 后面的客户端指向对该subdomain.example.com区域具有权威性的本地名称服务器,否则将递归。这可以通过独立的名称服务器或水平分割来实现。

    下面的两个示例都包含执行其任务的最低要求。安全问题和其他配置细节不在此问题的范围内。

    我强烈建议按顺序阅读DNS HOWTO和DNS 和 BIND。


    水平分割

    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";
    };
    
    • 1
  2. Best Answer
    Jonathan Komar
    2018-01-06T05:05:25+08:002018-01-06T05:05:25+08:00

    第一个缺失元素

    我必须在文件中的辅助路由器/etc/config/dhcp上的 dnsmasq 配置中添加两件事:

        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 serverdnsmasq 将 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_options/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
    
    • 1

相关问题

  • Nginx - 创建链接到另一个(本地)网站的子域

  • 什么是根域?[关闭]

  • 如何使用不同的 DNS 服务器将主机名解析为 ip?

  • bind9反向解决问题

  • 如何验证我使用 9.9.9.9 作为 DNS?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve