OpenVPN客户端连接服务器时如何获取其公网IP?

OpenVPN客户端连接服务器时如何获取其公网IP?

当客户端连接到我的服务器时,我需要知道它的公共 IP(即 ISP 的 IP)。我尝试了learn-address脚本,但它没有提供真实 IP。目前可以从 OpenVPN 日志文件中获取它,(模式:)MULTI: Learn: 10.2.1.5 -> client-5/27.147.X.Y:34244

该服务器运行着一个非常繁忙的 Asterisk PBX。因此频繁解析日志效率很低(当日志文件变得很大时,情况会变得更糟)。

每当客户端从不同的 IP 连接/重新连接时,我都需要更新数据库。我需要一个简单的解决方案。

确切地说,我需要映射内部 IP外层 IPOpenVPN 隧道。

tun注意:我在模式下使用来自 CCD 文件(独占 ccd)的静态分配的 IP 地址(例如,通用名称 client-5 的 10.2.1.5) 。

答案1

好的,完成了。我从 OpenVPN 在脚本执行期间传递的环境变量中找到了它。

我检查了ifconfig_pool_remote_ip环境trusted_ip变量。

这是客户端连接时 OpenVPN 执行的代码。

#!/usr/bin/env php
<?php
$con = mysqli_connect("localhost", "root", "...") or die(mysqli_error($con));
mysqli_select_db($con, "...") or die(mysqli_error($con));

$tunnel_ip = getenv('ifconfig_pool_remote_ip');
$real_ip = getenv('trusted_ip');

if ($tunnel_ip && $real_ip) {
    mysqli_query($con, "UPDATE tunnels SET real_ip = '$real_ip' WHERE ip LIKE '$tunnel_ip'");
}
// file_put_contents('/tmp/ip-updated', date('Y-m-d H:i:s') . ":  $tunnel_ip $real_ip\n", FILE_APPEND);
exit;

variables_order = "EGPCS"但是直到我添加后环境变量才可访问/etc/php.d/99-env.ini(我创建了这个文件)。

虽然它需要script-security 2添加client-connect /my/script/path.php到 OpenVPN 服务器配置文件中,但它解决了我的问题。

相关内容