我在无头 Ubuntu 服务器上运行 torrent 客户端。此外,还有许多计算机连接到此服务器,该服务器用作互联网网关/路由器。问题是是否可以配置 iptables 以优先处理来自 eth1(lan if)的流量,而不是服务器生成的本地流量?类似于 QOS。
答案1
有几种方法可以实现您的目标。但首先,是的,这是可能的。尽管许多可能性相当复杂。
最简单的选择之一可能是在自己的用户/组下运行 torrent 守护程序。然后使用 iptables 用标志标记来自该用户/组的所有流量。然后让 tc 过滤该标志并将其放入低优先级队列中。查看此代码的底部维基百科一个想法。
对于你所问的问题,你是否只需要两个队列(图。1。),一个优先级低,一个优先级高。尽管坚持某件事可能更好更接近这个例子。您可以根据需要采用该示例,只需删除带有 nat 的部分,并使默认标记值低于您将用于守护进程生成的流量的标记。
因此,我的建议是您可以使用类似iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j MARK --set-mark 6
ZZZZ 的用户标识符。
设置标志的另一种方法是使用iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j CLASSIFY --set-class X:Y
X 和 Y 作为类标识符,ZZZZ 作为用户标识符。
图。1:
+---------+
| root 1: |
+---------+
|
+------------+
| class 1:1 |
+------------+
| |
+----+ +----+
|1:10| |1:11|
+----+ +----+
最好的办法可能是每个 fw 标记都有一片叶子。但我现在最好的建议是,阅读并尝试理解上面提到的例子根据您的需要进行调整。如果您有任何问题,请随时提出。
在上面提到的例子,理解这部分内容是否重要(图 2.) 当您想要编写 iptables 规则来标记或分类流量时。 有关它的简要说明,请参见略有不同的图表看看这个。
图2:
First you have to understand how packet traverse the filters with iptables:
+------------+ +---------+ +-------------+
Packet -| PREROUTING |--- routing-----| FORWARD |-------+-------| POSTROUTING |- Packets
input +------------+ decision +---------+ | +-------------+ out
| |
+-------+ +--------+
| INPUT |---- Local process -| OUTPUT |
+-------+ +--------+
这将为您指明正确的方向:
答案2
服务质量是一个相当复杂的话题——@anders-fu-kiaer 发布的链接可能是最好的解决方案,但相当复杂。我根本不是这方面的专家,所以我不会发表评论。
尽管如此,通常更简单的解决方案会很有用。如果您只想限制一个程序(例如,torrent 客户端)的带宽,那么一个更简单的解决方案是使用trickle
(1)。
您可以通过以下方式安装
sudo apt-get install trickle
然后你运行一个程序
trickle -d 100 -u 50 program
其program
下载带宽最高可达 100 kbps,上传带宽最高可达 50 kbps。tuxradar 上的此页面上提供了有关 trickle 的更多选项和信息:
使用 trickle 控制带宽。
(1) 这与适当的 QoS 不同:“残缺”程序使用的带宽每次都会减少,而不仅仅是在对高优先级服务有需求时才会减少,就像适当的 QoS 那样。
答案3
您不能使用 iptables 执行此操作。您需要更改路由指标。
要使所有其他接口具有比 wlan0 更高的优先级,只需运行:
ifmetric wlan0 1
要重置连接到 wlan0 的路由的度量,只需运行:
ifmetric wlan0 0