这个问题与来自@Oliver的一个很好的答案和脚本的另一个问题有关。
目标:我想修改/扩展此答案中提供的脚本 以满足我的要求,如下所示:
我有大量客户(最多 1000 个)。每个客户端应根据其 CN(通用名称)分配一个订阅类别和相应的最大数据速率。这些速率限制应在客户端连接时应用,并在其断开连接时删除:
bronze
: 1 兆位silver
: 10 兆比特gold
: 100 兆位
我想在客户端连接到 OpenVPN 服务器时即时调整每个客户端的订阅类别和相应的活动数据速率限制。客户端不必重新连接到 OpenVPN 服务器。这是可能的还是我们必须断开每个客户端并将其重新连接到 OpenVPN 以导致再次调用脚本来更改
tc
配置?tc
我们将如何从另一台计算机或应用程序(即通过 PHP)即时更新客户端订阅类和相应的活动数据速率限制,而不是使用 shell 手动修改配置?
非常感谢
这是一个解决方案,如何
tc
使用 OpenVPN 调用的脚本为单个客户端的数据速率限制(流量控制)进行流量整形。流量控制设置在
tc.sh
具有以下功能的脚本中处理:up
、、down
和client-connect
client-disconnect
/16
子网(最多 65534 个客户端)tc
使用唯一标识符(hashtables
、handles
、classids
)的其他设置。这些标识符是从客户端远程 vpn IP 的最后 16 位生成的bronze
,silver
要gold
使用其他类,只需编辑脚本并根据需要进行修改。配置
OpenVPN 服务器配置
/etc/openvpn/tc/conf
:将最后 2 行中的 DNS 服务器替换为正确的 IP 地址。
交通控制脚本
/etc/openvpn/tc/tc.sh
:使其可执行:
订阅数据库目录
/etc/openvpn/tc/db/
:此目录包含每个客户端的文件,该文件以其CN 名称命名,包含“订阅类”字符串,配置如下:
IP数据库目录
/etc/openvpn/tc/ip/
:此目录将包含
CN-name <-> IP-address
关系和tun interface
运行时期间,必须为外部应用程序tc
在客户端连接时更新设置提供。它将如下所示:
启用 IP 转发:
配置 NAT(网络地址转换):
如果您有静态外部 IP 地址,请使用
SNAT
:或者,如果您有动态分配的 IP 地址,请使用
MASQUERADE
(较慢):尽管
<if>
是外部接口的名称(即eth0
)<ip>
是外部接口的IP地址脚本使用和显示 tc 配置
tc
从外部应用程序更新“订阅类”和设置:当 OpenVPN 服务器启动并且客户端连接时,发出以下命令(升级
client1
到"gold"
订阅的示例):tc
显示设置的命令:附加信息
注意事项和可能的优化:
tc
设置仅使用少量客户端进行了测试tc
必须优化设置ifb
接口进行优化。深入了解的相关文档:
htb
)add
和del
操作