当客户端连接到我的服务器时,我需要知道它的公共 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 服务器配置文件中,但它解决了我的问题。