NGINX 重定向到使用 DNSMasq 本地欺骗的域名

NGINX 重定向到使用 DNSMasq 本地欺骗的域名

我有一个在互联网上提供数据服务的 Linux VPS,它具有合法的域名和 SSL 证书(来自 GoDaddy.com)。我将此服务器称为“www.myserver.com“。我还有一台本地 Linux 机器(在我自己的 LAN 上),我想用它来 DNS 欺骗我面向互联网的域名(www.myserver.com)到在该本地机器上运行的它自己的 NGINX Web 服务器。

我在本地计算机上设置 DNSMasq 来将该域欺骗到其本地 192.x 地址,并且我从 LAN 上的另一台计算机进行验证,该计算机报告了本地地址。

本地服务器dnsmaq欺骗映射:

cat /etc/dnsmasq.d/spoof.hosts 
192.168.1.142 www.myserver.com myserver.com

LAN 上的单独计算机表明欺骗映射应该有效:

dig +short @192.168.1.142 myserver.com
>> 192.168.1.142

我的 dnsmasq.conf:

server=127.0.0.1
listen-address=127.0.0.1
listen-address=192.168.1.142
no-dhcp-interface=
no-hosts
addn-hosts=/etc/dnsmasq.d/spoof.hosts

我的欺骗主机:

192.168.1.142 www.myserver.com myserver.com

在本地服务器上,我使用解析器配置 NGINX 以查找本地主机的 DNS,如下所示:

http {

    access_log off;
    include mime.types;

    default_type html;

    sendfile        on;

    keepalive_requests 50;
    keepalive_timeout  75s;

    reset_timedout_connection on;

    server_tokens off;

    server {

       listen 8080 default_server;

       resolver 127.0.0.1 valid=10s;

       location / {
           return 302 http://myserver.com/;
       }

    }

    server {

      listen       80;
      server_name *.myserver.com;

      // Various Endpoints

    }
}

问题是,当我访问本地计算机 192.168.1.131:8080 时,它会重定向到我的实际的面向互联网的机器 - the真实的互联网上的域名。

我希望它重定向到本地欺骗的 DNS。我究竟做错了什么?我怎样才能做到这一点?谢谢。

更新:我也尝试过这个,但没有运气:

http {
    access_log off;
    include mime.types;

    default_type html;

    sendfile        on;

    keepalive_requests 50;
    keepalive_timeout  75s;

    reset_timedout_connection on;

    server_tokens off;

    server {

          listen 80 default_server;
          server_name _;
      resolver 127.0.0.1;
          return 301 https://myserver.com/$request_uri;   

    }

    server {

        listen       443;
    server_name *.myserver.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/1e17e6d8f94cc4ee.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    ...

    }
}

答案1

当 nginx 发送重定向时,它只是告诉客户端访问新的 URL。因此,现在在客户端上解析了新主机名,并且由于该客户端没有使用欺骗性 DNS 服务器,因此它会转到真实主机。

也许您想在代理模式下使用 nginx,以便 nginx 从后端获取内容并将其转发到客户端。

答案2

当您的 nginx 发送重定向时,它根本不需要解析任何内容 - 它实际上只是告诉客户端“转到https://myserver.com反而”。

然后,客户端自行使用已配置的 DNS 服务器来查找 myserver.com 的 IP 地址。

您需要确保客户端将使用 192.168.1.142 而不是其他任何内容作为其 DNS 服务器。

答案3

如果我理解正确的话,您的 LAN 上有两台感兴趣的机器:我们将它们称为 142(代表 192.168.2.142)和 131(代表 192.168.1.131)。

如果我仍然正确理解,当您从 131 连接到 131:8080 时,您希望被转发到 142,欺骗 www.myserver.com。

如果是这种情况,您需要在 131 上运行 DNSMasq,而不是在 142 上运行。

您需要验证的是

$ dig +short myserver.com   # running on 131, no @parameter
>> 192.168.1.142

另一方面,如果您有更多计算机在连接​​到 131:8080 时应重定向到 142 欺骗 www.myserver.com,则您需要所有这些计算机使用您的 DNSMasq 实例作为其默认 DNS 服务器。

相关内容