3步实现sshuttle流量整形:用tc命令控制传输速率

3步实现sshuttle流量整形:用tc命令控制传输速率

【免费下载链接】sshuttle Wrong project! You should head over to http://github.com/sshuttle/sshuttle 【免费下载链接】sshuttle 项目地址: https://gitcode.com/gh_mirrors/ssh/sshuttle

你是否遇到过sshuttle隧道占用过多带宽导致其他服务卡顿?是否需要为不同类型流量分配优先级?本文将通过Linux的tc(Traffic Control)工具与sshuttle结合,实现精细化的传输速率控制,让你在合规使用网络的同时兼顾带宽管理。

为什么需要流量整形

sshuttle作为轻量级隧道转发工具,通过SSH连接转发流量,但其本身不提供带宽控制功能。当同时传输大文件和进行实时通信时,可能出现视频会议卡顿、SSH连接超时等问题。通过tc工具可实现:

  • 限制单用户/IP的最大带宽
  • 为SSH控制信道分配高优先级
  • 避免突发流量冲击网络

tc与sshuttle的协同工作原理

Linux的tc(Traffic Control)工具通过以下组件实现流量控制:

  • QDisc(排队规则):控制数据包如何排队等待传输
  • Class(类别):将流量分组并分配不同带宽
  • Filter(过滤器):根据条件(如端口、IP)将流量分配到不同类别

sshuttle的流量特征:

  • 默认使用TCP 22端口建立SSH连接
  • 数据转发通过tunnel.py模块实现
  • 所有转发流量经过虚拟网卡或原始套接字

mermaid

实施步骤

1. 安装依赖工具

确保系统已安装tc相关组件:

sudo apt-get install iproute2  # Debian/Ubuntu
# 或
sudo yum install iproute-tc     # CentOS/RHEL

2. 创建tc配置脚本

在项目中创建流量控制脚本:

#!/bin/bash
# 创建于 scripts/traffic-control.sh

# 清除现有规则
sudo tc qdisc del dev eth0 root

# 添加根队列规则
sudo tc qdisc add dev eth0 root handle 1: htb default 10

# 创建主类别(总带宽100Mbps)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit

# 创建sshuttle专用类别(20Mbps带宽,最高30Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20mbit ceil 30mbit

# 添加SFQ公平队列
sudo tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

# 过滤sshuttle流量(假设使用默认SSH端口)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
  match ip dport 22 0xffff flowid 1:10

3. 集成到sshuttle启动流程

修改sshuttle启动脚本,添加流量控制支持:

# 在 [sshuttle/__main__.py](https://link.gitcode.com/i/e852f75be453052fb5502408e9dab47a) 中添加
import subprocess

def start_traffic_control():
    """启动流量控制"""
    subprocess.run(["sudo", "./scripts/traffic-control.sh"], check=True)

def stop_traffic_control():
    """停止流量控制"""
    subprocess.run(["sudo", "tc", "qdisc", "del", "dev", "eth0", "root"], check=True)

# 在main函数中添加
if args.traffic_control:
    start_traffic_control()
    atexit.register(stop_traffic_control)

验证与监控

使用以下命令监控流量控制效果:

# 查看tc配置
sudo tc qdisc show dev eth0
sudo tc class show dev eth0

# 实时监控带宽使用
sudo tc -s qdisc ls dev eth0

# 结合iftop查看流量
sudo iftop -i eth0 -f 'port 22'

高级配置:基于用户的带宽限制

通过扩展tc过滤器,可以为不同用户分配不同带宽:

# 添加用户ID过滤规则
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
  match ip src 192.168.1.100 flowid 1:10  # 用户A
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
  match ip src 192.168.1.101 flowid 1:20  # 用户B

注意事项

  1. tc配置需要root权限
  2. 不同网络接口名称可能不同(eth0、wlan0等)
  3. 规则在系统重启后会丢失,需添加到启动脚本
  4. 详细参数调整请参考 Linux TC官方文档

参考资料

通过以上配置,你可以有效控制sshuttle的网络带宽使用,确保关键服务的流畅运行。如需更复杂的流量控制策略,可以扩展tc规则或结合sshuttle的firewall.py模块实现深度集成。

【免费下载链接】sshuttle Wrong project! You should head over to http://github.com/sshuttle/sshuttle 【免费下载链接】sshuttle 项目地址: https://gitcode.com/gh_mirrors/ssh/sshuttle

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值