我读过这个:
但这并没有真正解决我的根本问题。我需要在内部网络上获取客户端 IP,例如,192.168.1.7
以便我知道服务器是否正在从内部位置访问。
我正在更新一些前一段时间由其他人构建的代码,这个代码片段就在那里:
$octet = explode(".", getenv("REMOTE_ADDR"), 4);
if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) {
die("You are unable to view this page from your current location.");
}
这看起来像是在测试该内部 IP,但在另一个具有类似代码的页面上,我收到了die
消息。该代码实际上显示我的 IP 不是192.168.1.7
(此代码实际上显示了 ISP 给我的静态 IP):
if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) {
die("You are unable to view this page from your current location: " . getenv("REMOTE_ADDR"));
}
我有点困惑,因为这段代码过去似乎有效,但现在不行。我不完全确定它什么时候停止工作,但根据我看到的代码,它一开始就不应该工作。
笔记
我还应该提到,所有需要访问该服务器的客户端都是内部的(大部分)。这是一个带有自定义许可证密钥模块的 CRM。我希望只有192.168.1.0
网络上的那些客户端可以访问这些 PHP 页面。但棘手的部分是,有一种方法可以在如下位置使用 DNS 从外部访问 CRM 的非关键系统部分:
crm.my-domain.com
可以说,那些从网络外部访问 CRM 的客户不应该访问关键模块;只有网络上的那些客户端192.168.1.0
才能看到密钥。因此,如果我可以获得内部 IP,我可以对其进行测试并显示页面。
笔记2
我在网络中运行 DNS,并且我在路由器上有一个端口转发到有问题的服务器<internal_ip>
上的端口80
。
DNS 有这样的 A 记录:
crm_servername A 192.168.1.20
它有一个CNAME
:
crm CNAME crm_servername.my-domain.com
我是否需要更多,或者这对我有用吗?目前我可以通过子域地址访问有问题的服务器,但是当我访问有问题的页面时,它仍然显示一个外部 IP,non-192.168.1.x
...
我的问题是,如何设置我的 DNS 区域文件,以便当我在本地网络上时,我去一个 IP 上的服务器,例如 192.168.1.20,我留在网络中并且不会被路由出去然后再回来?看来我要从 ISP 静态 IP 出去然后进来,而服务器认为是这样。