将 OpenVPN 客户端路由到另一个不同的 OpenVPN 服务器

将 OpenVPN 客户端路由到另一个不同的 OpenVPN 服务器

我有这样的场景..

  1. 具有多个 OpenVPN 连接的服务器(主)(因此服务器作为客户端连接到多个 OpenVPN 服务器..可以说辅助服务器)
  2. 该服务器也运行 OpenVPN 服务器

现在我需要的是客户端将使用用户名/密码连接到 OpenVPN(主)服务器。根据该用户名,服务器将将该客户端的所有流量路由到指定的(辅助)OpenVPN 服务器

有没有办法使用 来做到这一点iptables

谢谢

答案1

我假设你想要:

one specific secondary VPN server to become the default gateway for a given client.

如果是这样,可以使用路由推送来完成。您已经知道,在 OpenVPN 连接建立后,您可以告诉客户端其“新”网关的地址。

嗯,你可以这样做动态地

来自手动的:

--client-connect script 在客户端连接上运行脚本。脚本已通过通用名称以及刚刚经过身份验证的客户端的 IP 地址作为环境变量(请参阅下面的环境变量部分)。该脚本还将尚未创建的临时文件的路径名作为 $1 (即第一个命令行参数)传递给脚本,以供脚本使用将动态生成的配置文件指令传递回 OpenVPN

如果脚本想要生成一个动态配置文件以在客户端连接时应用到服务器上,则应将其写入 $1 命名的文件中。

请参阅下面的 --client-config-dir 选项,了解可以在动态生成的配置文件中合法使用的选项。

注意脚本的返回值很重要。如果脚本返回非零错误状态,则会导致客户端断开连接。

因此,您需要做的就是维护一个(客户端通用名称、默认网关)条目列表,并准备一个client-connect脚本来检查客户端名称并准备适当的内容push "route-gateway a.b.c.d"发送到 OpenVPN 服务器,然后从那里发送到客户端。

您还可以将ip命令放入脚本中,但也许您不需要它们。

例如:

#!/bin/sh

# Connect script for OpenVPN. This is /usr/local/bin/openvpn-connect-script.sh
# and OpenVPN server requires the extra option
#
#     --connect-client /usr/local/bin/openvpn-connect-script.sh
#

$script="$1"

# We could even fetch this from, say, a MySQL database.
# GATEWAY=$( echo "SELECT gateway FROM users_config WHERE user='$username';" \
#     | mysql -N openvpn )

case "$username" in
    "lserni")
        GATEWAY=192.168.168.192
        ;;
    "apiraino")
        GATEWAY=192.168.170.133
        ;;
    "*")
        GATEWAY=192.168.172.1
        ;;
esac

cat <<-CONFIG > $script

# Extra options, user-dependant.

gateway $GATEWAY

CONFIG

exit 0

相关内容