OpenWRT/Linux多WAN带宽叠加使用iptables标记策略路由负载均衡
http://www.haiyun.me/archives/iptables-nth-mark-route-load.html
之前有介绍OpenWrt下ADSL多拨使用nexthop负载均衡,负载不是很理想,本次使用iptable标记数据包并配合策略路由实现负载均衡。
WAN1数据标记:
1
2
3
4
5
|
iptables -t mangle -N WAN1 iptables -t mangle -A WAN0 -j MARK -- set -mark 1
#标记数据包 iptables -t mangle -A WAN0 -j CONNMARK --save-mark
#把数据包中的mark设置到整个连接中 |
WAN2数据标记:
1
2
3
|
iptables -t mangle -N WAN2 iptables -t mangle -A WAN2 -j MARK -- set -mark 1
iptables -t mangle -A WAN2 -j CONNMARK --save-mark |
把已存在连接中的mark设置到数据包中:
1
2
3
|
iptables -t mangle -N RESTORE iptables -t mangle -A RESTORE -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -m state --state ESTABLISHED,RELATED -j RESTORE |
使用NTH模块公平分发新数据包到WAN1和WAN2:
1
2
|
iptables -t mangle -A PREROUTING -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j WAN1 iptables -t mangle -A PREROUTING -m state --state NEW -m statistic --mode nth --every 2 --packet 1 -j WAN2 |
设置路由表:
1
2
3
4
5
6
7
8
|
cat /etc/iproute2/rt_tables
#http://www.haiyun.me 255 local 254 main 253 default 0 unspec 252 WAN1 251 WAN2 |
设置路由表默认路由:
1
2
3
4
|
ip route flush table WAN1 ip route add table WAN1 default via 2.2.2.2 dev ppp0 ip route flush table WAN2 ip route add table WAN2 default via 1.1.1.1 dev ppp1 |
根据iptables标记应用路由:
1
2
3
4
5
|
ip rule del from all fwmark 2 2> /dev/null ip rule del from all fwmark 1 2> /dev/null ip rule add fwmark 1 table my_wan0 ip rule add fwmark 2 table my_wan1 ip route flush cache |
禁用源地址验证:
1
2
|
cat /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通