我正在尝试按照此处所述在 Linux 网关上设置流量整形。脚本需要自定义,因为我有多个 LAN 接口。因此,为了塑造 LAN 端,我计划创建一个 ifb 伪设备,如下所示:
modprobe ifb
ip link set dev ifb0 up
/sbin/tc qdisc add dev $WAN_INTERFACE ingress
/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Run Code Online (Sandbox Code Playgroud)
上面提到的 gist repo 中的脚本有以下几行:
/sbin/tc qdisc add dev $WAN_INTERFACE handle ffff: ingress
/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid :1
/sbin/tc filter add dev …
Run Code Online (Sandbox Code Playgroud) 我有一组用户通过OpenVPN TCP 和 UDP(2 个服务)连接到我的服务器。这两种服务在运行tun0
和tun1
我希望能够使用 TC 命令将每个用户的带宽限制为 5mb/s 上升和 5mb/s 下降。
这很容易用 PPTP 实现,因为每个用户都有自己的界面,所以我可以为该界面创建一个新的类/过滤器,使用以下内容将其限制为我想要的速度限制:
IF=<taken from up script, i.e. ppp1>
tc qdisc del dev $IF root
tc qdisc add dev $IF root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc class add dev $IF parent 1: classid 1:1 cbq rate 10mbit allot 1500 prio 5 bounded isolated
tc filter add dev $IF parent 1: protocol ip prio 16 u32 match ip src 0.0.0.0/0 flowid 1:1 …
Run Code Online (Sandbox Code Playgroud) 我希望这很容易
up.sh
当我以 root 身份从命令行运行以下脚本时,它可以完美运行。
但是,不是每次新用户连接到 OpenVPN 时手动调用此脚本以通过 tc (qdisc) 单独限制每个新用户(User1、User2、User3 到无穷大)的带宽、延迟等,我希望脚本能够每次新用户连接到 OpenVPN 时都会调用,并且当新用户连接时能够单独调整新用户的带宽、延迟等,而不会影响当前用户的带宽、延迟等(可能是 100 或1000 个)
我尝试将脚本移动到以下文件夹,/etc/network/if-up.d
以便在新用户连接到 OpenVPN 时执行它,但是由于某种原因,该脚本没有被调用(它没有对 qdisc 进行任何更改),但它是完全相同的脚本并且运行良好当我从命令行执行它时。
我还尝试将脚本重命名为learn-address.sh
并将其放置在以下文件夹中,/etc/openvpn/netem/learn-address.sh
以便在 OpenVPN 学习新地址时自动调用,但这也不起作用
我也更新了 server.conf 文件如下
脚本安全 3
学习地址 /etc/openvpn/netem/learn-address.sh
和
脚本安全 3
up /etc/network/if-up.d/up.sh
但它也没有奏效
最后,我还尝试更新/etc/sudoers.tmp
文件以授予脚本权限,但这似乎也无济于事(参见帖子末尾)
我正在运行 Ubuntu 14.04
非常感谢您的帮助
这是我从命令行调用 up.sh 的脚本:
#!/bin/bash
# Full path to tc binary
TC=$(which tc)
#
# NETWORK CONFIGURATION
# interface - name of your interface device
# interface_speed - speed in …
Run Code Online (Sandbox Code Playgroud)