Linux路由-从LAN访问外部IP

Linux路由-从LAN访问外部IP

我在路由器上使用 OpenWRT(基于 Linux)。路由器有一个本地 IP 和一个公共 IP。我为公共 IP 分配了一个 dyndns 名称。路由器正在将多个端口(例如 ssh 和 https)转发到我的本地服务器。

目标: 使用相同的 URL 访问服务器,无论客户端是在我的本地网络内还是在本地网络外。

从外部: 当我向公共 IP 发送请求时。请求被转发到我的内部服务器。一切正常

从内部来看: 当我向公共 IP 发送请求时,它最终到达路由器的内部接口。因此端口转发不起作用。

当我从内部使用 nmap 扫描路由器的本地 IP 时,我得到的结果与从内部扫描公共 IP 的结果相同。因此,当我从内部访问公共 IP 时,流量似乎仍然会到达本地 IP。

我该怎么做才能在本地网络内外使用相同的 URL 访问服务器?

编辑:

  • 名称解析工作正常。

答案1

最简单的方法是设置一个内部 DNS 服务器,将您网站的主机名解析为内部 IP 地址。

另外,您可以在客户端计算机上输入 /etc/hosts 条目(或等效条目)并获得相同的结果。

答案2

您需要名称解析在网络内部和外部以不同的方式工作。您的 dyndns 条目将路由到外部 IP。防火墙路由在路由内部和外部是不同的。

将 dyndns 名称与服务器 IP 地址添加到 OpenWrt 上的本地 hosts 文件中,dnsmasq DNS 服务应覆盖来自互联网的条目。如果配置正确,您的名称应解析为网络内部服务器的 IP 地址和网络外部外部 IP 地址。

可以配置发夹式 NAT,但是相对困难且脆弱。

答案3

您可以在绑定中使用“视图”

acl "local_net" {
      192.168.0.0/16;
};

view "internal" in {

    match-clients { local_net; };
    recursion yes;
    additional-from-auth yes;
    additional-from-cache yes;

    zone "example.net" in {
        type master;
        allow-query { local_net; };
        allow-transfer { none; };
        allow-update { none; };
        file "master/example.net";
    };
...
}

master/example.net

@       IN      SOA     ns.example.net. root.example.net.  (
                                2013072101      ; Serial
                                3600            ; Refresh
                                900             ; Retry
                                3600000         ; Expire
                                3600 )          ; Minimum

@               IN      A       192.168.127.1
www             IN      CNAME   example.net.

通过这样的设置,您所有的本地客户端都将获得您的公共域名的内部 IP 地址。您也可以使用 iptables 解决问题,但这将是更复杂的解决方案。

相关内容