我有一个在互联网上提供数据服务的 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 服务器。