我想通过内部 DNS 从几台内部机器向外部客户端提供服务。
这是来自家庭的单个外部 IP 地址,在消费者级路由器上,我希望从网络内部的机器提供内部路由。
目前,我已让机器解析其他内部客户端,前提是它们的名称服务器列表中有内部 DNS。
但是,如果我尝试解析这些名称/使用来自外部客户端的服务,它们只会解析到网关/ DNS 框,我需要内部机器来解析。
端口转发没有帮助,因为我有多个提供类似服务的盒子(ssh,http / https,邮件等)
该图表可能有助于解释设置以及我想要做的事情......(或它的名字;))
任何帮助将非常感激。
最后,我只需要使用反向代理来执行此操作吗?
答案1
问题不是 DNS,问题在于 IP。
如果您需要外部访问,则需要外部可访问的 IP。对于一台机器,端口转发即可解决问题。对于多台机器,您可以将一台机器上的端口 22 转发到路由器上的端口 22,将另一台机器的端口 22 转发到路由器上的端口 122。您将通过 ssh 连接到 example.com:122。
如果无法明确指定端口,对于 http/https 协议,反向代理就可以了;对于邮件,单台机器就足够了。对于 ssh 和大多数其他协议,唯一的方法是拥有多个公共 IP
答案2
因此,我决定添加我自己的答案,因为给出的答案并没有真正明确地回答这个问题。
我使用 Nginx 设置了一个反向代理,可以根据内部 DNS 解析名称。这涵盖了 Web 服务(您可以添加更多监听端口,例如用于访问 Web 管理员或邮件服务。(我只有一个邮件服务器,这很典型,因此它只是端口转发,不需要代理)
server {
listen 80;
server_name a.example.com b.example.com c.example.com;
access_log /var/log/nginx/proxy.access.log;
location / {
resolver 192.168.1.102; # Local DNS resolution
proxy_pass http://$host$uri; # wildcard
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
为了处理 ssh,我决定只使用端口转发,但是可以配置 sshd 通过隧道进行反向代理,这个答案有一些细节: