如何让我的自托管网站使用远程服务器的 IP 而不是我家的公共 IP?

如何让我的自托管网站使用远程服务器的 IP 而不是我家的公共 IP?

我在 Azure 上有一个正在运行的 VM 实例,具有静态 IP。我需要知道有什么简单的方法可以让我托管在 Raspberry Pi 上的网站可供任何人来自 Azure VM 的静态 IP 而不是我的家庭 IP 地址?

即,我通常在线提供网站服务的方式是使用 Nginx 反向代理指向具有指向我家庭 IP 地址的 A 记录的域。我如何才能将虚拟机的 IP 地址用作我域的 DNS 区域中的 A 记录,并以某种方式从我的家庭 IP 地址获取连接?

答案1

视情况而定:

假设家庭 IP 为 1.1.1.1,Azure IP 为 2.2.2.2

  1. 家庭 IP 是完全全局 IP 并且家庭 IP 是静态的 → 然后创建两个记录azure.domain.com A 2.2.2.2home.domain.com A 1.1.1.1添加重定向规则azure.domain.com → home.domain.com)到 Nginx

    ※ 注意:如果您能够在 Raspberry PI 上部署所有页面和服务,那么您实际上根本不需要 Azure 托管。只需home.domain.com直接发布和共享 URL。如果某些服务应该使用 Azure 托管,您需要使用我之前提到的重定向或 Nginx 的反向代理功能(它能够直接使用 IP 地址作为代理端点,因此您不需要注册域名1.1.1.1

  2. Home IP 是一个完全全局的 IP,Home IP 是动态的 → 并不完美……Azure 服务器必须知道每次 Home 全局 IP 的更改。以下是几个可能的解决方案:

    1. 在主端创建脚本并将其添加到 cron 任务。这将获取自己的全局 IP 并home.domain.com在每次 IP 更改时更新记录。您也可以使用动态域名系统服务用于这些目的(如果路由器支持此功能,DynDNS 是最简单的解决方案)。在这种情况下,home.domain.com通常可以全局访问(除非 IP 已更改但域记录仍未更新或旧值缓存在客户端)。
    2. 在主端创建脚本并将其添加到 cron 任务。这将获取自己的全局 IP 并更新 Azure Nginx 的反向代理 IP。在这种情况下,您只能使用原始全局 IP 地址而无需设置home.domain.com。此外,这种方式还可以避免域记录更新时间滞后。
    3. 在 Azure 端创建 VPN 服务器,并通过 VPN 内网传递反向代理连接。不要忘记在 Home 的 ISP 会话更新时自动重新连接 VPN。
  3. 家庭 IP 是 ISP NAT 后面的一个不太全局的 IP,并且家庭 IP 可能是动态的 → 休斯顿,我们遇到了一个问题……即使 Azure 服务器知道当前的家庭 IP 地址,也无法从外部连接到它。您必须从内部(家庭的 Raspberry PI)启动到外部(Azure 服务器)的连接。例如,您可以使用从 Raspberry PI 启动的 SSH 隧道来实现这些目的。但更简单的方法是 VPN 连接,正如我在 2.3 中描述的

如果你打算使用第一种场景的反向代理方式,Nginx 的配置应该是这样的:

# set home server global IP
upstream home_server{
    server 1.1.1.1:80;
}

server {
    listen       80;
    server_name  azure.domain.com;


   # set proxy endpoint (home server)
   # all azure.domain.com/home* urls will be redirected to home server
   location ~* ^/home {
        proxy_pass http://home_server;
        proxy_intercept_errors on;
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        proxy_pass_request_headers on;
    }

}

添加:

回答

我想指向 Azure IP,因为我不希望我的网站 IP 地址与我的大致位置相关联

Nginx 反向代理将有助于隐藏实际 IP。azure.domain.com客户端只能看到(或与其关联的)位置。(但是实际 IP 可能存储在 http 标头中,不要忘记也重写它)

第二种简单的方法是使用iptables(如果 Azure 托管是 Linux)前向流量2)从 Azure IP 到您的家庭 IP:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 1.1.1.1:80
iptables -t nat -A POSTROUTING -j MASQUERADE

将所有 http(端口 80)流量重定向至1.1.1.1:80

相关内容